
チェックボックスで選択た複数のシートを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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【マクロ】ファイル名の日付によって、保管するフォルダを、自動選択したい 4 2023/08/16 11:24
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
風俗店を予約する際について 一...
-
総合病院にかかる場合は紹介状...
-
運転免許証を初めて更新します
-
同棲している彼とのペースがあ...
-
ホットペッパービューティーで...
-
美容院の予約内容(メニュー)は...
-
予約票忘れた
-
サンリオピューロランドの株主...
-
焼肉キングを予約しようとして...
-
美容院でカット、カラーの予約...
-
こんにちは。 分かる方に教えて...
-
ラウンドワン[ROUND1] PC団体予...
-
牛角の宴会食べ放題コースの人...
-
シティヘブンという風俗サイト...
-
この会社はWeb申し込みでチ...
-
オープンチケットなのに航空会...
-
新幹線自由席の乗車券と特急券...
-
ひかりからさくらへ 新大阪での...
-
イタリア ユーロスターの予約...
-
子供の為に 淡路屋 新幹線弁当
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
総合病院にかかる場合は紹介状...
-
風俗店を予約する際について 一...
-
ホットペッパービューティーで...
-
運転免許証を初めて更新します
-
サンリオピューロランドの株主...
-
Switch2が本気で欲しいのですが...
-
美容院の予約内容(メニュー)は...
-
人数様?
-
美容院でカット、カラーの予約...
-
同棲している彼とのペースがあ...
-
ドコモショップの来店予約 家族...
-
ラウンドワン[ROUND1] PC団体予...
-
ホットペッパーの美容院の予約...
-
教えてください。 MNP予約番...
-
Accessで予定表を作成しようと...
-
企業説明会へ2回参加したいと思...
-
2回目デート直前にLINE減る。
-
『予約優先』『予約制』『完全...
-
歯医者って治療は全て終わった...
-
初診で皮膚科に行く時に受付で...
おすすめ情報