- ベストアンサー
ExcelでのVBA チェックボックスから印刷
初心者です。お世話になります。Excel2003を利用しています。 ユーザフォームに、CheckBoxを配置してあります。 CheckBoxを選択し、印刷ボタンを押したら印刷できるようにしたいのですが、CheckBoxを選択したらの部分が分かりません。 ここのHPにあるhttp://www.asahi-net.or.jp/~zn3y-ngi/YNxv98b2.html のを参考にしています。 HPに書いてある、「Private Sub チェックボックスの選択結果を調べる()」をどう改造していいのか分かりません。 ご教授、よろしくお願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 VBAを習い始めてから、どのぐらい経ちましたか? 私の経験からの想像ですが、たぶん、この規模のものを楽に作るには、丸2年ぐらい経験が必要だと思います。えっ!と、疑問に思われるかもしれませんが、サンプルのコードですと、数ヶ月レベルなのに、実務だと、それだけの経験が必要とは納得いかないかもしれませんね。 頭の中で、VBAの組み立てができていればよいのですが、なかなか、習っている状態では見えてこないのです。少し大きなものだとできません。 私が、今回と同等ののもので苦労したのは、VBAを始めて3年目で、掲示板でもほぼ解答できていたので、できるつもりになっていたのです。頼まれたものだったので、相手にお詫びした、苦い経験があります。 『かんたんプログラミング Excel2003 VBA 基礎編』技術評論社 (2004/02) 大村 あつし (著) http://www.amazon.co.jp/exec/obidos/ASIN/4774119660 このシリーズ3部が全部読みきれている状態で、やっと、なんとか、VBAの入門が終わったレベルだと思ってよいようです。(一回目の読みきりが、6ヶ月ぐらいです。半分ぐらいしか理解できません。しかし、VBAの教本というのは、なぜか、詳しいことを書いていないのです。困ったものですね。詳しいものは、みんな絶版になってしまいました。) たぶん、今回は、印刷設定の問題だとは思いますが、最初の印刷設定の(VBAとは関係のない)部分で通じていないので、前の方も分からないということだったと思います。 サンプルを示しておきます。こういうのは、教わらないとできるようになりません。みなさん、同じだと思います。 チェックボックスが、12個 コマンドボタン、1個 なお、Worksheets("SSS").Select を、UserForm_Intialize() の中に入れておくと良いです。 今回は、印刷範囲だけが、メッセージボックスで出てくるだけです。 UserFormモジュール '-------------------------- Private Sub CommandButton1_Click() Dim i As Integer Dim j As Integer Dim ar(11) As Variant For i = 1 To 12 ar(i - 1) = Me.Controls("CheckBox" & i).Value Next i For j = 0 To 11 If ar(j) Then With ActiveSheet .PageSetup.PrintArea = Cells(100 * j + 1, 1).Resize(100).Address MsgBox Cells(100 * j + 1, 1).Resize(100).Address '検査用 '.PrintPreview 'プリント・ブレビュー End With End If Next j 'チェックボックスを全てオフにする For i = 1 To 12 Me.Controls("CheckBox" & i).Value = False Next i End Sub
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 最初に、ご質問の内容は、読み手には正しく伝わっていないようです。サンプルをお示しになっていますが、それ自体を良く理解されていないようで、そのサンプルをベースにしても、ご自身の希望とは、実際はかなり違いがあるはずです。 そのサンプルを調べてみましたが、「1999.11.15」となっていますね。その内容は、Excel 97時代後だと思います。Excel 2000 の出回った頃には、もう、そのような書き方のコードは出なかったと思います。当時は、それでよかったのだろうと思います。 Webサイトからの引用: >「Private Sub CommandButton1_Click()」の中で、印刷範囲を設定してから印刷指示するように変更すれば、上手くいくと思います。 その文章からでは、著者は学習者に意図する内容が伝わっていないし、どう加工しても、まともに印刷の結びつけるような内容にはなっていないように思います。そのサンプルの内容で、印刷に結びつけるというには唐突です。 最大の問題点は、「チェックボックス」から、という部分です。チェックボックスは、複数を入れることができます。もし、「チェックボックス」のままで、複数の範囲を印刷するなら、臨時のシートが必要になります。 もし、UserForm で印刷範囲を選びたいのでしたら、オプションボタンの方がよいし、UnLoad Me は、しないほうがよいかもしれません。 それから、これを言うのは心苦しいのですが、VBAを覚えるなら、教本を換えたほうがよいです。ある程度、Microsoft のサポートのサンプル・コードなどに準じているものを選んでください。
お礼
お手数おかけします。サンプルみて下さり、ありがとうございます。 私の会計例では、3つしか表示していないのですが、 実際は20個程あり、何個か選択して印刷したいのです。 なので、オプションでなくチェックボックスにしてあります。 考え方がおかしいような気がしていたので、ありがとうございます。 そうですね。Microsoftのサンプルコードを使います。 違う方法を考えてみます。お手数おかけしました。
- marbin
- ベストアンサー率27% (636/2290)
意味がよくわかりません。 >チェックボックスを選択しても印刷が大量にでてきて、 なにかが大量に印刷されるのでしょうか? 印刷するようなコードは見当たりませんが・・・。 >変数「会計・タイトル」指定してあります。 コードの中には何も変数宣言されてませんが・・・。
補足
marbinさん、何度もすみません。 変数宣言は、以下でしています。 Option Explicit Dim 会計 As String Dim 部数 As String Dim タイトル As String marbinさんのを見て、チェックボックスでなく、印刷範囲がいけないかと思い印刷の所を直していますが、デバッグになってしまいました。 別のシートの部分を印刷範囲したいのです。 もう私の頭では分かりません。どうしたら良いのでしょうか? Private Sub CommandButton1_Click() 会計 = "1" 部数 = 1 Sheets("SSS").Range("A1:AA100").Select Selection.PrintOut Copies:=部数 会計 = "2" 部数 = 1 Sheets("SSS").Range("A101:AA200").Select Selection.PrintOut Copies:=部数 会計 = "3" 部数 = 1 Sheets("SSS").Range("A201:AA300").Select Selection.PrintOut Copies:=部数 Unload Me End Sub あと、そもそもこの考え方はあっているのでしょうか? ど素人で本当に申し訳ございません。
- marbin
- ベストアンサー率27% (636/2290)
> If UserForm1.CheckBox1.Value = True Then 「ユーザーフォーム1のチェックボックス1にチェックが入っていたら」 という意味になります。
補足
上記のを入れてあり、変数「会計・タイトル」指定してあります。 しかし、チェックボックスを選択しても印刷が大量にでてきて、 チェックボックスを選択しないで、「印刷ボタン」を押すと メッセージボックスが出るようにしたのですが、メッセージも 出ません。 下のコード間違っていますか? Private Sub チェックボックスの印刷選択() If 印刷.CheckBox1.Value = True Then 会計 = "1" ElseIf 印刷.CheckBox2.Value = True Then 会計 = "2" ElseIf 印刷.CheckBox3.Value = True Then 会計 = "3" Else タイトル = "チェックボックスの選択結果" MsgBox "どの会計も選択されていません", vbCritical, タイトル Exit Sub End If Range("A1").Value = 会計 End Sub
- marbin
- ベストアンサー率27% (636/2290)
チェックボックスのクリックイベントに印刷ボタンを表示する コードを書きたい、ということでしょうか?
補足
お早いお返事ありがとうございます。 当方ど素人で、意味が分からないかもしれませんが宜しくお願い致します。 印刷ボタンは、参考にしてあるHPのhttp://www.asahi-net.or.jp/~zn3y-ngi/YNxv98b2.htmlの1番下の参考画のように、ユーザフォームの中に「印刷」ボタンは作ってあります。 なので、Private Sub CommandButton1_Click()」の中で、印刷範囲を設定してから印刷指示は書きました。 しかし、「月」の所のチェックボックスはどう書いていいのか全く分かりません。このチェックボックスを選択したらを変更すれば良いと思ったのですが、考え方がそもそも間違っているのでしょうか?
お礼
2年もかかるんですか・・・(~_~;) 10年以上前にマクロを習ったのですが、もうずっと使っておらず ど素人の状態になってしまいました。 慌てて過去の本を読んだのですが、ユーザフォームにチェックボックスを配置し、 そこから印刷できるのが載っておらず、悩んでしまいました。 最近の本を読んでもチェックボックスから印刷するパターンが 見当たらず、慌てて教えてgooに登録して投稿した次第です。 Wendy02さん、marbinさんには、私の説明がかなり分かりずらかったと 思いますが、すぐの投稿で感謝しています。 ありがとうございます。 また本のご紹介、サンプルありがとうございます!!! これを機会に勉強しようと思います。 サンプルはこれからじっくり見て、意味を理解したいと思います。 今の私のレベルじゃ完璧無理なので、上司には明日謝ろうと思います。 本当にありがとうございました。