PESQUISA EXATA EM UM PLANILHA EXCEL
Pesquisando nos fóruns e pegando alguns códigos na web, cheguei ao código abaixo, onde eu tenho uma tabela em XLS e um pequeno software feito em VB que eu irei instalar em um coletor de dados, o software serve apenas para consulta.
Detalhe, a planilha esta anexa, o detalhe é que o código está buscando na tabela, os valores aproximados, e eu gostaria que buscasse apenas o valor exato.
Na tabela temos o TAG PN-5521, que usarei como exemplo, quando insiro o código no textbox e clico em procurar, ele acha o valor e traz os detalhes do TAG, porém se eu colocar apenas 5521 e clicar em pesquisar, ele me traz o primeiro registro que contenha esta numeração, ou seja faz uma pesquisa não exata.
Abaixo segue o código, se alguem puder ajudar, fico agradecido.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim retval As String
retval = Dir([Ô]c: este.xls[Ô])
If retval = [Ô]teste.xls[Ô] Then
GoTo 1
Else : MsgBox([Ô]Favor carregar planilha.[Ô])
GoTo 2
End If
1:
If TextBox1.Text = [Ô][Ô] Then
TextBox2.Text = [Ô][Ô]
TextBox3.Text = [Ô][Ô]
TextBox4.Text = [Ô][Ô]
TextBox5.Text = [Ô][Ô]
TextBox6.Text = [Ô][Ô]
TextBox7.Text = [Ô][Ô]
MsgBox([Ô]Favor inserir um TAG.[Ô])
GoTo 2
End If
Dim xl As New Excel.Application
Dim xlw As Excel.Workbook
Dim xlc As String
Dim c As Object
xlw = xl.Workbooks.Open([Ô]c: este.xls[Ô])
xlw.Sheets([Ô]Plan1[Ô]).Select()
xlc = TextBox1.Text
With xlw.Worksheets([Ô]Plan1[Ô]).Range([Ô]A:A[Ô])
c = .find(xlc)
If Not c Is Nothing Then
c.activate()
TextBox2.Text = c.offset(0, 1).value
TextBox3.Text = c.offset(0, 2).value
TextBox4.Text = c.offset(0, 3).value
TextBox5.Text = c.offset(0, 4).value
TextBox6.Text = c.offset(0, 5).value
TextBox7.Text = c.offset(0, 6).value
KillProcess([Ô]excel.exe[Ô])
Else
TextBox1.Text = [Ô][Ô]
TextBox2.Text = [Ô][Ô]
TextBox3.Text = [Ô][Ô]
TextBox4.Text = [Ô][Ô]
TextBox5.Text = [Ô][Ô]
TextBox6.Text = [Ô][Ô]
TextBox7.Text = [Ô][Ô]
MsgBox([Ô]TAG não encontrado.[Ô])
GoTo 2
End If
End With
2:
TextBox1.Focus()
End Sub
Detalhe, a planilha esta anexa, o detalhe é que o código está buscando na tabela, os valores aproximados, e eu gostaria que buscasse apenas o valor exato.
Na tabela temos o TAG PN-5521, que usarei como exemplo, quando insiro o código no textbox e clico em procurar, ele acha o valor e traz os detalhes do TAG, porém se eu colocar apenas 5521 e clicar em pesquisar, ele me traz o primeiro registro que contenha esta numeração, ou seja faz uma pesquisa não exata.
Abaixo segue o código, se alguem puder ajudar, fico agradecido.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim retval As String
retval = Dir([Ô]c: este.xls[Ô])
If retval = [Ô]teste.xls[Ô] Then
GoTo 1
Else : MsgBox([Ô]Favor carregar planilha.[Ô])
GoTo 2
End If
1:
If TextBox1.Text = [Ô][Ô] Then
TextBox2.Text = [Ô][Ô]
TextBox3.Text = [Ô][Ô]
TextBox4.Text = [Ô][Ô]
TextBox5.Text = [Ô][Ô]
TextBox6.Text = [Ô][Ô]
TextBox7.Text = [Ô][Ô]
MsgBox([Ô]Favor inserir um TAG.[Ô])
GoTo 2
End If
Dim xl As New Excel.Application
Dim xlw As Excel.Workbook
Dim xlc As String
Dim c As Object
xlw = xl.Workbooks.Open([Ô]c: este.xls[Ô])
xlw.Sheets([Ô]Plan1[Ô]).Select()
xlc = TextBox1.Text
With xlw.Worksheets([Ô]Plan1[Ô]).Range([Ô]A:A[Ô])
c = .find(xlc)
If Not c Is Nothing Then
c.activate()
TextBox2.Text = c.offset(0, 1).value
TextBox3.Text = c.offset(0, 2).value
TextBox4.Text = c.offset(0, 3).value
TextBox5.Text = c.offset(0, 4).value
TextBox6.Text = c.offset(0, 5).value
TextBox7.Text = c.offset(0, 6).value
KillProcess([Ô]excel.exe[Ô])
Else
TextBox1.Text = [Ô][Ô]
TextBox2.Text = [Ô][Ô]
TextBox3.Text = [Ô][Ô]
TextBox4.Text = [Ô][Ô]
TextBox5.Text = [Ô][Ô]
TextBox6.Text = [Ô][Ô]
TextBox7.Text = [Ô][Ô]
MsgBox([Ô]TAG não encontrado.[Ô])
GoTo 2
End If
End With
2:
TextBox1.Focus()
End Sub
Na verdade, não tem nada de VB.Net na sua dúvida.
Tem, isto sim, á ver com VBA (ou Microsoft.Office.Interop.Excel), e se relaciona com a enumeração XlLookAt.
O método Find do objeto Range do Excel retorna uma nova Range, como você já percebeu, e é composto por vários parâmetros, que [Ô]formatam[Ô] a busca. Dentre eles, os principais acredito que sejam:
1º- O que você deseja localizar ?
2º- Após qual célula você deseja localizar ?
3º- Qual tipo de objeto você deseja localizar ?
4º- Você deseja uma localização integral (XlLookAt.xlWhole) ou parcial (XlLookAt.xlPart) ?
5º- Você deseja a ordem da busca por colunas (XlSearchOrder.xlByColumns) ou por linhas (XlSearchOrder.xlByRows) ?
6º- A direção da busca deve ser a próxima ocorrência (XlSearchDirection.xlNext) ou a ocorrência anterior (XlSearchDirection.xlPrevious) ?
7º- Sua busca deve respeitar caixa alta/baixa ?
Isso, creio, deve ajudar.
Tem, isto sim, á ver com VBA (ou Microsoft.Office.Interop.Excel), e se relaciona com a enumeração XlLookAt.
O método Find do objeto Range do Excel retorna uma nova Range, como você já percebeu, e é composto por vários parâmetros, que [Ô]formatam[Ô] a busca. Dentre eles, os principais acredito que sejam:
1º- O que você deseja localizar ?
2º- Após qual célula você deseja localizar ?
3º- Qual tipo de objeto você deseja localizar ?
4º- Você deseja uma localização integral (XlLookAt.xlWhole) ou parcial (XlLookAt.xlPart) ?
5º- Você deseja a ordem da busca por colunas (XlSearchOrder.xlByColumns) ou por linhas (XlSearchOrder.xlByRows) ?
6º- A direção da busca deve ser a próxima ocorrência (XlSearchDirection.xlNext) ou a ocorrência anterior (XlSearchDirection.xlPrevious) ?
7º- Sua busca deve respeitar caixa alta/baixa ?
Isso, creio, deve ajudar.
Faça seu login para responder