- ベストアンサー
エクセル(VBA)でリストボックス等を使用した印刷方法
エクセルのフォームのリストボックス等を使用して、選んだシートのみを印刷することは出来るのでしょうか。(VBAを使用して) 現状 ・シートが15枚あります(シート1,2,3,4は条件入力用でシート5~15は様式でシート5~15は非表示です) ・シート1にリストボックスを配置したいです(リストボックスの選ぶ名前はシート5~15です) 例として ・リストボックスでシート7を選んだときに、シート7を印刷したいです その他 ・リストボックスでなくても、選んだシートが印刷される方法が他にあるのであれば、他の方法でもかまいません。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
新しいものを作りました。 http://www.okweb.ne.jp/kotaeru_reply.php3?q=222287 書かれていた内容は間違っていませんでした。 上の新しいものもシート名を変更しただけで 他に変更はしていません。 これを参照して違いが無いか確認してください。 1.B1に数字はありますか 2.B1の数字はリストボックスで作られた数字ですか。 3.シートはありますか。 4.A列にシート名は入っていますか。 5.VBEでブレークポイントを設定、 ステップインで実行、変数「シート名」に 何が入るかを確認してください。 基本的には間違いないと思います。 あとは、シートとマクロの間で整合がとれていない ためだと思います。 変更点を確認しながら落ち着いて見てみてください。 エラー内容は、シートを見つけられなかった ということです。シートの指定、リストボックス部分 実際のシート、行・列のズレなどを確認ください。
その他の回答 (5)
- coco1
- ベストアンサー率25% (323/1260)
1です。ちょっと長いですが、ラジオボタンについて補足します。 表示→ツールバー→フォームで「フォームツールバー」を表示させます。 その中の、テキストボックスの下あたりにxyzと書かれた枠のようなアイコンがあると思います。マウスでポイントすると「グループボックス」というポップヒントが表示されるはずです。それをクリックして、ワークシートの適当な場所に適当な大きさで枠を作成します。すると、グループ1とか表示された枠が描画されたと思います。 次に、先ほどのツールバーに、トリの目玉のようなアイコンがあると思います。そこをクリックして、先ほどのグループ枠の中をクリックするとオプション1等と書かれた○が表示されるので、それを3回繰り返します。 ここで、その○をそれぞれクリックしてみてください。すると、どれか一つの○をクリックすると、他の○の状態が反転するのにお気づきかと思います。これがラジオボタンです。ラジオのチューニングバンド(FM・AM・SW)切り替えみたいに、単一の動作のみを選択する場合に使うのでラジオボタンといいます。 ところで、先ほど貼り付けた○の上あたりでカーソルの形が(指に?)変わったときに右クリックすると、メニューに「コントロールの書式設定」というのがあるはずです。それをクリックして、「コントロール」というタブを開いてみてください。 その中に「リンクするセル」という項目があると思いますので、現在表示されている適当な番地を入力してダイヤログを閉じてみてください。 さて、その状態で先ほどのラジオボタンをクリックすると、さっき入力したセルに数字が表示されませんか? つまり、この数字を取得することで、動作の分岐ができるわけです。 あとは、どこかに「印刷」ボタンを配置して、それをクリックしたときに、指定したシートを印刷するようにすればいいです。 ブロックの流れとしては、 ・印刷ボタンクリック ・リンクセルの数字取得 ・数字に応じてワークシートを切り替え ・印刷実行 ・メニューのシートに戻る と言った感じになります。
お礼
この方法は便利ですね。 また一つ勉強になりました ありがとうございます
- kenken0001
- ベストアンサー率69% (51/73)
シート名が番号ではない時は Select Caseで処理を分けてください。 Select Case Cells(1, 2) Case 1 シート名 = "333" Case 2 シート名 = "あいう" 1ならシート名333を 2ならシート名あいう、のように 下の部分とSelectを置き換えてください。 シート名 = "sheet" & Cells(1, 2) + 4 Cellsの質問は、その通りです。
補足
たびたび、すみませんが、なぜエラーが出るのかわからないのですが、よろしくお願いします。 実行時エラー9(インデックスが有効範囲にありません) Sub 様式指定印刷() Application.ScreenUpdating = False '画面表示の静止 Select Case Cells(1, 2) Case 1 シート名 = "工事施工伺" Case 2 シート名 = "当初設計書" Case 3 シート名 = "標準工期算定表" Case 4 シート名 = "審査事項調書" Case 5 シート名 = "工事設計変更伺" Case 6 シート名 = "変更設計書" Case 7 シート名 = "変更増減表" Case 8 シート名 = "出来高設計書" Case 9 シート名 = "工事検査依頼書" Case 10 シート名 = "工事検査依頼書1" Case 11 シート名 = "工事完成検査復命書" Case 12 シート名 = "検査写真帳" Case 13 シート名 = "検査員任命書" Case 14 シート名 = "検査員復命書" End Select Worksheets(シート名).Visible = True 'シート表示(印刷用)・・・ここでエラーが出る Sheets(シート名).PrintPreview 'PrintOut以降をPrintPreviewに変更するとプレビュー画面・・・シート表示(印刷用)を消した場合はここでエラーが出る Worksheets(シート名).Visible = False 'シート非表示(戻し) Application.ScreenUpdating = True '画面表示の静止解除 End Sub
- kenken0001
- ベストアンサー率69% (51/73)
下のマクロを使ってください。 Sub Macro1() Application.ScreenUpdating = False '画面表示の静止 シート名 = "sheet" & Cells(1, 2) + 4 'セルB1に入った数字をシート名に置き換え Worksheets(シート名).Visible = True 'シート表示(印刷用) 'プレビューです。変更可能です。 Sheets(シート名).PrintPreview 'Sheets(シート名).PrintOut Copies:=1 '一応プレビューとしましたが、上のもので '置き換えると印刷します。 Worksheets(シート名).Visible = False 'シート非表示(戻し) Application.ScreenUpdating = True '画面表示の静止解除 End Sub B1に結果が表示されるように リストボックスを作ってください。 シート5 が 1 シート6 が 2 シート15 が 11
補足
すみませんが、実行時エラーがでるのですが ・シート5から15の名称を変更すると実行時エラー9(インデックスが有効範囲にありません)とでます 例:シート5を「333」 シート7を「あいう」 シート10を「様式」 シート名は固定です ・下記のCells(1, 2)はB1ですよね たとえば、C5はCells(5, 3)でいいんですか? シート名 = "sheet" & Cells(1, 2) + 4 よろしくお願いします。
- imogasi
- ベストアンサー率27% (4737/17070)
module1に次ぎの内容を入力する。 Sub aaa001() a=inputbox("sheet=") Sheets(a).PrintOut Copies:=1 End Sub それを実行すると、sheet名を聞いてきて、sheet1や sheet2を入力すると入力したシートの内容が印刷されました。
お礼
実行時エラー1004の処理に時間がかかったので、お礼が遅くなりすみません ちょっと不便ですけれども、こういう方法もあるのだなと、わかりました ありがとうございます
- coco1
- ベストアンサー率25% (323/1260)
こんばんわ。 一応、VBAは理解できるという前提で回答いたします。 ・まず、リストでシート名を選択するセルですが、シート名が忠実に入力できるか、あるいは、簡単のために数字で選択できるようにして表示形式で「シート5」などと表示させるようにする。 ・印刷ボタンを配置する。 ・ボタンをクリックしたときに、先ほどのセルを参照し、セルの値が5ならばシート5をアクティブにし、印刷を実行する。 と言う手順で問題ないと思います。 なお、そういう使用法であれば、ラジオボタンの方が使い勝手がいいと思います。
補足
ラジオボタンはどのようにして使用するのですか ラジオボタンは名前も聞いたことがないので、今回の場合の使いかたを詳しく教えていただけたら、嬉しいのですが。
お礼
いろいろ、ありがとうございました 夜遅くまで、回答いただきありがとうございます 実行時エラーが出ていた原因は、リストボックスがシート1にあり、リスト参照元が、別シートでリンクさせていたのでエラーが出ていました(もう少し、詳しく説明すれば、ご迷惑をかけることがなかったと反省しています)