Instrucción funciona correctamente en botón de formulario no así en un módulo

Tengo un botón en un formulario que funciona correctamente aunque ahora quisiera tenerla disponible en un módulo. ¿Qué es lo que debo cambiar?

Private Sub CommandButton5_Click()
'Por.Dante Amor
  Dim h1 As Worksheet, h2 As Worksheet, crit As Variant
  Dim j As Long, lr As Long, lc As Long, u As Long
  '
  Set h1 = Sheets("Hoja1")
  Set h2 = Sheets("Temporal")
  '
  h2.Cells.Clear
  If txtFiltro1 = "" Or cmbEncabezado = "" Then Exit Sub
  Application.ScreenUpdating = False
  '
  If h1.AutoFilterMode Then h1.AutoFilterMode = False
  j = cmbEncabezado.ListIndex + 1
  lr = h1.Cells(Rows.Count, j).End(3).Row
  lc = h1.Cells(1, Columns.Count).End(1).Column
  '
  If IsNumeric(txtFiltro1) Then crit = txtFiltro1 Else crit = "=*" & txtFiltro1 & "*"
  h1.Range("A1", h1.Cells(lr, lc)).AutoFilter j, crit
  u = h1.Cells(Rows.Count, j).End(3).Row
  If u = 1 Then
    MsgBox "No existen registros con ese filtro", vbExclamation, "FILTRO"
  Else
    h1.AutoFilter.Range.EntireRow.Copy h2.Range("A1")
    ListBox1.RowSource = h2.Name & "!A2:Z" & u
  End If
  h1.ShowAllData
  Application.ScreenUpdating = True
End Sub

1 respuesta

Respuesta
1

¿Y para qué la quieres en un módulo?

Está diseñada para funcionar en un formulario con sus controles:

If txtFiltro1 = "" Or cmbEncabezado = "" Then Exit Sub
j = cmbEncabezado.ListIndex + 1
If IsNumeric(txtFiltro1) Then crit = txtFiltro1 Else crit = "=*" & txtFiltro1 & "*"
ListBox1.RowSource = h2.Name & "!A2:Z" & u


¿Vas a ejecutar solamente la macro sin abrir el formulario? Esto no es posible. Debes abrir el formulario, de lo contrario tendrás error en todos los controles.

Si quieres abrir el formulario y después ejecutar la macro en el módulo, entonces agrega el nombre del formulario a cada control, ejemplo:

If userform1.txtFiltro1 = "" Or userform1.cmbEncabezado = "" Then Exit Sub

Pero no le veo sentido que lo tengas en un módulo si ya te funciona el formulario, es escribir más código y probar nuevamente todo.

Dante, muy buenas. La idea es que tengo la secuencia para poder abrir un menu con el botón derecho en el modulo.

'... Inicio boton derecho...
Private Sub runEliminar()
    'MsgBox "Ejecutando 'Eliminar'"
    Pregunta = MsgBox("Está seguro de eliminar el registro?", vbYesNo + vbQuestion, "")
If Pregunta <> vbNo Then
    ActiveCell.EntireRow.Delete
End If
End Sub
Private Sub ClickDerecho()
    Application.CommandBars("Cell").Reset
    Dim cbc As CommandBarControl
    For Each cbc In Application.CommandBars("cell").Controls
        cbc.Visible = False
    Next cbc
    With Application.CommandBars("Cell").Controls.Add(temporary:=True)
        .Caption = "Modificar"
        .OnAction = "runModificar"
        .FaceId = 6512 '<--FACE ID'
    End With
    With Application.CommandBars("Cell").Controls.Add(temporary:=True)
        .Caption = "Eliminar"
        .OnAction = "runEliminar"
        .FaceId = 3265 '<--FACE ID'
    End With
    Application.CommandBars("Cell").ShowPopup
End Sub
'..................fin boton derecho........

El formulario ya estaría abierto y al seleccionar la línea a eliminar con la opciones del menu del click derecho es limpiar visualmente el formulario de botones, saludos.

Ya probaste con el ejemplo que te puse:

Agrega el nombre del formulario a cada control, ejemplo:

If userform1.txtFiltro1 = "" Or userform1.cmbEncabezado = "" Then Exit Sub

Lo estoy intentando, lo anterior era para ponerte en contexto.

Pues definitivamente sigo sin entender qué necesitas, pero si desde un módulo vas a utilizar controles de un formulario, solamente tienes que hacer referencia al userform:

Userform1. Control

¡Gracias por brindar tus conocimientos!

Saludos 

Me alegra ayudarte, g racias comentar!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas