
チェックボックスで選択た複数のシートを1つのpdfにできるようにしたいのですが、ご指導いただければ幸いです。
シートは「1月講座室予約表」から「12月講座室予約表」まであります。
CheckBox1は1月講座室予約表、CheckBox2は2月講座室予約表・・・に対応させたいです。
次のコードを書いてみたのですが、「Sheets(Array(MySht(i))).Select」のところが「インデックスが有効範囲にありません」と表示されてしまいます。
Private Sub CommandButton1_Click()
Dim MySht(11) As Variant
For i = 1 To 12
If Me.Controls("CheckBox" & i).Value = True Then
MySht(i) = i&"月講座室予約表"
End If
Next i
Sheets(Array(MySht(i))).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
FileName:=ActiveWorkbook.Path & "¥" & "予約表" & Format(Date, "yyyymmdd") & ".pdf"
End Sub
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
既に複数の回答がついていますが、ご質問者のオリジナルのコードから最低限の修正でご希望の挙動になるようにするなら、以下ではいかがでしょうか
Private Sub CommandButton1_Click()
Dim MySht() As Variant
Dim i As Long
Dim j As Long
j = -1
For i = 1 To 12
If Me.Controls("CheckBox" & i).Value = True Then
j = j + 1
ReDim Preserve MySht(j)
MySht(j) = i & "月講座室予約表"
End If
Next i
Sheets(MySht).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=ActiveWorkbook.Path & "\" & "予約表" & Format(Date, "yyyymmdd") & ".pdf"
End Sub
残念ながらオリジナルのコードにはbonaronさんの回答にあるようなエラー回避の判定がありません。
このため、どのチェックボックスにもチェックを入れなかった場合、上記のVBAではエラーになります。
「チェックボックスに一つもチェックが入らなかったら」を判別してエラーを回避するロジックを追加してください。
No.4
- 回答日時:
シート名を配列に入れる、ということで
シート名に使用できない文字をデリミッターにする、
という小技を使ってみました。
Private Sub CommandButton1_Click()
Dim MySht As Variant
Dim strName As String
Dim i As Long
For i = 1 To 12
If Me.Controls("CheckBox" & i).Value = True Then
strName = strName & "/" & i & "月講座室予約表"
End If
Next i
If strName = "" Then
MsgBox "選択されていません"
Exit Sub
End If
MySht = Split(Mid(strName, 2), "/")
Sheets(MySht).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=ActiveWorkbook.Path & "\" & "予約表" & Format(Date, "yyyymmdd") & ".pdf"
End Sub
No.3
- 回答日時:
>複数のシートを1つのpdfに
#2は頓珍漢な回答でしたね
ActiveSheetとなっていたので コード見て勘違いしました。。。
#1 +
ActiveWorkbookとすれば良いかと思います
Dim i As Integer
For i = 1 To 12
If Me.Controls("CheckBox" & i).Value = True Then
Sheets(i & "月講座室予約表").Select False
End If
Next i
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _
FileName:=ActiveWorkbook.Path & "\" & "予約表" & Format(Date, "yyyymmdd") & ".pdf"
No.2
- 回答日時:
ご質問の部分(エラー)は#1に書いた通りですが、全体を見ると
シート選択を実行したいのかなと思いきやActiveSheet・・・
(複数選択してもActiveSheetは1つです)
仮に複数のPDF出力が実行されても
"¥" & "予約表" & Format(Date, "yyyymmdd") & ".pdf"
同じ名前のファイルで結果最後のシートのみのPDFが残る(1ファイルのみ)
CheckBoxで選択したシートをPDFにエキスポートするなら、それこそ選択する必要は無いと思います(名前はシート名+日付)
①
Dim i As Integer
For i = 1 To 12
If Me.Controls("CheckBox" & i).Value = True Then
Sheets(i & "月講座室予約表").ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=ActiveWorkbook.Path & "\" & i & "月講座室予約表" & Format(Date, "yyyymmdd") & ".pdf"
End If
Next i
なんとなく配列が出てきた意図が分かりました
配列を使う場合は、(インデックスが分かり難いかも知れませんが)
②
Dim MySht() As String
Dim i As Integer
For i = 1 To 12
If Me.Controls("CheckBox" & i).Value = True Then
ReDim Preserve MySht(i - 1)
MySht(i - 1) = i & "月講座室予約表"
End If
Next i
For i = 0 To UBound(MySht)
Sheets(MySht(i)).ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=ActiveWorkbook.Path & "\" & MySht(i) & Format(Date, "yyyymmdd") & ".pdf"
Next
①②共に同じ結果が得られると思います
No.1
- 回答日時:
こんばんは
配列に拘りますか?2度手間になるだけなので・・
普通に書いた方が良いと思います
For i = 1 To 12
If Me.Controls("CheckBox" & i).Value = True Then
Sheets(i & "月講座室予約表").Select False
End If
Next i
配列にしてもそのまま選択にしても エラー対策が必要と思われる処理ですね
配列を使いたい・・
1つアドバイスを書くのなら、配列に配列は入れられません なので
文字列を作る必要がありますが、あれこれ面倒だと推測します
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ホットペッパービューティーで...
-
風俗店を予約する際について 一...
-
2回目デート直前にLINE減る。
-
美容院でカット、カラーの予約...
-
美容院の予約内容(メニュー)は...
-
運転免許証を初めて更新します
-
同棲している彼とのペースがあ...
-
婦人科受診
-
人数様?
-
取消・予約の繰り返して2月ま...
-
サンリオピューロランドの株主...
-
本屋での本の予約なんですが、 ...
-
マッチングアプリの出会いについて
-
指名したのに
-
シートを選択して、1つのPDFに...
-
ホットペッパーの美容院の予約...
-
初診で皮膚科に行く時に受付で...
-
ラウンドワン[ROUND1] PC団体予...
-
日本一予約が取りにくい国民宿...
-
シティヘブンという風俗サイト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
風俗店を予約する際について 一...
-
ホットペッパービューティーで...
-
美容院の予約内容(メニュー)は...
-
総合病院にかかる場合は紹介状...
-
運転免許証を初めて更新します
-
サンリオピューロランドの株主...
-
人数様?
-
2回目デート直前にLINE減る。
-
美容院でカット、カラーの予約...
-
ドコモショップの来店予約 家族...
-
同棲している彼とのペースがあ...
-
予約票忘れた
-
ホットペッパーの美容院の予約...
-
昨日仕事が休みだったので車の...
-
本屋での本の予約なんですが、 ...
-
取消・予約の繰り返して2月ま...
-
企業説明会へ2回参加したいと思...
-
Accessで予定表を作成しようと...
-
エステの予約をすっぽかしてし...
-
初診で皮膚科に行く時に受付で...
おすすめ情報