VBA初心者ですのでどうか詳しく教えてください。下記のマクロをエクセルで組んだのですが・・・
--------------------------------------------------------------------
Sub hideworksheets()
Worksheets("sheet1").Visible = False
End Sub
Sub ボタン_Click()
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Sheets("sheet1").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Sheets("sheet2").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Sheets("sheet3").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Sheets("sheet4").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1
End Sub
------------------------------------------------------------
1.上記設定で"sheet5"という別シートにボタンを設置した場合、このボタンを実行すると、シート1~4のほかにシート5まで印刷されてしまいます。シート5を印刷したくない場合のVBAの記述について教えてください。
2.「Sub hideworksheets()
Worksheets("sheet1").Visible = False
End Sub」
の箇所で、シート1を非表示にしたいのですが、このマクロを実行時、「Sub ボタン_Click()」以下のマクロを実行しようとすると、「実行時エラー1004 worksheeクラスのselectメソッドが失敗しました」のエラーがでてしまいます。シート1を非表示にし、無事印刷のマクロを実行する為の記述を教えてください。
No.5ベストアンサー
- 回答日時:
Sheet1は印刷する必要があると思って回答していました。
補足を見ると、Sheet1の表示、非表示にかかわらずSheet1は印刷の必要はないようなので簡単にしました。
補足がSheet2だけのことなのか分かりませんので Select Case の中で印刷範囲の設定、印刷、印刷範囲の解除をしています。
Sub 印刷test()
Dim ws As Worksheet 'ワークシート
For Each ws In Worksheets '全てのシートを調べる
With ws
Select Case .Name
Case "Sheet2"
.PageSetup.PrintArea = "A1:AB42"
.PrintPreview
.PageSetup.PrintArea = ""
Case "Sheet3"
.PrintPreview
Case "Sheet4"
.PrintPreview
End Select
End With
Next
End Sub
蛇足ですが・・・・・・
Sheet2、Sheet3、Sheet4のみを印刷したいなら直接的に書いたほうが分かりやすいかもしれません。(下記)
また、PrintAreaの指定が固定であれば、シート上(印刷範囲の設定)で設定しておけばマクロの中で設定する必要はありません。
印刷範囲が変動する場合はマクロの中で自動的に設定したりします。マクロの実行のたびに印刷範囲を変更するとマクロの意味がなくなってしまいます。
1つのシートの印刷範囲を1種類にしておけば、そのシートの余白などの細かい印刷設定をシート上(プレビュー)で行えば、マクロ側ではほとんど設定する必要はありません。(今回はExcel2000です。同じでしょう)
Sub 印刷test2()
With Worksheets("Sheet2")
.PageSetup.PrintArea = "A1:AB42"
.PrintPreview
.PageSetup.PrintArea = ""
End With
With Worksheets("Sheet3")
.PrintPreview
End With
With Worksheets("Sheet4")
.PrintPreview
End With
End Sub
最後に、マクロを記録した結果から不必要な箇所を除いたり、繰り返し処理、判定処理を組み込むようにすれば間違いが減り、分かりやすく短くなり、上達すると思います。
いろいろ教えていただきまして、ありがとうございました。
VBAを始めて、1週間がたちましたが、詳しく教えていただいたので
VBAの作成の方法がだいぶわかりました。本を読んでやっていたときは
さっぱりわかりませんでしたが、親切に教えていただいたおかげで助かりました
また、何か質問をする事がありかもわかりませんが、そのときはよろしくお願いします。
No.4
- 回答日時:
少し書き換えてみました。
コメントを見てもらえば行っていることは分かると思います。Excel97で動作確認しました。ご参考に。
Sub 印刷test()
Dim ws As Worksheet 'ワークシート
Dim PrintFlg As Boolean '印刷するかの判定
On Error GoTo ErrorHandler 'エラー対応(非表示シート対応)
For Each ws In Worksheets '全てのシートを調べる
Select Case ws.Name
'印刷したいシートは PrintFlg を True にする
Case "Sheet1": PrintFlg = True
Case "Sheet2": PrintFlg = True
Case "Sheet3": PrintFlg = True
Case "Sheet4": PrintFlg = True
'上以外のシート名なら PrintFlg は False
Case Else: PrintFlg = False
End Select
If PrintFlg = True Then ws.PrintPreview '今はプレビュー。PrintOutで印刷
Next
Exit Sub '終わり
ErrorHandler:
'シートが非表示の場合
If Err = 1004 Then
ws.Visible = True '表示する
ws.PrintPreview '今はプレビュー。PrintOutで印刷
ws.Visible = False '非表示に戻す
End If
Resume Next '次の処理
End Sub
この回答への補足
もうひとつ、教えてください。よろしくお願いします。
---------------------------------------------------------------------
Sub 印刷test()
Dim ws As Worksheet 'ワークシート
Dim PrintFlg As Boolean '印刷するかの判定
On Error GoTo ErrorHandler 'エラー対応(非表示シート対応)
For Each ws In Worksheets '全てのシートを調べる
Select Case ws.Name
'印刷したいシートは PrintFlg を True にする
Case "Sheet2": PrintFlg = True
Case "Sheet3": PrintFlg = True
Case "Sheet4": PrintFlg = True
'上以外のシート名なら PrintFlg は False
Case Else: PrintFlg = False
End Select
If PrintFlg = True Then ws.PrintPreview '今はプレビュー。PrintOutで印刷
Next
Exit Sub '終わり
ErrorHandler:
'シートが非表示の場合
If Err = 1004 Then
ws.Visible = True '表示する
ws.PrintPreview '今はプレビュー。PrintOutで印刷
ws.Visible = False '非表示に戻す
End If
Resume Next '次の処理
End Sub
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
上記のマクロに下記のマクロを書き込みたいのですが教えてください
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Sub printappointedrange()
Worksheets("Sheet2").Activate
Range("A1:AB42").Select 'セル範囲の選択
With ActiveSheet
.PageSetup.PrintArea = Selection.Address '印刷範囲の指定
.PrintOut '印刷
.PageSetup.PrintArea = False '印刷範囲のクリア
End With
End sub
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
No.3
- 回答日時:
#2以外の方法です
On Error Resume Next
Sheets("sheet1").PrintOut Copies:=1
Sheets("sheet2").PrintOut Copies:=1
Sheets("sheet3").PrintOut Copies:=1
Sheets("sheet4").PrintOut Copies:=1
という方法です。
On Error Resume Nextでエラーとなっても強制的に次のステートメントを実行します。
あまり勧めれませんが・・・
No.2
- 回答日時:
2.への回答です
If Worksheets("sheet1").Visible = True Then
Sheets("sheet1").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1
End If
If Worksheets("sheet2").Visible = True Then
Sheets("sheet2").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1
End If
:
こんな感じでしょうか?
No.1
- 回答日時:
1)
ActiveWindow.SelectedSheets.PrintOut Copies:=1 ←これを消せば良いです。
Sheets("sheet1").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Sheets("sheet2").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Sheets("sheet3").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Sheets("sheet4").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Sheets().selectで、それぞれのシートをアクティブにして、
Active…でアクティブなシートを印刷してますので、最初のシート5の状態で印刷している部分が不要でしょう。
2)
非表示なのでシートを選択できないのが原因ではないでしょうか。
ちょっと回避策はすぐには浮かばないです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの印刷マクロについて質問があります。 現在、下記のマクロで印刷しています。Sheet1のD6 5 2023/06/12 10:59
- その他(Microsoft Office) Excelのマクロについて教えてください。 1 2022/03/25 10:03
- Excel(エクセル) エクセル VBAでシートのコピーを作りたい 1 2023/05/18 07:42
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/06/19 10:08
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/03/02 08:40
- Visual Basic(VBA) DisplayAlertsブロパティで ”実行時エラー424オブジェクトが必要です” 5 2022/05/15 18:02
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルファイルを開く時、常...
-
エクセルの一部のセルの背景色...
-
マクロで印刷→セルの値から部数...
-
エクセルのマクロで複数シート...
-
【Excel】複数シートがあるエク...
-
エクセル 出納帳印刷時の繰越...
-
エクセル 改ざん防止のため ...
-
エクセルで行番号、列アルファ...
-
1ヶ月分の日付を一度に出す方法...
-
エクセルで横置きのシートにペ...
-
EXCELで複数のシートを同時に印...
-
エクセル印刷時 一枚の書類に...
-
条件によって印刷するシートを...
-
Excel 特定のシートを印刷不可...
-
エクセルで横長の表を一枚に印...
-
特定のセルに数値が入っている...
-
エクセルでシートの色がグレー...
-
エクセルで同一シート上にA3とA...
-
Excelファイルを複数選択して、...
-
Excel等、同一の大きさでページ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルファイルを開く時、常...
-
エクセルの一部のセルの背景色...
-
エクセル印刷時 一枚の書類に...
-
1ヶ月分の日付を一度に出す方法...
-
マクロで印刷→セルの値から部数...
-
エクセルの行タイトルを特定の...
-
エクセルのマクロで複数シート...
-
Excel 特定のシートを印刷不可...
-
エクセルで複数のシートの1枚目...
-
エクセルでのヘッダーをページ...
-
エクセルでシートの色がグレー...
-
エクセルで行番号、列アルファ...
-
条件によって印刷するシートを...
-
EXCELで複数のシートを同時に印...
-
エクセルのシート名を印刷した...
-
エクセルで複数のシートを同じ...
-
エクセルで、ヘッダーに他のシ...
-
EXCELで宛名だけ連続変更...
-
Excelであるシートだけ印刷でき...
-
エクセルの複数シートをNアップ...
おすすめ情報