• ベストアンサー

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

初心者のためどうして良いのかわかりません。 教えてください。 設定したい内容は、 ◇ 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

  • エクセル マクロ ファイルの再起動

    ネットワークプリンター2台にワークシートを出力するコードで悩んでいます。 下記のコードを繰り返すと110枚前後でリソース不足が発生することが分かりました。 保存しないで終了し再度開くとリセットされることも分かりました。 保存しないで終了は出来るのですが、同じファイルを再度開くことはマクロで出来ますか? 宜しくお願い致します。 =================================== '全ての Book を保存しないで閉じる '最後に Excel も終了する Sub excel_Quit() Dim w As Workbook '全ての Book を保存したことにする (保存はしない) For Each w In Workbooks w.Saved = True Next 'Excel を終了する Application.Quit 'Book を閉じる ThisWorkbook.Close False End Sub ============================== Sub チェンジプリンター() '印刷切り替え処理 If Worksheets("DeviceRead-Write").Cells(6, 13).Value = 1 Then 'I6 が1ならEPSON_Aに印刷する(D10000上位2ビットが1) プリンターA出力 ElseIf Worksheets("DeviceRead-Write").Cells(6, 13).Value = 2 Then 'I6 が1ならEPSON_Bに印刷する(D10000上位2ビットが2) プリンターB出力 Else DoEvents End If End Sub Sub プリンターA出力(): 'プリンターAに印刷 Application.ActivePrinter = "EPSON_A on Ne01:" 'プリンターAを指定 Worksheets("form").PrintOut 'シートFormの印刷 Exit Sub End Sub Sub プリンターB出力(): 'プリンターBに印刷 Application.ActivePrinter = "EPSON_B on Ne00:" 'プリンターBを指定 Worksheets("form").PrintOut 'シートFormの印刷 Exit Sub End Sub

  • EXCEL マクロ 

    お世話になります。 マクロは初心者です。 セルの数値を参照して、シートをアクティブにしたいのですが 下記のような繰り返しでシートが30ぐらいあるので、簡単な 表現に出来ないでしょうか。 宜しくお願いします。 Private Sub Workbook_Open() If 0 <= Worksheets(4).Range("M1") < 7 Then Worksheets(4).Activate End If If 0 <= Worksheets(5).Range("M1") < 7 Then Worksheets(5).Activate End If If 0 <= Worksheets(6).Range("M1") < 7 Then Worksheets(6).Activate End If If 0 <= Worksheets(7).Range("M1") < 7 Then Worksheets(7).Activate End If If 0 <= Worksheets(8).Range("M1") < 7 Then Worksheets(8).Activate End If If 0 <= Worksheets(9).Range("M1") < 7 Then Worksheets(9).Activate End If End Sub

  • EXCELマクロでのシート間のデータ同期方法

    質問させていただきます。 EXCELにて、"シート1"のA1~C3と"シート2"のD4~F6を 同期化したく考えております。 ・いわゆる一方のシートが「読み取り専用」になってしまうリンク貼り付けではなく、シート1、シート2相互が書き換え可能の同期化です。 ・A1とD4、B3とE6、のように互いに照合箇所のセル同士を同期反映させたいと考えております。 なお、他の質問を参照したところ、 シート1のA1とシート2のD4の単一セルを同期かする方法は確認できました。(以下参照) ***************************************************************** シート1のコードは Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Worksheets("シート2").Range("D4") = Target End If End Sub シート2のコードは Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$D$4" Then Worksheets("シート1").Range("A1") = Target End If End Sub *************************************************************** これを参考にVBAの シート1のコードエディターに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$2" Then Worksheets("シート2").Range("D5") = Target End If End Sub シート2のコードエディターに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$D$5" Then Worksheets("シート2").Range("A2") = Target End If End Sub というように追記していったのですが、エラーとなってしまいます。 お詳しい方がおられましたらお願いいたします。

  • 複数のシートの1ページ目と2ページ目を連続印刷したい

    Vista Excel2007でマクロ作成中の初心者です。 複数のシートが12個あります。(増減あり) それぞれのシートには、必ず2ページの改ページが設定してあります。 この複数シートの1ページ目だけを連続印刷したいです。 また、2ページ目だけを連続印刷したいです。以下のようにしたのですが うまく印刷できません。よろしくお願いします。 Sub シートの1ページ目の印刷() Dim i As Integer For i = 1 To 12 With Worksheets(i) .Range("A1:Q44").PrintOut End With Next i End If End Sub ------------------------------------- Sub シートの2ページ目の印刷() Dim i As Integer For i = 1 To 12 With Worksheets(i) .Range("Q46:Q89").PrintOut End With Next i End If End Sub

  • EXCELについての質問です。

    お世話になります。 現在エクセルに「入力」,「報告書」,「報告書2」の3枚のシートを置き,「入力」シート上のボタンに以下のマクロを登録しています。 Sub 報告書印刷() Application.ScreenUpdating = False Msg = MsgBox("報告書を印刷します。", vbOKCancel) If Msg = vbCancel Then Exit Sub End If Worksheets("報告書").Visible = True Worksheets("報告書").Select Worksheets("報告書").Range("J10").Value = 1 Application.Calculate Worksheets("報告書").PrintOut Worksheets("報告書").Visible = False Worksheets("入力").Select End Sub ボタンをクリックすることにより,報告書は印刷できますが,それに加えて, もし,「入力」シートのセルA1が空白ではない場合(※何らかの文字が入力されている場合)には,「報告書2」シートも印刷される・・ というような条件を付加した構文にしたいと考えております。 知識不足のためかなり背伸びをした質問をしていますが,どなたかご教示いただければ幸いです。 どうかよろしくお願いいたします。

  • エクセル ボタン マクロ 修正

    Sub 印刷() Dim a As Variant a = MsgBox("印刷しますか?", vbYesNo) If a = vbNo Then Exit Sub With Sheets("1") .Cells.FormatConditions.Delete .PageSetup.PrintArea = Range("A1:K73").Address .PrintOut End With End Sub として使用していたのですが シートをコピーして使用する事になり コピーした際印刷ができなくってしまうため修正したいのですが わからないため教えていただきたいです With Sheets("1")ここの部分を今現在ボタンを置いているシートを選択にしたいのです

  • エクセルのマクロで。

    エクセルでマクロを組もうと思ったのですが 素人なので進みません。 何が悪いかも判りません。 教えてください。<(_ _)> 単純にシート入力のB1列のデーターの数を数えて シート出力のJ1にその数を入れるだけなんですが・・・。(T_T) Sub Macro1() ' ' Macro1 Macro ' ページ = Worksheets("入力").Range("B1").CurrentRegion.Row.Count Worksheets("出力").Range("J1") = Count End Sub 「ページ = Worksheets("入力").Range("B1").CurrentRegion.Row.Count」 ディバグすると上記の所で「オブジェクトが必要です」とエラーが出ます。 頭も爆発寸前です。(>_<)

  • エクセル マクロ

    C15に="田中"&TEXT(A15,"m.d") C15に田中8.31と表示されてます 別のシート作成し 田中8.31 と名前を付けておきます C15を押した時に飛ぶように設定しようとしたのですが うまくいかないのですが どうしたらいいでしょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$C$14" Or Target.Address = "$C$15" Then Worksheets(Target.Value).Visible = True Worksheets(Target.Value).Select Else End If End Sub Worksheets(Target.Value).Visible = True ここの部分でうまくいかなくなります

  • エクセルのマクロの連続印刷で困っています。

    初心者です。 エクセルのマクロで通知書を指定した番号~番号までを連続印刷 させたいのですが、印刷をすると、印刷結果が最初の番号は指定した 番号まで印刷されて良かったのですが、次から最後までの番号の 印刷が同じものが印刷されていき、どんどん増えていってしまって いて困っています。 いろいろとやり方を変えてみたりしたのですが、どこが間違えて いるのかが結局分からず、どなたか詳しい方、教えていただけます ようでしょうか?>< よろしくお願いします。 ---- 失敗経緯は↓の感じです ・ただ連続印刷させたらシート1まで印刷したのでシート2を  セレクトさせるようにした ・連続印刷させるように指示した番号が繰り返し印刷される  のでプレビューさせて、プレビューされた1枚だけが印刷  させるようにプレビューを追加した にもかかわらず、プレビューでは1枚だけがプレビューされ るのに印刷結果はプレビュー以外の番号のものまで印刷されて しまいます。しかも、既に印刷がされているものまでもです。 シート2は、VLOOKUPで読み込ませているものは1人分だけの 情報のはずなのに、何故、それ以外の人の分まで印刷して しまうのでしょうか>< エクセルの構成は、 ・シート1 通知書に印刷させる用でID管理用の一覧になっています。 このシートにシート2で印刷させたいNoを入力・印刷指示 をさせています。 ・シート2 シート1で指定されたNoをVLOOKUPで読み込ませて表示させて います。(1人分で1枚のみ) ・セルには名前をつけています Sub 通知書を連続印刷する() myMsg = MsgBox(Range("通知書連続始め").Value & " 番から " & Range("通知書連続終わり").Value & " 番まで一括印刷しますか?" & Chr(10) & Chr(10) & "現在の使用プリンタは " & Application.ActivePrinter & " になっています。", vbOKCancel) If myMsg = vbOK Then For i = Range("通知書連続始め") To Range("通知書連続終わり") Range("連続印刷するNO").Value = i Worksheets("シート2").Select Worksheets("シート2").PrintPreview (False) Worksheets("シート2").PrintOut Next Else MsgBox (" 一括印刷を中止しました ") End If End Sub

  • Excel ページ指定連続印刷

    お世話になります。 Excel2003にて sheet1(出力表)  A B C D E F  1行目は項目 1 ○○○○○ 1←表示指定頁数入力 2 *****    3 ***** |印刷|←ボタン A2:E2以降(実際は21行)に、 sheet2(データ)に表の項目順に入力し、並べ替えをしたデータを (A2であれば…データ!B3に必要な項目があるとして…)=IF(OR($F$1=0,$F$1=""),"",IF(OFFSET(データ!B3,($F$1-1)*21,0,1,1)="","",OFFSET(データ!B3,($F$1-1)*21,0,1,1))) で、F1に必要頁を入力し反映させ、表を印刷していましたが、頁数が多くなると手間がかかるので、指定頁までを印刷するように Private Sub CommandButton1_Click() Dim msg, style, title, help, ctxt, response, mystring msg = "表を出力します。" style = vbOKCancel + vbinfomation + vbDefaultButton1 title = "Print Out" help= "demo.hlp" ctxt = 1000 response = MsgBox(msg, style, title, help, ctxt) If response = vbOK Then mystring = "ok" Worksheets("出力表").Activate Dim page As Integer Dim pageend As Integer pageend = Range("F1") For page = 1 To pageend Cells(1, 6) = page Sheet1.PrintOut Next page Else mystring = "cansel" MsgBox "cancel...bye" End If End Sub(見づらいですが行詰めました…) これは、1頁目からの印刷なので、例)3頁目から5頁目を印刷という機能も欲しいな、と思い…F3=開始頁 G3=終了頁を入力…「印刷」…ここまで考えましたがまだあまり応用が利かないため、先に進みません…。 ☆この状態でのページ指定印刷の方法 ☆もっと簡単な方法があるよ!など アドバイスをいただけたら助かります。説明不明瞭で申し訳ありません。

専門家に質問してみよう