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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルファイルを開く時、常...
-
1ヶ月分の日付を一度に出す方法...
-
祭の祝儀 掲示・集計ソフト
-
エクセルの一部のセルの背景色...
-
エクセルでシートの色がグレー...
-
エクセルで行番号、列アルファ...
-
エクセルのマクロで複数シート...
-
エクセルで複数のシートの1枚目...
-
マクロで印刷→セルの値から部数...
-
条件によって印刷するシートを...
-
Wordで差込印刷。テーブル...
-
エクセルで横置きのシートにペ...
-
エクセルでのグラフを複数選択...
-
カラーで一括印刷したいです
-
エクセル印刷時 一枚の書類に...
-
エクセルで同一シート上にA3とA...
-
エクセルのシート名を印刷した...
-
エクセルで。
-
エクセルで複数のシートを同じ...
-
エクセルマクロで差し込みした...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルファイルを開く時、常...
-
エクセル印刷時 一枚の書類に...
-
エクセルの一部のセルの背景色...
-
マクロで印刷→セルの値から部数...
-
Excel 特定のシートを印刷不可...
-
エクセルで複数のシートの1枚目...
-
エクセルのマクロで複数シート...
-
エクセルでのヘッダーをページ...
-
エクセルで行番号、列アルファ...
-
エクセルの行タイトルを特定の...
-
1ヶ月分の日付を一度に出す方法...
-
祭の祝儀 掲示・集計ソフト
-
特定のセルに数値が入っている...
-
条件によって印刷するシートを...
-
エクセルのシート名を印刷した...
-
エクセルでシートの色がグレー...
-
エクセルで、ヘッダーに他のシ...
-
特定のシートのみ印刷できない...
-
EXCEL マクロ 条件の合ったシー...
-
エクセルの複数シートをNアップ...
おすすめ情報