• ベストアンサー

エクセルのマクロで・・・

初心者のためどうして良いのかわかりません。 教えてください。 設定したい内容は、 ◇ sheet名"入力"にあるボタンキーをクリックすると、非表示のsheet名"出力"を呼び出し印刷する。 ◇ 印刷条件として、sheet"出力"は3枚のページ(範囲A1-Q37,A38-Q74,A75-Q111)があるが、 2ページ目は"D41"、3ページ目は、"D78"がブランクなら印刷しない。 とりあえず、下記コードで印刷だけはできるようにはなったのですが、"出力"が、「visible=false」だとエラーが起きます。 Sub 出力へ() Dim vbyesno As Integer vbyesno = MsgBox("印刷します", _ vbOKCancel, "明細表") If vbyesno = vbOK Then Worksheets("出力").PrintOut Else Worksheets("入力").Select End If End Sub ここからどうアレンジしていけばいいのでしょうか? アドバイスだけでも結構ですので宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

こんにちは。 見せたくないなら画面を止め、印刷前にVisibleをTrueにすれば良いと思います。 実際に印刷して試してないけど。 Sub 出力へ() Dim vbyesno As Integer vbyesno = MsgBox("印刷します", vbOKCancel, "明細表") If vbyesno = vbOK Then   Application.ScreenUpdating = False   With Worksheets("出力")    .Visible = True     Worksheets("出力").PrintOut From:=1, To:=1     If .Range("D41") <> "" Then      Worksheets("出力").PrintOut From:=2, To:=2     End If     If .Range("D78") <> "" Then      Worksheets("出力").PrintOut From:=3, To:=3     End If    .Visible = False    Application.ScreenUpdating = True   End With Else   Worksheets("入力").Select End If End Sub

aaa0123
質問者

お礼

お返事遅くなりました。 うまくいきました。あとはこのコードの意味を理解しないといけませんね。 本当にありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • happypoint
  • ベストアンサー率36% (521/1422)
回答No.4

>ただ、"Option Explicit"に色が付いてエラー表示がでてきました。 ここは、同じモジュールにすでに「Option Explicit」の行があるなら、これは複数は必要ありません。 この行の意味は、変数の宣言がきちんとされているかをチェックのために追加している行なので、 もしエラーが出て動作しないようなら、この行は削除してもかまいませんよ。

aaa0123
質問者

お礼

確かにもう一つありました。 他のマクロを本の記述通りに入力していた時に 入力していたようです``r(^^;) OKです!! お返事遅くなりました。本当にありがとうございました。

すると、全ての回答が全文表示されます。
  • happypoint
  • ベストアンサー率36% (521/1422)
回答No.3

次のコードでいかがでしょう。 非表示のシートを印刷しようとするとエラーになります。 いったん表示させてから、また非表示にする必要がありますよ。 Option Explicit Sub testPrintOut() Dim intYesno As Integer Dim intPage As Integer Const myRange1 As String = "D4" Const myRange2 As String = "D41" Const myRange3 As String = "D78" 'ページ数の設定 With Sheets("出力") If .Range(myRange1).Value = "" Then 'D4がブランクの時は、印刷しない  Exit Sub ElseIf .Range(myRange2).Value = "" Then 'D41がブランクの時は1ページ目まで印刷  intPage = 1 ElseIf .Range(myRange3).Value = "" Then 'D78がブランクの時は2ページ目まで印刷  intPage = 2 Else  intPage = 3 'いずれにも該当しないときは3ページまで End If End With '確認メッセージ intYesno = MsgBox(intPage & " ページ 印刷します", vbOKCancel, "明細表") '印刷指示 If intYesno = vbOK Then  With Sheets("出力")  .Visible = True '一時的に「出力」を表示状態にさせ、  .PrintOut from:=1, to:=intPage '印刷指示(ページ指定)を出した後、  .Visible = False 'また元に戻します  End With Else  Exit Sub End If End Sub

aaa0123
質問者

お礼

返事遅くなりました。 コードだけだと全然わからなかったのですが、 横に説明が付いていたので理解しながら無事設定できました。 ただ、"Option Explicit"に色が付いてエラー表示がでてきました。 僕のミスだと思いますのでもう一度頑張ってみます。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.2

Worksheets("出力").Select Worksheets("出力").PrintOut と印刷する前に セレクトしてもダメかな? visible=false で エラーなら、 visible=true にしてあげればいいと思いますが?

すると、全ての回答が全文表示されます。

関連するQ&A