• ベストアンサー

ExcelでのVBA チェックボックスから印刷

初心者です。お世話になります。Excel2003を利用しています。 ユーザフォームに、CheckBoxを配置してあります。 CheckBoxを選択し、印刷ボタンを押したら印刷できるようにしたいのですが、CheckBoxを選択したらの部分が分かりません。 ここのHPにあるhttp://www.asahi-net.or.jp/~zn3y-ngi/YNxv98b2.html のを参考にしています。 HPに書いてある、「Private Sub チェックボックスの選択結果を調べる()」をどう改造していいのか分かりません。 ご教授、よろしくお願い致します。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

pohimawari
質問者

お礼

2年もかかるんですか・・・(~_~;) 10年以上前にマクロを習ったのですが、もうずっと使っておらず ど素人の状態になってしまいました。 慌てて過去の本を読んだのですが、ユーザフォームにチェックボックスを配置し、 そこから印刷できるのが載っておらず、悩んでしまいました。 最近の本を読んでもチェックボックスから印刷するパターンが 見当たらず、慌てて教えてgooに登録して投稿した次第です。 Wendy02さん、marbinさんには、私の説明がかなり分かりずらかったと 思いますが、すぐの投稿で感謝しています。 ありがとうございます。 また本のご紹介、サンプルありがとうございます!!! これを機会に勉強しようと思います。 サンプルはこれからじっくり見て、意味を理解したいと思います。 今の私のレベルじゃ完璧無理なので、上司には明日謝ろうと思います。 本当にありがとうございました。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 最初に、ご質問の内容は、読み手には正しく伝わっていないようです。サンプルをお示しになっていますが、それ自体を良く理解されていないようで、そのサンプルをベースにしても、ご自身の希望とは、実際はかなり違いがあるはずです。 そのサンプルを調べてみましたが、「1999.11.15」となっていますね。その内容は、Excel 97時代後だと思います。Excel 2000 の出回った頃には、もう、そのような書き方のコードは出なかったと思います。当時は、それでよかったのだろうと思います。 Webサイトからの引用: >「Private Sub CommandButton1_Click()」の中で、印刷範囲を設定してから印刷指示するように変更すれば、上手くいくと思います。 その文章からでは、著者は学習者に意図する内容が伝わっていないし、どう加工しても、まともに印刷の結びつけるような内容にはなっていないように思います。そのサンプルの内容で、印刷に結びつけるというには唐突です。 最大の問題点は、「チェックボックス」から、という部分です。チェックボックスは、複数を入れることができます。もし、「チェックボックス」のままで、複数の範囲を印刷するなら、臨時のシートが必要になります。 もし、UserForm で印刷範囲を選びたいのでしたら、オプションボタンの方がよいし、UnLoad Me は、しないほうがよいかもしれません。 それから、これを言うのは心苦しいのですが、VBAを覚えるなら、教本を換えたほうがよいです。ある程度、Microsoft のサポートのサンプル・コードなどに準じているものを選んでください。

pohimawari
質問者

お礼

お手数おかけします。サンプルみて下さり、ありがとうございます。 私の会計例では、3つしか表示していないのですが、 実際は20個程あり、何個か選択して印刷したいのです。 なので、オプションでなくチェックボックスにしてあります。 考え方がおかしいような気がしていたので、ありがとうございます。 そうですね。Microsoftのサンプルコードを使います。 違う方法を考えてみます。お手数おかけしました。

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.3

意味がよくわかりません。 >チェックボックスを選択しても印刷が大量にでてきて、 なにかが大量に印刷されるのでしょうか? 印刷するようなコードは見当たりませんが・・・。 >変数「会計・タイトル」指定してあります。 コードの中には何も変数宣言されてませんが・・・。

pohimawari
質問者

補足

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)
回答No.2

> If UserForm1.CheckBox1.Value = True Then 「ユーザーフォーム1のチェックボックス1にチェックが入っていたら」 という意味になります。

pohimawari
質問者

補足

上記のを入れてあり、変数「会計・タイトル」指定してあります。 しかし、チェックボックスを選択しても印刷が大量にでてきて、 チェックボックスを選択しないで、「印刷ボタン」を押すと メッセージボックスが出るようにしたのですが、メッセージも 出ません。 下のコード間違っていますか? 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)
回答No.1

チェックボックスのクリックイベントに印刷ボタンを表示する コードを書きたい、ということでしょうか?

pohimawari
質問者

補足

お早いお返事ありがとうございます。 当方ど素人で、意味が分からないかもしれませんが宜しくお願い致します。 印刷ボタンは、参考にしてあるHPのhttp://www.asahi-net.or.jp/~zn3y-ngi/YNxv98b2.html​の1番下の参考画のように、ユーザフォームの中に「印刷」ボタンは作ってあります。 なので、Private Sub CommandButton1_Click()」の中で、印刷範囲を設定してから印刷指示は書きました。 しかし、「月」の所のチェックボックスはどう書いていいのか全く分かりません。このチェックボックスを選択したらを変更すれば良いと思ったのですが、考え方がそもそも間違っているのでしょうか?

関連するQ&A

  • エクセル2003VBA チェックボックスについて

    エクセル2003VBA チェックボックスについての質問です よろしくお願いします。    A         B 1 あああ       □ 2 いいい       □ 3 ううう        □ . . . . 35 かかか      □ 複数のチェックボックスをB列に配置し、 B1がオンになるとbook1を開く B2がオンになるとbook2を開く ・ ・ B35がオンになるとbook35を開く処理を行いたいのですが、 非常にコードが長くなってしまいます。 以下のコード以外で、 どのチェックボックスがオンになっているかを調べる方法が知りたいのですが、よろしくお願いします。 Private Sub CheckBox1_Click() book1を開く処理 End Sub Private Sub CheckBox2_Click() book2を開く処理 End Sub ・ ・ ・ Private Sub CheckBox35_Click() book35を開く処理 End Sub

  • エクセル VBA チェックボックスについて

    よろしくお願い致します。 OS:XP エクセル2003 VBAのことは、まったくの初心者です。 質問なのですが、下記のようなチェックボックス7にチェックが入れば、チェックボックス8~11に自由にチェックが入れれるようになり、逆にチャックボックス7にチェックが入ってない場合は、チェックボックス8~11のチェックはクリアされ、チェックできないものを作りました。 ここから、チェックボックス7にチェック入れたあとは、必ずチェックボックス9~11のどれかにチェックが入っている状態(ラジオボタンのような)で、チェックボックス7にチェックが入ってなかったら、8~11のチェックがクリアで尚且つ、チェックができなくなるようにするにはどうすればよいでしょうか? よろしくお願い致します。 Private Sub CheckBox7_Click() If CheckBox7.Value = True Then CheckBox8.Enabled = True CheckBox9.Enabled = True CheckBox10.Enabled = True CheckBox11.Enabled = True Else CheckBox8.Value = False CheckBox9.Value = False CheckBox10.Value = False CheckBox11.Value = False CheckBox8.Enabled = False CheckBox9.Enabled = False CheckBox10.Enabled = False CheckBox11.Enabled = False End If End Sub

  • エクセル VBAのチェックボックスについて

    お読みくださり、ありがとうございます。 エクセル初心者でございます。 エクセルのマクロなのですが、 お詳しい方、是非教えて欲しいです!汗 調子に乗って入力フォームなるものを作りました。 入力フォームの中にて、チェックボックスで「ある」「なし」の項目を入れてみたのですが、チェックしていないのに、値が入る現象が起きています汗 以下、素人が書いたコードを恥を承知で記載させていただきます。 Private Sub CheckBox1_Click() If CheckBox1.Value = True Then OK = "○" End If End Sub Private Sub CheckBox2_Click() If CheckBox2.Value = True Then NO = "×" End If End Sub Private Sub UserForm_Click() End Sub '以下のコードは、登録ボタンがクリックされたときの処理! Private Sub 登録ボタン_Click() If TextBox1.Text = "" Then MsgBox "グッズ名を入力してください。" Exit Sub End If If TextBox2.Text = "" Then MsgBox "アプローチ先を入力してください。" Exit Sub End If With Worksheets("協賛グッズ") With Cells(Rows.Count, 2).End(xlUp) .Offset(1, 0).Value = TextBox1.Text .Offset(1, 1).Value = mori .Offset(1, 2).Value = mori2 .Offset(1, 3).Value = TextBox2.Text .Offset(1, 5).Value = TextBox3.Text .Offset(1, 6).Value = TextBox4.Text .Offset(1, 7).Value = TextBox5.Text .Offset(1, 8).Value = TextBox6.Text End With End With TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox5.Text = "" TextBox6.Text = "" CheckBox1.Value = False CheckBox2.Value = False End Sub 以上です。 おかしなところ満載かと思いますが、 チェックを入れた項目だけ値を入れたいと考えております。 おわかりになるかたおりましたら何卒お助けください汗 よろしくお願いいたします。

  • エクセルVBA ユーザーフォームのチェックボックス

    エクセルVBAのユーザーフォームのチェックボックスについて教えてください。 frame1の中にCheckbox1~5があるのですが、以下のように指示したいです。 Checkbox1~4は自由にチェックできるようにしておいて、Checkbox1~4の全てにチェックが入った場合に、Checkbox1~4の全てチェックを外し(False)、その代わりCheckbox5を自動的にチェックを入れたいです(True)。 CommandButtonなどをクリックして初めて変化するのではなく、ユーザーフォームにチェックを入れている間に自動的にチェックを入れたり外したいです。 特に「Checkbox1~4の全てにチェックが入った場合」というのを、どこに入力するのか分かりませんでした。 1箇所だけならPrivate Sub CheckBox1_Click()と始めたら良いんだとおもうのですが。。。 よろしくお願いします

  • エクセル チェックボックスの解除について(VBA)

    YES/NOを入力させる為の下記のVBAにおいて、チェックボックス1をチェックすると、アの部分でチェックボックス2の解除を行う関係で?、シート上でチェックボックス2を操作していないのにもかかわらず、勝手にCheckBox2_Click()に入り、命令文イを実行してしまいます。 ただ単にSub CheckBox1_Click()のルーチンの最後までの処理で終わりたいのですが、どうしたらよいのでしょうか。 Private Sub CheckBox1_Click() If CheckBox1 = True Then Sheets("sheet1").Range("A1") = 1 Sheets("sheet1").Range("A2") = 0 CheckBox2 = False・・・ア Else Sheets("sheet1").Range("A1") = "" End If End Sub Private Sub CheckBox2_Click() If CheckBox2 = True Then Sheets("sheet1").Range("A1") = 0 Sheets("sheet1").Range("A2") = 1 CheckBox1 = False Else Sheets("sheet1").Range("A2") = ""・・・イ End If End Sub

  • チェックボックスの使い方

    チェックボックスの使い方 エクセルでの質問です ユーザーフォームにシート名を入れたチェックボックスが、6こ付いており チェックを入れたシートのみを印刷(コマンドボタンで実行)しようとしております 以下のコードを印刷のコマンドボタンに埋め込みました --------------------------------- Private Sub CommandButton1_Click() On Error GoTo HandleErr Dim i As Integer For i = 1 To Sheets.Count If Me.Controls("CheckBox" & i).Value Then Sheets(i).PrintOut End If Next i Exit Sub HandleErr: MsgBox "印刷シートが選択されていません" End Sub --------------------------------- (1)印刷が正常になされても”印刷シートが選択されていません” とメッセージボックスがでてしまいます チェックされていない場合はエラーメッセージを出しつつ、回避する方法を教えて下さい (2)各シート内の使用されている任意のセル範囲を印刷したいのですが、 どのようなコードをどの位置で使用すればよろしいでしょうか? 素人的な質問で申し訳ありません よろしくご回答願います

  • Excel ユーザーフォームのコンボボックスについて

    始めまして、マクロに関してはまだまだ勉強中なのですが、ユーザーフォームのコンボボックスについてつまづいてしまい、皆さんにご教授頂ければと思います。 一つユーザーフォームを作成後、そのフォーム内にコンボボックスを配置し、リストから項目を選択できるようにしたいと考え下記のように記述したのですが、ユーザーフォームを実行してもフォームは表示されてきますが、ボックスを選択してもリストに項目が表示されてきません。 Private Sub cmd入力_Click() End Sub Private Sub 選択グループCombo_Change() With 選択グループCombo .AddItem "初級" .AddItem "中級" .AddItem "上級" Private Sub cmd閉じる_Click() Unload Me End Sub この記述自体が間違っているのでしょうか。 宜しくお願いします。

  • ExcelVBA チェックボックスの値

    エクセル マクロ ユーザーフォーム 2つの間で、チェックボックスの状態をループを使って 取得するがわかりません? ユーザーフォーム1にチェックボックスを50個用意し、 ユーザーフォーム2にて各50個の値がtrue or falseを取得したいと考えています。 又、50個を取得する時にループを用いて、記載を短くする方法についても教えてください。 現在は、ユーザーフォーム1に下記のように指定して処理をしていますが、 varCheck1をユーザーフォーム2で、For Nextを用いて一度に処理する方法が分かりません。 Private Sub CommandButton1_Click() Dim varCheck(1 To 50) As Variant varCheck1 = ユーザーフォーム1.CHECKBOX1.Value varCheck2 = ユーザーフォーム1.CHECKBOX2.Value varCheck3 = ユーザーフォーム1.CHECKBOX3.Value ・             ・ varCheck50 = ユーザーフォーム1.CHECKBOX50.Value ・ Unload ユーザーフォーム1 End Sub 標準モジュールに PUBLICvarCheck1から50まで記載して ユーザーフォーム間を使用できるようにしています。

  • EXCELのシート上に埋め込んだチェックボックスの一括処理方法について

    EXCEL VBAのコード記載方法について教えていただきたいことがあります。 Sheets("Test")上にコントロールツールボックスのチェックボックスを 100個とコマンドボタンを1個配置する。 コマンドボタンをクリックすると、CheckBox1~100を全てTrueにする。 これを、 Private Sub CommandButton1_Click() Sheets("Test").CheckBox1 = True Sheets("Test").CheckBox2 = True ・ ・ ・ End Sub と100回書くのではなく、配列化して記載することは可能なのでしょうか。 ユーザーフォームのチェックボックスであれば Dim i As Integer For i = 1 To 100 UserForm1.Controls("CheckBox" & i) = True Next i で出来ると思うのですが、シート上に埋め込むチェックボックスですと、どうにも上手く動いてくれません。 丁寧に全部書いていけばいいのですが、行が沢山増えてしまい見にくいのと、数字の書き間違いが出たりして作業が煩瑣なので、 可能であればまとめて処理してしまいたいと考えています。 どうぞよろしくお願いいたします。

  • フォームのCheck boxとOLEObjectのCheckboxのマクロの違い?

    エクセル2003です。 ワークシート上に複数個のチェックボックスを配置し、オンの場合、その左隣のセルの値を返すマクロを作成する場合についての質問です。 普段はフォームのCheck boxを使っています。 フォームのCheck boxなら Sub ChkBx() With ActiveSheet.CheckBoxes(Application.Caller) If .Value = xlOn Then MsgBox .TopLeftCell.Offset(0, -1).Value End If End With End Sub と、標準モジュールに一つだけプロシージャを書いて、複数個のCheck boxに同一のマクロを登録すれば簡単に出来ます。 ところがこれをOLEObjectのCheckboxでやってみようと思ったところ、フォームのように一つのプロシージャを使いまわすことができず、シートモジュールに以下のように各Checkboxごとのマクロを書かなくてはいけないようです。 Private Sub CheckBox1_Click() With OLEObjects("CheckBox1") If .Object.Value Then MsgBox .TopLeftCell.Offset(0, -1).Value End If End With End Sub Private Sub CheckBox2_Click() With OLEObjects("CheckBox2") If .Object.Value Then MsgBox .TopLeftCell.Offset(0, -1).Value End If End With End Sub Private Sub CheckBox3_Click() With OLEObjects("CheckBox3") If .Object.Value Then MsgBox .TopLeftCell.Offset(0, -1).Value End If End With End Sub 3つや4つくらいならどうってことはないのですが十数個もあるとかなり面倒です。 OLEObjectのCheckboxでももっと簡単にする方法はないのでしょうか? それともわたしが何かOLEObjectのCheckboxの使い方について思い違いをしているのでしょうか? ご教示をお願いいたします。

専門家に質問してみよう