Combinar dos secuencias Userform Initialize

Me gustaría me indiquen como combinar dos instrucciones pues estoy intentando agregar los botones para maximizar y minimizar un formulario con lo siguiente:

Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Const WS_MINIMIZEBOX As Long = &H20000
Private Const WS_MAXIMIZEBOX As Long = &H10000
Private Const GWL_STYLE As Long = (-16)
Private Sub UserForm_Initialize()
    Dim lngMyHandle As Long, lngCurrentStyle As Long, lngNewStyle As Long
    If Application.Version < 9 Then
        lngMyHandle = FindWindow("THUNDERXFRAME", Me.Caption)
    Else
        lngMyHandle = FindWindow("THUNDERDFRAME", Me.Caption)
    End If
    lngCurrentStyle = GetWindowLong(lngMyHandle, GWL_STYLE)
    lngNewStyle = lngCurrentStyle Or WS_MINIMIZEBOX 'Or WS_MAXIMIZEBOX
    SetWindowLong lngMyHandle, GWL_STYLE, lngNewStyle
End 'Sub

y otro que le da formato a un listbox

Private Sub UserForm_Initialize()
For i = 1 To 4
    Me.Controls("Label" & i) = Cells(1, i).Value
Next i
With ListBox1
    .ColumnCount = 6
    .ColumnWidths = "80 pt;80 pt;170 pt;1 pt;1 pt;1 pt"
End With
End Sub

2 Respuestas

Respuesta
1

Fíjate este ejemplo, para agregar botones para el resto de código ponlo en el evento inicializar también

Respuesta
1

Try this

Option Explicit
'
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Const WS_MINIMIZEBOX As Long = &H20000
Private Const WS_MAXIMIZEBOX As Long = &H10000
Private Const GWL_STYLE As Long = (-16)
'
Private Sub UserForm_Initialize()
  Dim lngMyHandle As Long, lngCurrentStyle As Long, lngNewStyle As Long
  If Application.Version < 9 Then
      lngMyHandle = FindWindow("THUNDERXFRAME", Me.Caption)
  Else
      lngMyHandle = FindWindow("THUNDERDFRAME", Me.Caption)
  End If
  lngCurrentStyle = GetWindowLong(lngMyHandle, GWL_STYLE)
  lngNewStyle = lngCurrentStyle Or WS_MINIMIZEBOX 'Or WS_MAXIMIZEBOX
  SetWindowLong lngMyHandle, GWL_STYLE, lngNewStyle
  '
  Dim i As Long
  For i = 1 To 4
    Me.Controls("Label" & i) = Cells(1, i).Value
  Next i
  With ListBox1
    .ColumnCount = 6
    .ColumnWidths = "80 pt;80 pt;170 pt;1 pt;1 pt;1 pt"
  End With
End Sub

Dante! Muy bien, que rapidez.

Luego de seguir tu propuesta me surgió un error en:

Private Sub txtFiltro1_Change()
On Error GoTo Errores
If Me.txtFiltro1.Value = "" Then Exit Sub
Me.ListBox1.Clear
j = 1
Filas = Range("a1").CurrentRegion.Rows.Count
For i = 2 To Filas
    If LCase(Cells(i, j).Offset(0, 6).Value) Like "*" & LCase(Me.txtFiltro1.Value) & "*" Then
        Me.ListBox1.AddItem Cells(i, j)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, j).Offset(0, 1)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Cells(i, j).Offset(0, 2)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Cells(i, j).Offset(0, 3)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = Cells(i, j).Offset(0, 4)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = Cells(i, j).Offset(0, 5)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = Cells(i, j).Offset(0, 6)
    Else
    End If
Next i
Exit Sub
Errores:
'MsgBox "No se encuentra.", vbExclamation, ""
End Sub

j=1

Error de compilación, no se ha definido la variable.

¿Podrás ayudarme nuevamente?

Al inicio de todo el código tienes esto:

Option Explicit

Eso significa que tienes que declarar todas las variables.

Te ayudo con esta parte, pero si no vas a declarar todas las variables, entonces quita la línea, pero te recomiendo declarar todas las variables.

Private Sub txtFiltro1_Change()
  On Error GoTo Errores
  Dim j As Long, i As Long, Filas As Long
  '
  If Me.txtFiltro1.Value = "" Then Exit Sub
  Me.ListBox1.Clear
  j = 1
  Filas = Range("a1").CurrentRegion.Rows.Count
  For i = 2 To Filas
    If LCase(Cells(i, j).Offset(0, 6).Value) Like "*" & LCase(Me.txtFiltro1.Value) & "*" Then
        Me.ListBox1.AddItem Cells(i, j)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, j).Offset(0, 1)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Cells(i, j).Offset(0, 2)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Cells(i, j).Offset(0, 3)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = Cells(i, j).Offset(0, 4)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = Cells(i, j).Offset(0, 5)
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = Cells(i, j).Offset(0, 6)
    Else
    End If
  Next i
  Exit Sub
Errores:
  'MsgBox "No se encuentra.", vbExclamation, ""
End Sub

¡Gracias Dante, voy a leer entonces!
Hasta pronto

Me agrada ayudarte ! Gracias! Por responder.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas