2016-11-21 4 views
0

私は、ユーザーフォームからいくつかのフィルターを作成するためのプログラムを作成しています(しかし、多くのユーザーフォームがあります)。プログラムは次のように機能します。プログラム内の別のユーザーフォームを呼び出す

  • コマンドボタンをクリックしてユーザーフォーム
  • からいくつかのチェックボックスを選択して次
  • と呼ばれる次のコードでフィルター負荷:

エクセルVBAコード

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 

そして、このプログラムをこの:私が知りたいのですがどのような

Filtrarvar 1, 6, 4, "Europe" 

は等々、ヨーロッパUserForm2からコードを変更する方法ですと?私はUserForm/Continentごとにそれをしたいと思います。

+1

1.)ビルド1フォーム。 2)あなたの例で "ヨーロッパ"が示すようなものを与えます( 'Enum'の使用を検討してください)。 3.) '.Show'する前に、渡されたプロパティ値に基づいて実行時にフォームを設定します。 4.)[デフォルトインスタンスを使用する代わりにハードインスタンスを生成する](http://stackoverflow.com/documentation/vba/5351/user-forms/19036/best-practices#t=201611212133242937607)。 – Comintern

答えて

0

コレクションと同様に動作するVBA.Formsを使用することを検討してください。ただし、既存のuserformの名前をロードしてからindexで参照する必要があります。

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 
関連する問題