none
¿Cómo selecciono un rango de celdas de Excel desde mi aplicación en Vb.net? RRS feed

  • Pregunta

  • Hola de nuevo, tengo un botón en Form de Vb.net que coge el valor de una fecha de un textbox e intento que sea la primera celda de un rango pero me da error la fórmula. ¿Puede alguien decirme donde tengo el error? Gracias.

    .ActiveSheet.Range(exHoja.Cells(NumRow, NumCol), exHoja.Cells(exHoja.UsedRange.Rows.Count, exHoja.UsedRange.Columns.Count)).Select() ' SELECCIONAMOS EL RANGO DE CELDAS

    El error que  me da es: System.NullReferenceException: 'Referencia a objeto no establecida como instancia de un objeto.'

    jueves, 1 de octubre de 2020 15:47

Respuestas

  • Hola solilopi, 

      

    ¿Alguna novedad sobre la consulta realizada? ¿Han sido útiles las  respuestas proporcionadas?  

    Espero su respuesta.  

    Gracias por usar los foros de MSDN.  

    Andres Aguilar 

    ____________________________  

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN sientase en la libertad de contactar  MSDNFSF@microsoft.com. 

    Perdón, estaba enfrascado en el problema y no me he acordado.

    La solución que he conseguido es:

    Dim RangeSeleccionado As String = PrimeraCell & ":" & Chr(64 + TotalNumCol - NumCol + 1) & TotalNumRow  

    A partir de aquí ya tengo el rango selecionado.

    Repito, perdón y gracias por vuestra ayuda/interés.

    viernes, 2 de octubre de 2020 18:51

Todas las respuestas

  • Ese error quiere decir que una de las variables que intervienen en esa línea vale Nothing. Al acceder al contenido de Nothing da un error porque Nothing no tiene contenido.

    No se puede saber qué variable es la que vale Nothing con solo ver esa línea. Podría ser la variable del With que contiene esa línea, o podría ser ActiveSheet, o podría ser exHoja, etc., etc. Tendrás que usar el debugger cuando se detenga sobre el error y examinar las variables una por una hasta que encuentres cuál es Nothing.

    jueves, 1 de octubre de 2020 17:01
  • Hola, he repasado todas las variables y todas tienen valores, ¿Dónde puede estar el fallo?
    Private Sub Guarda_btn_Click(sender As Object, e As EventArgs) Handles Guarda_btn.Click
    
            valor = fecha_tb.Text
    
            'ABRIMOS EL LIBRO
    
            exApp = New Excel.Application
            exApp.Workbooks.Open(archivo)
    
            exApp.Range("A1").Select()
            exApp.ActiveSheet.Select
    
            If exApp.Selection.Find(valor) Is Nothing Then
    
                Dim Message As String = "ERROR. NO HAY SELECCIONADO NADA."
                Dim Caption As String = "ERROR."
                Dim Buttons As MessageBoxButtons = MessageBoxButtons.OK
                Dim tipo As MessageBoxIcon = MessageBoxIcon.Error
    
                Dim Result As DialogResult
    
                Result = MessageBox.Show(Message, Caption, Buttons, tipo)
    
            Else
    
                exApp.Selection.Find(valor).Select()
                
                TotalNumRow = exApp.ActiveSheet.UsedRange.Rows.Count
                TotalNumCol = exApp.ActiveSheet.UsedRange.Columns.Count
    
            End If
    
            With exApp
    
                exApp.Worksheets.Add()
    
                exApp.Worksheets(1).Select()
    
                .Sheets.Add() ' AGREGAMOS NUEVA HOJA AL LIBRO  
                .ActiveSheet.Select ' LA SELECCIONAMOS  
                .ActiveSheet.Name = Destino ' LE CAMBIAMOS EL NOMBRE  
                .Sheets(1).Select ' NOS POSICIONAMOS EN LA HOJA DE ORIGEN  
                .ActiveSheet.Range(exHoja.Cells(TotalNumCol, TotalNumRow), exHoja.Cells(exHoja.UsedRange.Rows.Count, exHoja.UsedRange.Columns.Count)).Select() ' SELECCIONAMOS EL RANGO DE CELDAS  
                .ActiveSheet.Selection.Copy ' COPIAMOS EL CONTENIDO  
                .ActiveSheet.Sheets(2).Select ' NOS POSICIONAMOS EN LA NUEVA HOJA  
                .ActiveSheet.Cells.Select()
                .ActiveSheet.Paste ' PEGAMOS LOS DATOS  
                .Application.CutCopyMode = False
                .ActiveWorkbook.Save() ' GRABAMOS LOS CAMBIOS EN EL LIBRO  
    
            End With
    
            exApp.Workbooks.Close()
            exApp.Quit()
            exHoja = Nothing
            exLibro = Nothing
            exApp = Nothing
    
            GC.WaitForPendingFinalizers()
            GC.Collect()
    
            MsgBox("OK", vbInformation)
    
        End Sub

    viernes, 2 de octubre de 2020 8:26
  • Ese error te indica que estás intentando trabajar con algún valor Nothing.

    Comprueba los valores ".Count" en el momento del error.


    Saludos, Javier J

    viernes, 2 de octubre de 2020 10:16
  • Hola, he repasado todas las variables y todas tienen valores,

    Puedes tener la absoluta seguridad de que alguna de ellas es Nothing. No tiene por qué ser la variable "raiz", puede ser alguno de los pasos intermedios.

    Por ejemplo, no se ve en este fragmento de código ningún sitio donde inicialices la variable exHoja. Pero incluso aunque exHoja no sea Nothing, podría serlo exHoja.UsedRange o exHoja.UsedRange.Rows. Cualquiera de ellas produciría el error que estás viendo.

    Una sugerencia para depurar esta situación es que en lugar de hacerlo todo en una única línea de código, lo separes en varias sentencias que vayan obteniendo poco a poco las distintas porciones que al final le pasas al .Select(). De esa manera, se te parará en el paso concreto que produce el error, en lugar de la línea "grande" que hace todo a la vez.

    viernes, 2 de octubre de 2020 10:50
  • Hola solilopi antes del

    .ActiveSheet.Select

    pones

    .ActiveSheet.Activate()

    y prueva denuevo

    tambien prueba de este modo

    .ActiveSheet.Range(.Cells(TotalNumCol, TotalNumRow), .Cells(.ActiveSheet.UsedRange.Rows.Count, .UsedRange.Columns.Count)).Select()

    • Editado DANTE-3D viernes, 2 de octubre de 2020 13:29
    viernes, 2 de octubre de 2020 13:11
  • Hola solilopi, 

      

    ¿Alguna novedad sobre la consulta realizada? ¿Han sido útiles las  respuestas proporcionadas?  

    Espero su respuesta.  

    Gracias por usar los foros de MSDN.  

    Andres Aguilar 

    ____________________________  

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN sientase en la libertad de contactar  MSDNFSF@microsoft.com. 

    viernes, 2 de octubre de 2020 17:59
    Moderador
  • Hola solilopi, 

      

    ¿Alguna novedad sobre la consulta realizada? ¿Han sido útiles las  respuestas proporcionadas?  

    Espero su respuesta.  

    Gracias por usar los foros de MSDN.  

    Andres Aguilar 

    ____________________________  

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN sientase en la libertad de contactar  MSDNFSF@microsoft.com. 

    Perdón, estaba enfrascado en el problema y no me he acordado.

    La solución que he conseguido es:

    Dim RangeSeleccionado As String = PrimeraCell & ":" & Chr(64 + TotalNumCol - NumCol + 1) & TotalNumRow  

    A partir de aquí ya tengo el rango selecionado.

    Repito, perdón y gracias por vuestra ayuda/interés.

    viernes, 2 de octubre de 2020 18:51