こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

投稿日時 - 2009-01-18 12:49:14

QNo.4639817

すぐに回答ほしいです

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

こんばんは。

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

投稿日時 - 2009-01-18 19:01:45

お礼

2年もかかるんですか・・・(~_~;)
10年以上前にマクロを習ったのですが、もうずっと使っておらず
ど素人の状態になってしまいました。
慌てて過去の本を読んだのですが、ユーザフォームにチェックボックスを配置し、
そこから印刷できるのが載っておらず、悩んでしまいました。

最近の本を読んでもチェックボックスから印刷するパターンが
見当たらず、慌てて教えてgooに登録して投稿した次第です。
Wendy02さん、marbinさんには、私の説明がかなり分かりずらかったと
思いますが、すぐの投稿で感謝しています。
ありがとうございます。

また本のご紹介、サンプルありがとうございます!!!
これを機会に勉強しようと思います。

サンプルはこれからじっくり見て、意味を理解したいと思います。
今の私のレベルじゃ完璧無理なので、上司には明日謝ろうと思います。
本当にありがとうございました。

投稿日時 - 2009-01-18 21:35:04

ANo.5

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

こんにちは。

最初に、ご質問の内容は、読み手には正しく伝わっていないようです。サンプルをお示しになっていますが、それ自体を良く理解されていないようで、そのサンプルをベースにしても、ご自身の希望とは、実際はかなり違いがあるはずです。

そのサンプルを調べてみましたが、「1999.11.15」となっていますね。その内容は、Excel 97時代後だと思います。Excel 2000 の出回った頃には、もう、そのような書き方のコードは出なかったと思います。当時は、それでよかったのだろうと思います。

Webサイトからの引用:
>「Private Sub CommandButton1_Click()」の中で、印刷範囲を設定してから印刷指示するように変更すれば、上手くいくと思います。

その文章からでは、著者は学習者に意図する内容が伝わっていないし、どう加工しても、まともに印刷の結びつけるような内容にはなっていないように思います。そのサンプルの内容で、印刷に結びつけるというには唐突です。

最大の問題点は、「チェックボックス」から、という部分です。チェックボックスは、複数を入れることができます。もし、「チェックボックス」のままで、複数の範囲を印刷するなら、臨時のシートが必要になります。

もし、UserForm で印刷範囲を選びたいのでしたら、オプションボタンの方がよいし、UnLoad Me は、しないほうがよいかもしれません。

それから、これを言うのは心苦しいのですが、VBAを覚えるなら、教本を換えたほうがよいです。ある程度、Microsoft のサポートのサンプル・コードなどに準じているものを選んでください。

投稿日時 - 2009-01-18 17:09:37

お礼

お手数おかけします。サンプルみて下さり、ありがとうございます。

私の会計例では、3つしか表示していないのですが、
実際は20個程あり、何個か選択して印刷したいのです。
なので、オプションでなくチェックボックスにしてあります。
考え方がおかしいような気がしていたので、ありがとうございます。

そうですね。Microsoftのサンプルコードを使います。
違う方法を考えてみます。お手数おかけしました。

投稿日時 - 2009-01-18 17:21:53

ANo.3

意味がよくわかりません。

>チェックボックスを選択しても印刷が大量にでてきて、

なにかが大量に印刷されるのでしょうか?
印刷するようなコードは見当たりませんが・・・。

>変数「会計・タイトル」指定してあります。
コードの中には何も変数宣言されてませんが・・・。

投稿日時 - 2009-01-18 15:14:01

補足

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

あと、そもそもこの考え方はあっているのでしょうか?
ど素人で本当に申し訳ございません。

投稿日時 - 2009-01-18 15:51:10

ANo.2

> If UserForm1.CheckBox1.Value = True Then

「ユーザーフォーム1のチェックボックス1にチェックが入っていたら」
という意味になります。

投稿日時 - 2009-01-18 13:27:23

補足

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

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

投稿日時 - 2009-01-18 13:33:47

ANo.1

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

投稿日時 - 2009-01-18 12:57:58

補足

お早いお返事ありがとうございます。
当方ど素人で、意味が分からないかもしれませんが宜しくお願い致します。

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

投稿日時 - 2009-01-18 13:13:12

あなたにオススメの質問