Como hacer referencia a una hoja Excel

Espero estés bien.

Tengo un código que en un momento determinado, activa un form con un listbox pero todo hace referencia a datos de una hoja Excel cuyo nombre cambia durante la activación del código pasando de llamarse originalmente Hoja1 a C20170428 (a cont el código para renombrar hoja)

nbreho = ""
For Each sh In Sheets
If Left(sh.Name, 1) = "C" Then
    nbreho = sh.Name
End If
Next sh
If nbreho = "" Then
    MsgBox "No se encuentran datos capturados.", , "ERROR"
    Exit Sub
End If
Application.ScreenUpdating = False
Sheets(nbreho).Select

Luego y en algún momento utilizo una subrutina para la búsqueda de esta hoja con nuevo nombre pero luego de encontrarla y al activarse el código del form con listbox, me sale error no coinciden los tipos justo en la línea en negrita

Private Sub UserForm_Initialize()
'llenar el listbox
    Dim TopOffset As Integer
    Dim LeftOffset As Integer
    TopOffset = (Application.UsableHeight / 2) - (Me.Height / 2)
    LeftOffset = (Application.UsableWidth / 2) - (Me.Width / 2)
    Me.Top = Application.Top + TopOffset
    Me.Left = Application.Left + LeftOffset
Dim i As Long
For i = 2 To Sheets("nbreho").Range("A65536").End(xlUp).Row

ListBox1. AddItem Sheets("nbreho").Cells(i, 2)
ListBox1.List(i - 2, 1) = Sheets("nbreho").Cells(i, 1)
ListBox1.List(i - 2, 2) = Sheets("nbreho").Cells(i, 3)
ListBox1.List(i - 2, 3) = Sheets("nbreho").Cells(i, 4)
ListBox1.List(i - 2, 4) = Sheets("nbreho").Cells(i, 5)
ListBox1.List(i - 2, 5) = Sheets("nbreho").Cells(i, 6)
ListBox1.List(i - 2, 6) = Sheets("nbreho").Cells(i, 7)
ListBox1.List(i - 2, 7) = Sheets("nbreho").Cells(i, 8)
ListBox1.List(i - 2, 8) = Sheets("nbreho").Cells(i, 9)
ListBox1.List(i - 2, 9) = Sheets("nbreho"). Cells(i, 10)

Next i
End Sub

La pregunta es: si con un nombre normal como "Histórico", todo funciona bien, ¿por qué al cambiar el nombre de la hoja interponiendo este pequeño código me da error?

1 Respuesta

Respuesta
1

Lo que sucede es que el valor de la variable se borra cuando finaliza la primer macro, lo que debes de hacer es declarar una variable fuera de la macro para que una vez finalizada la variable mantenga su valor.

Dim nbreho as String
sub macro1()
nbreho = ""
For Each sh In Sheets
If Left(sh.Name, 1) = "C" Then
    nbreho = sh.Name
End If
Next sh
If nbreho = "" Then
    MsgBox "No se encuentran datos capturados.", , "ERROR"
    Exit Sub
End If
Application.ScreenUpdating = False
Sheets(nbreho).Select
end sub
Private Sub UserForm_Initialize()
'llenar el listbox
    Dim TopOffset As Integer
    Dim LeftOffset As Integer
    TopOffset = (Application.UsableHeight / 2) - (Me.Height / 2)
    LeftOffset = (Application.UsableWidth / 2) - (Me.Width / 2)
    Me.Top = Application.Top + TopOffset
    Me.Left = Application.Left + LeftOffset
Dim i As Long
For i = 2 To Sheets("nbreho").Range("A65536").End(xlUp).Row
ListBox1. AddItem Sheets("nbreho").Cells(i, 2)
ListBox1.List(i - 2, 1) = Sheets("nbreho").Cells(i, 1)
ListBox1.List(i - 2, 2) = Sheets("nbreho").Cells(i, 3)
ListBox1.List(i - 2, 3) = Sheets("nbreho").Cells(i, 4)
ListBox1.List(i - 2, 4) = Sheets("nbreho").Cells(i, 5)
ListBox1.List(i - 2, 5) = Sheets("nbreho").Cells(i, 6)
ListBox1.List(i - 2, 6) = Sheets("nbreho").Cells(i, 7)
ListBox1.List(i - 2, 7) = Sheets("nbreho").Cells(i, 8)
ListBox1.List(i - 2, 8) = Sheets("nbreho").Cells(i, 9)
ListBox1.List(i - 2, 9) = Sheets("nbreho"). Cells(i, 10)
Next i
End Sub

¡Gracias! 

ya encontré el verdadero problema

la variable estaba definida como ("nbreho") y va sin comillas.

corregí este dato y corrió perfecto

Gracias de todos modos

Es verdad, no note ese pequeño detalle. Pero que bueno que lo hayas solucionado.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas