Error en el Método Range de la Clase WorkSheet

Trabajando con un código existente para instalar y mejorar la ayuda en un trabajo, surge en algún momento en que el código acciona, el error que marco como titulo y la verdad, no me doy cuenta cual puede ser la cosa que lo provoca.

Por mail privado te acercare la consulta gráfica

2 respuestas

Respuesta
1

H o l a:

Tienes esto:

    Set Instrucciones = ThisWorkbook.Sheets("AYUDA")
    'se cuenta el total de temas
    Tema = Application.WorksheetFunction.CountA(Instrucciones.Range(rgoAyuda)) + 1

Pero la variable rgoAyuda está vacía, tienes que poner el rango previamente, por ejemplo:

    Set Instrucciones = ThisWorkbook.Sheets("AYUDA")
    'se cuenta el total de temas
    rgoAyuda = "B2:B4"
    Tema = Application.WorksheetFunction.CountA(Instrucciones.Range(rgoAyuda)) + 1

Veo que antes de llamar el formulario Ayuda tienes esto:

Private Sub CommandButton18_Click()
'para la ayuda solo oculto
  Me.Hide
  rgoAyuda = "B2:B90"
  filAyuda = 2
  AYUDA.Show
End Sub

Estas asignando valores a las variables rgoAyuda y filAyuda, pero esas variables son locales en en el formulario Ayuda, para que funcionen, las tienes que declarar como globales en el formulario ayuda:

Entonces al principio de todo el código de tu formulario Ayuda pon 

Dim filAyuda

Dim rgoAyuda


Ahora para llamarlas puede ser de esta forma:

Private Sub CommandButton18_Click()
'para la ayuda solo oculto
    Me.Hide
    With AYUDA
        .rgoAyuda = "B2:B90"
        .filAyuda = 2
        .Show
    End With
End Sub

Tu formulario ayuda quedaría así:

Option Explicit
Dim Tema As Integer
Dim TemaActual As Integer
Dim Instrucciones As Worksheet
Dim filAyuda
Dim rgoAyuda
'
Private Sub UserForm_Initialize()
Dim Tema As Integer
Dim TemaActual As Integer
Dim FILA As Integer
Dim Instrucciones As Worksheet
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
    Me.Top = 136.5 'distancia con la parte superior
    Me.Left = 428.25 ' distancia con la parte izquierda de la ventana
    'se establece la hoja donde estará el texto de Ayuda
    Set Instrucciones = ThisWorkbook.Sheets("AYUDA")
    'se cuenta el total de temas
    Tema = Application.WorksheetFunction.CountA(Instrucciones.Range(rgoAyuda)) + 1
    'se llena el combobox con la lista de temas
    For FILA = filAyuda To Tema + filAyuda - 1
     Títulos.AddItem Instrucciones.Cells(FILA, 2)
    Next FILA
    Títulos.ListIndex = 0
    TemaActual = 1
    UpdateForm
End Sub

S a l u d o s

Dante

Por correo privado te paso una imagen del error que acontece ahora

Abrazo

Te anexo los códigos, son varios detalles.

Primero, las variables deben ser declaradas como Public en el formulario Ayuda:

Option Explicit
Dim Tema As Integer
Dim TemaActual As Integer
Dim Instrucciones As Worksheet
Public filAyuda
Public rgoAyuda

El código para cargar la ayuda, debe estar en el evento Activate y lo tenías en el evento Initalize. En Activate puedes utilizar las variables que están enviando, en Initialize no están todavía las variables.

Private Sub UserForm_Activate()
    Dim Tema As Integer
    Dim TemaActual As Integer
    Dim FILA As Integer
    'Dim Instrucciones As Worksheet
    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
    Me.Top = 136.5 'distancia con la parte superior
    Me.Left = 428.25 ' distancia con la parte izquierda de la ventana
    'se establece la hoja donde estará el texto de Ayuda
    Set Instrucciones = ThisWorkbook.Sheets("AYUDA")
    'se cuenta el total de temas
    Tema = Application.WorksheetFunction.CountA(Instrucciones.Range(rgoAyuda)) + 1
    'se llena el combobox con la lista de temas
    For FILA = filAyuda To Tema + filAyuda - 1
     Títulos.AddItem Instrucciones.Cells(FILA, 2)
    Next FILA
    Títulos.ListIndex = 0
    TemaActual = 1
    UpdateForm
End Sub

La variable Instrucciones, la tienes declarada como global, es por eso que ya no se requiere que la declares nuevamente en el evento Activate.


El botón quedaría así:

Private Sub CommandButton18_Click()
'para la ayuda solo oculto
    Me.Hide
    With AYUDA
        .rgoAyuda = "B2:B90"
        .filAyuda = 2
        .Show
    End With
End Sub

  S al u d o s

Respuesta

Pon la parte del código que te marca con error.

Seguramente no tienes algún error en la sintaxis o la hoja que nombras no existe, te dejo un link con ejemplos sobre como referenciar o seleccionar hojas

http://www.programarexcel.com/2013/06/seleccionar-o-hacer-referencia-celdas-o.html 

Además te dejo otro donde hay cientos de ejemplos de macros, fíjate en alguno para que puedas sacar un ejemplo y ver porque puede que no te funcione.

http://www.programarexcel.com/2014/07/worksheetfunction-funciones-de-excel-en.html 

Nuevamente si no pones la parte del código que da error será difícil que pueda ayudarte.

¡Gracias! Vi los links y tome nota de los ejemplos.

De todos modos esto era un problema de declaración de variables.

Abrazo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas