Excel VBA 質問スレッド No.750 (解決済)

シート名検索&色判断での印刷

投稿者 : はなこ     投稿日時 : 2022/05/24(Tue) 15:16:28     OS : 未指定     EXCEL : 未指定
以前にこちらでお教えいただきましたが、未熟者で分からずまた質問させてください。
下記の質問をし、教えていただいたマクロを記します。

■注文書の作成ファイル
sheet→表紙・条件・詳細(1)・詳細(2)・詳細(3)・・・

と複数のシートがあり不要なシートにはグレーの色を付けています。
このシートの色のついていないシートだけを印刷したく、
それぞれのシートで印刷の設定も異なります。

Sub testTabColor()

Dim mySheet As Worksheet
Dim searchWord As String

searchWord = "詳細" '検索したい文字列を入れます。

For Each mySheet In Worksheets 'ワークシートの数だけ繰り返し

If mySheet.Tab.ColorIndex = xlColorIndexNone Then 'シート名タブに色がなければ、、
If InStr(mySheet.Name, searchWord) > 0 Then '検索文字があれば、、、
mySheet.PrintOut 'シートを印刷
'Debug.Print mySheet.Name 'イミディエイトウィンドウにシート名を出力

End If
End If
Next

End Sub


これを実行すると「表紙」「条件」が印刷されません。
また、明細シートの印刷設定(範囲を指定して印刷)を入れると、シートの指定がうまくいかないのか、表示しているシートが印刷されてしまいます。
ご教授いただけないでしょうか。

[返信 1] Re : シート名検索&色判断での印刷
投稿者 : てらてら     投稿日時 : 2022/05/24(Tue) 20:44:59
どっかで見たことある。(笑)

If InStr(mySheet.Name, searchWord) > 0 Then '検索文字があれば、、、

ここで、「詳細」という文字がないものは弾いています。
それを抜けはOK。

Sub testTabColor()

Dim mySheet As Worksheet
Dim searchWord As String

'searchWord = "詳細" '検索したい文字列を入れます。

For Each mySheet In Worksheets 'ワークシートの数だけ繰り返し

If mySheet.Tab.ColorIndex = xlColorIndexNone Then 'シート名タブに色がなければ、、

mySheet.PrintOut 'シートを印刷
'Debug.Print mySheet.Name 'イミディエイトウィンドウにシート名を出力


End If
Next

End Sub

[返信 2] Re : シート名検索&色判断での印刷
投稿者 : はなこ     投稿日時 : 2022/05/25(Wed) 11:02:02
てらてらさん、またしてもお世話になりまして申し訳ありません涙
上記プログラムありがとうございます。無事に動きました。

もう一点お伺いさせてください。
シート色なしタブで「詳細」という文字のあるシートのみ、
今作成している様式とは別に、ページレイアウトを変更して印刷したいと思っています。
別にマクロを作成し、callで呼び出して印刷しようと思うのですが、
mySheet.PrintOut部分に印刷設定を入れるだけではだめなのでしょうか。
シートの指定がうまくいっていないようです。

よろしくお願いいたします。

[返信 3] Re : シート名検索&色判断での印刷
投稿者 : てらてら     投稿日時 : 2022/05/25(Wed) 12:42:57
印刷設定と一言で言っても何をしようとしているのか分かりませんが、

>シート色なしタブで「詳細」という文字のあるシートのみ、
のコードは一番最初のコードでOKですので、

mySheet.PrintOutの前に印刷設定のコードを書けば良いと思います。
ただ、そのまま印刷設定を保持してしまうかもしれないので、

mySheet.PrintOutの後に、前の印刷設定を記述した方が無難だと思います。

[返信 4] Re : シート名検索&色判断での印刷
投稿者 : はなこ     投稿日時 : 2022/05/25(Wed) 13:32:14
> 印刷設定と一言で言っても何をしようとしているのか分かりませんが、
 印刷範囲を変更し向きを横に変更し印刷しようとしています。

> mySheet.PrintOutの後に、前の印刷設定を記述した方が無難だと思います。
後にいれたところ、「表紙」「明細(1)」「表紙」「明細(2)」「表紙」「明細(3)」の並びで印刷されてしまいます。なぜでしょうか

[返信 5] Re : シート名検索&色判断での印刷
投稿者 : はなこ     投稿日時 : 2022/05/25(Wed) 13:39:55
すいません、訂正です

> 印刷設定と一言で言っても何をしようとしているのか分かりませんが、
 印刷範囲を変更し向きを横に変更し印刷しようとしています。

> mySheet.PrintOutの後に、前の印刷設定を記述した方が無難だと思います。
後にいれたところ、「詳細(1)」「表紙」「詳細(2)」「表紙」「詳細(3)」「表紙」の並びで印刷されてしまいます。

[返信 6] Re : シート名検索&色判断での印刷
投稿者 : はなこ     投稿日時 : 2022/05/25(Wed) 14:06:30
ちなみに現在のマクロを貼っておきます。
先ほど出力順を書きましたが、印刷前の表示しているシートによって印刷順はバラバラになります。
詳細(1)詳細(2)詳細(3)の印刷範囲変更後を印刷したいです。

Sub 詳細タブ印刷範囲変更横向き()
'
Dim mySheet As Worksheet
Dim searchWord As String

searchWord = "詳細"

For Each mySheet In Worksheets

If mySheet.Tab.ColorIndex = xlColorIndexNone Then
If InStr(mySheet.Name, searchWord) > 0 Then

Range("A1:M136").Select
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.PrintTitleRows = "$1:$4"
.PrintTitleColumns = ""
End With
Application.PrintCommunication = True
ActiveSheet.PageSetup.PrintArea = "$A:$M"
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.590551181102362)
.RightMargin = Application.InchesToPoints(0.196850393700787)
.TopMargin = Application.InchesToPoints(0.393700787401575)
.BottomMargin = Application.InchesToPoints(0.47244094488189)
.HeaderMargin = Application.InchesToPoints(0.511811023622047)
.FooterMargin = Application.InchesToPoints(0.31496062992126)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlPortrait
.Draft = False
End With
Application.PrintCommunication = True
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
ActiveWindow.SmallScroll Down:=-147

End If
End If
Next

[返信 7] Re : シート名検索&色判断での印刷
投稿者 : てらてら     投稿日時 : 2022/05/25(Wed) 15:00:21
mySheetで処理しているのに、途中からActiveSheetとしてしまうのでおかしくなるのだと思います。(ActiveWindowもダメです。)

If InStr(mySheet.Name, searchWord) > 0 Then
のすぐ後ろに、
mySheet.Activate 'これを追加してみてください。

[返信 8] Re : シート名検索&色判断での印刷
投稿者 : はなこ     投稿日時 : 2022/05/25(Wed) 16:27:57
ありがとうございます!
うまく動きました。何度も申し訳ありませんでした、勉強します。

当掲示板について
返信入力フォーム
お 名 前  :
内  容   :
ステータス  : この質問を解決済みにする

認証コード  :
        キャプチャ画像


( 処理日時 : 2022-07-07 13:31:04 )

Page
Top