2012-02-24 8 views
2

ユーザーフォームのチェックボックスのステータスに応じて複数のワークシートを選択したい場合、選択時にエラーが表示されます。私は私のuserformに合計16個のチェックボックスを持っているので、選択するシートを決定するメソッドが必要です。Excel - ユーザーフォームのチェックボックスを使用して呼び出すシートを決定する

ショート例:

`Sub chkboxes()' 

DIM SheetNames as string 

If CB1.value = true then 
    SheetNames = "SummaryReport" 
End IF 

If CB2.value = true and sheetNames <> "" then 
    SheetNames = Sheetnames & "," & "WeekdaysReport" 
elseif CB2.value = true and sheetnames = "" then 
    SheetNames = "WeekdaysReport" 
End If 

If CB3.value = true and sheetnames <> "" then 
    SheetNames = SheetNames & "," & "WeekendsReport" 
elseif CB3.value = true and SheetNames <> "" then 
    SheetNames = "WeekendsReport" 
End If 

If SheetNames = "" 
    Exit Sub 
End If 

Sheets(Array(SheetNames)).select **'This is where the script stops and prompt error.** 
Call ExportToPDF 

SheetNames = "" 

End Sub 

上記はかなり素人ですが、私はまだVBAプログラミングと非常に不慣れです。うまくいけば私はいくつかの指導を得ることができた。ありがとう。

私は解決策をオンラインで検索しようとしましたが、同様の投稿は見つかりませんでした。

答えて

0

あなたのコードと他のいくつかの「ショートカット」では、不要な「配列」関数の呼び出しがあります。

次の行交換してください:このスニペットと

Sheets(Array(SheetNames)).select 
Call ExportToPDF 

Dim aSheetNames() As String 
Dim i as long 

aSheetNames = Split(SheetNames,",") 

For i = LBound(aSheetNames) To UBound(aSheetNames) 
    Sheets(aSheetNames(i)).select 
    ExportToPDF 
Next 

をそして、私は私の仮定が正しかった場合、今の手順が動作する必要があり、願っています。

If CB2.Value Then 
    If SheetNames <> "" Then SheetNames = Sheetnames & "," 
    SheetNames = Sheetnames & "WeekdaysReport" 
End If 
+0

Radekに感謝しますが、うまくいかなかった。 =( – AlexN

+0

私は自分の答えのボディを編集しました – Radek

+0

もう一度お返事ありがとうございます。しかし、一度に複数のワークシートを選択することができますので、すべて1つのpdfにエクスポートできますか? – AlexN

1

これは簡単な方法です。チェックボックスではなく、複数選択可能なリストボックスを使用します。あなたのユーザフォームの背後にあるコードでは、次のようなことをしてください:

Private Sub UserForm_Initialize() 
    With ListBox1 
    .AddItem "SummaryReport" 
    .AddItem "WeekdaysReport" 
    .AddItem "WeekendReport" 
    End With 
End Sub 

Private Sub CommandButton1_Click() 
    With ListBox1 
    Dim i As Integer 
    Do Until i = .ListCount 
     If .Selected(i) Then 
     Sheets(.ListIndex + 1).Select 
     'MsgBox Sheets(i + 1).Name 
     'do something with selected sheet 
     End If 
     i = i + 1 
    Loop 
    End With 

End Sub 
+0

おかげで、実際に私のスクリプトは、16のチェックボックスが含まれています

UPS、私は私が正しくあなたの内包を推測している場合は、各チェックボックスのためのresposibleコードは次のようになります必要があります別の問題... を発見しました、それぞれ特定のシートの範囲を参照します。私の目的は、どの範囲がどのシートにあるかを判断し、それを処理し、すべてのシート名を文字列に保存することです。しかし、私は文字列を使用してワークシートを選択しようとすると、私はエラーに直面した。 – AlexN

関連する問題