2016-11-21 2 views
0

Ich erstelle ein Programm, um einige Filter aus einem UserForm (aber es gibt viele UserForms) mit Kontrollkästchen. Das Programm funktioniert wie folgt:Rufen Sie verschiedene UserForms in einem Programm

  • einige Ankreuzfelder aus einer Userform wählen
  • ein Command Klicken namens Next
  • Die Filter Lasten mit dem folgenden Code:

Excel-VBA-Code

Sub Filtrarvar(ByVal j As Integer, ByVal k As Integer, _ 
       ByVal col As Integer, ByVal Userf As String) 

    Dim Countercheck As Integer  
    Countercheck = 0  
    i = j  
    n = j 

    Dim Lista() As String  
    longitud = k - j  
    ReDim Lista(longitud) 

    Do While i <= k  
     If UserForm2.Controls("CheckBox" & i).Value = True Then  
      ContaTic = ContaTic + 1  
     End If  
     i = i + 1  
    Loop 

    If ContaTic = 0 Or ContaTic = longitud + 1 Then  
     Sheets("Aux_total").Range(Cells(1, 1), _ 
       Cells(UltLinea, UltColumna)).AutoFilter Field:=col, Criteria1:="<>"  
    ElseIf ContaTic >= 1 Then  
     arr = 0  
     Do While n <= k  
      If UserForm2.Controls("CheckBox" & n).Value = True Then  
       Value = UserForm2.Controls("CheckBox" & n).Caption 

       Lista(arr) = Value  
       arr = arr + 1  
      End If  
     n = n + 1  
     Loop 

     Sheets("Aux_total").Range(Cells(1, 1), _ 
       Cells(UltLinea, UltColumna)).AutoFilter Field:=col, Criteria1:=Lista, _ 
       Operator:=xlFilterValues  
    End If  
End Sub 

Und ich möchte das Programm wie aufrufen dies:

Filtrarvar 1, 6, 4, "Europe" 

Was ich möchte, ist wissen, wie UserForm2-Europa, den Code zu ändern und so weiter? Ich möchte das für jedes UserForm/Continent tun.

+1

1.) Erstellen Sie 1 Formular. 2.) Geben Sie ihr eine Eigenschaft für alles, was "Europa" in Ihrem Beispiel anzeigen würde (erwägen Sie eine "Enum"). 3.) Konfigurieren Sie das Formular zur Laufzeit auf der Grundlage des übergebenen Eigenschaftswerts, bevor Sie es "anzeigen". 4.) Erzeuge [harte Instanzen anstelle der Standardinstanz] (http://stackoverflow.com/documentation/vba/5351/user-forms/19036/best-practices#t=201611212133242937607). – Comintern

Antwort

0

Verwenden Sie VBA.Forms, die sich ähnlich wie eine Sammlung verhält. Sie müssen jedoch den Namen eines vorhandenen Benutzerformulars laden und dann auf den Index verweisen.

Sub Filtrarvar(ByVal j As Integer, ByVal k As Integer, _ 
       ByVal col As Integer, ByVal Userf As String) 

    ' LOAD CURRENT Userf value (i.e., Eurpoe) 
    VBA.UserForms.Add Userf 
    ... 

    ' REFERENCE USERFORM BY INDEX 
    Do While i <= k  
     If VBA.UserForms(0).Controls("CheckBox" & i).Value = True Then 
      ContaTic = ContaTic + 1  
     End If  
     i = i + 1  
    Loop 
    ... 

End Sub 
Verwandte Themen