Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2013)
特定のセルに文字が入力されてるシートを印刷する
投稿日時: 20/06/16 12:53:01
投稿者: ザックん

お世話になります。
 
特定のセルに文字が入力されてるシートを印刷したいのですが
初期のシートしか印刷できません。
 
シート名は「納品書」です。「納品書(2)」・・・が印刷されません。
 
特定のセルは「J21」です。
 
Sub 入力があるシートのみ印刷()
 
    Dim i As Long
    For i = 1 To 100
        With Worksheets(i)
            If IsNumeric(.Range("J21")) And .Range("J21") > 0 And .Name <> "納品書" Then .PrintOut
        End With
    Next
 
End Sub
 
宜しくお願い致し致します。

回答
投稿日時: 20/06/16 14:06:24
投稿者: WinArrow
投稿者のウェブサイトに移動

>初期のシートしか印刷できません。
>シート名は「納品書」です。
初期のシート名が「納品書」ということですか?
 
それならば
条件の中の
>.Name <> "納品書"
が間違っていませんか?

回答
投稿日時: 20/06/16 15:05:01
投稿者: simple

.Name <> "納品書"
の意味は、
シート名が "納品書" と異なっていれば
ということなので、
・"納品書" は 印刷されず、
・"納品書2"がむしろ印刷されるのでは?
 
Instr(.Name,"納品書") > 0
とか、
.Name Like "納品書*"
などとすれば、
シート名に"納品書"を含むもの
と言う意味になると思います。

投稿日時: 20/06/16 17:04:59
投稿者: ザックん

ありがとうございます。
 
少し考えてみます。

投稿日時: 20/06/17 12:28:46
投稿者: ザックん

  お世話になります。
すみません。
下記のコードでJ21に入力されているシートのみ印刷ができました。
私のマクロ登録がしっかりなされていないことが問題でした。
しかし、With Worksheets(i)にインデックスが有効範囲にありませんとエラーメッセージが
出てしまいます。
どの様に修正すればよいのか教えていただけますか。
宜しくお願い致し致します。
 
 Dim i As Long
    For i = 1 To 100
     
     
    With Worksheets(i)
    If IsNumeric(.Range("j21")) And .Range("j21") > 0 And .Name <> "納品書" Then .PrintOut
     
    End With
     
    Next
     
 
 
 
End Sub

回答
投稿日時: 20/06/17 13:47:43
投稿者: WinArrow
投稿者のウェブサイトに移動

>For i = 1 To 100
ここの
100
が問題です。
 
実際に存在数シート数を指定すれば、
>インデックスが有効範囲にありませんと
というエラーは出ません。
 
ところで、対象としているブックを認識する必要があるので
 
アクティブなブックとする場合は
For i = 1 To ActiveWorkbook.Sheets.Count
とする方法があります。
 
マウロ記述ブックならば
For i = 1 To ThisWorkbook.Sheets.Count
とする方法があります。
 
自ブック以外の場合は、
ActiveWorkbook
を使うのは、リスクがともなうので
For i = 1 To WorkbookS("●●/xlsx").Sheets.Count
というように固有のブック名を使う方が安全です。
 
 
 
 

投稿日時: 20/06/17 18:28:52
投稿者: ザックん

お世話になっております。
 
すみません。素人なもので多く入れておけばよいものと考えていました。
 
おかげさまで解決しました!
 
 
ありがとうございました。