none
Buscar datos en excel desde visual studio con visual basic RRS feed

  • Pregunta

  • Hola foro!!!!

    Vamos con otra pregunta a ver como sale.

    He conseguido introducir los datos en la hoja excel, ordenarlos, pero ahora quiero que me los "devuelva" vamos que quiero buscar un dato de una columna (DNI) y que me de todos sus datos relacionados (nombre y apellidos por ejemplo)

    El código que tengo es

     Private Sub BoBusCli2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BoBusCli2.Click

            Dim xlApp As Excel.Application
            Dim xlLibro As Excel.Workbook
            Dim xlHoja As Excel.Worksheet
            xlApp = New Excel.Application
            xlLibro = xlApp.Workbooks.Open("d:\GESTION NOELIA\DATOS\GESNOECLI.XLSX")
            xlHoja = xlLibro.Worksheets("CLIENTES")
            Info.Text = "Accediendo a la base de datos de clientes."
            Dim BusCelda As Range
            Dim NIF As String = TBBusCIF.Text
            LabCIF.Text = TBBusCIF.Text
            xlHoja.Select()
            xlHoja.Range("A:A").Find(TBBusCIF.Text).Activate()
            'hasta aqui parece que funciona
            LabNom.Text = xlHoja.ActivateCell.Offset(0, 4).Value
            Info.Text = "Buscando cliente."

    End Sub

    El error que me da es 

    Excepción no controlada del tipo 'System.MissingMemberException' en Microsoft.VisualBasic.dll

    Información adicional: No se encuentra el miembro público 'ActivateCell' en el tipo 'Worksheet'.

    Espero vuestras respuestas para que me deis luz en esta duda!!!

    martes, 21 de marzo de 2017 6:29

Respuestas

  • Claro, ActiveCell está definido para xlApp. Usa este código

    Dim xlApp As Object
    Dim xlLibro As Object
    Dim xlHoja As Object
    
    xlApp = CreateObject("Excel.Application")
    xlLibro = xlApp.Workbooks.Open("C:\Trabajos\TrabajosVss\Lapiz_Contable\Datos\C9\Documentos\2017-02.xls")
    xlHoja = xlLibro.Worksheets("Sheet1")
    Info.Text = "Accediendo a la base de datos de clientes."
    Dim BusCelda As Object
    Dim NIF As String = TBBusCIF.Text
    LabCIF.Text = TBBusCIF.Text
    xlHoja.Select()
    BusCelda = xlHoja.Range("A:A").Find(TBBusCIF.Text).Activate()
    
    If Not BusCelda Is Nothing Then
        MsgBox(xlApp.ActiveCell.Offset(0, 4).Value)
        Info.Text = "Buscando cliente."
    End If


    Saludos, Javier J

    miércoles, 22 de marzo de 2017 8:07

Todas las respuestas

  • En lugar de .ActivateCell debes poner .ActiveCell para trabajar sobre la celda seleccionada en ese momento:

    LabNom.Text = xlHoja.ActiveCell.Offset(0, 4).Value

    También debes controlar la posibilidad de que el CIF buscado no exista. Para hecrlo puedes usar algo como 

    Dim rFound As Range

    ...

    Set rFound = xlHoja.Range("A:A").Find(TBBusCIF.Text).Activate()

    If Not rFound Is Nothing Then
       LabNom.Text = xlHoja.ActiveCell.Offset(0, 4).Value
       Info.Text = "Buscando cliente."
    Else
       Info.Text = "El CIF introducido no se encuentra."
    End If



    Saludos, Javier J

    martes, 21 de marzo de 2017 8:20
  • Muchas gracias por tu respuesta, aunque siento decirte... que sigue sin funcionar.

    El error sigue siendo el mismo

    Excepción no controlada del tipo 'System.MissingMemberException' en Microsoft.VisualBasic.dll

    Información adicional: No se encuentra el miembro público 'ActiveCell' en el tipo 'Worksheet'.

    El código primero me funcionaba en VBA directo en excel, pero la traducción a VB me está costando un poco....

    martes, 21 de marzo de 2017 17:48
  • Claro, ActiveCell está definido para xlApp. Usa este código

    Dim xlApp As Object
    Dim xlLibro As Object
    Dim xlHoja As Object
    
    xlApp = CreateObject("Excel.Application")
    xlLibro = xlApp.Workbooks.Open("C:\Trabajos\TrabajosVss\Lapiz_Contable\Datos\C9\Documentos\2017-02.xls")
    xlHoja = xlLibro.Worksheets("Sheet1")
    Info.Text = "Accediendo a la base de datos de clientes."
    Dim BusCelda As Object
    Dim NIF As String = TBBusCIF.Text
    LabCIF.Text = TBBusCIF.Text
    xlHoja.Select()
    BusCelda = xlHoja.Range("A:A").Find(TBBusCIF.Text).Activate()
    
    If Not BusCelda Is Nothing Then
        MsgBox(xlApp.ActiveCell.Offset(0, 4).Value)
        Info.Text = "Buscando cliente."
    End If


    Saludos, Javier J

    miércoles, 22 de marzo de 2017 8:07
  • Perfecto!!! Funciona, no se muy bien por que me da los datos cambiados de columna (-1) pero bueno esta solucionado.

    el problema que me genera ahora es que si el CIF no es correcto me da error, y eso que le meti la condicion, el codigo ahora se me queda asi:

    Dim xlApp As Object
            Dim xlLibro As Object
            Dim xlHoja As Object
            xlApp = CreateObject("Excel.Application")
            xlLibro = xlApp.Workbooks.Open("d:\GESTION NOELIA\DATOS\GESNOECLI.XLSX")
            xlHoja = xlLibro.Worksheets("CLIENTES")
            Info.Text = "Accediendo a la base de datos de clientes."
            Dim BusCelda As Object
            Dim NIF As String = TBBusCIF.Text
            LabCIF.Text = TBBusCIF.Text
            xlHoja.Select()
            'BusCelda = xlHoja.Range("A:A").Find(TBBusCIF.Text).Activate()

            If Not xlHoja.Range("A:A").Find(TBBusCIF.Text).Activate() Is Nothing Then
                LabNom.Text = xlApp.ActiveCell.Offset(0, 3).Value
                LabApe1.Text = xlApp.ActiveCell.Offset(0, 1).Value
                LabApe2.Text = xlApp.ActiveCell.Offset(0, 2).Value
                LabDir.Text = xlApp.ActiveCell.Offset(0, 4).Value
                LabCP.Text = xlApp.ActiveCell.Offset(0, 5).Value
                LabPob.Text = xlApp.ActiveCell.Offset(0, 6).Value
                LabProv.Text = xlApp.ActiveCell.Offset(0, 7).Value
                LabTlf1.Text = xlApp.ActiveCell.Offset(0, 8).Value
                LabTlf2.Text = xlApp.ActiveCell.Offset(0, 9).Value
                LabMail.Text = xlApp.ActiveCell.Offset(0, 10).Value
                LabO.Text = xlApp.ActiveCell.Offset(0, 11).Value
                'MsgBox(xlApp.ActiveCell.Offset(0, 4).Value)
                Info.Text = "Buscando cliente."
            Else
                Info.Text = "El CIF Introducido no se encuentra"
            End If

    Muchas gracias por cierto, pero no termino de entender cuando tengo que programar para excel y cuando para visual studio, es lo que más me lleva de cabeza.

    Y repito, muchisimas gracias por tu ayuda!!!!!

    miércoles, 22 de marzo de 2017 9:23