[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『チェックボックスにチェックで印刷』(タマネギ)
別シートに各シートのリンクされたチェックボックスを
配置し配置したチェックボックスにチェックした
シートのみ印刷しなおかつ全て目的のページを
にチェックを入れたら別のマクロのボタンで
チェックされたシートを印刷しますとガイダンスが表示され
印刷終了でチェックしたチェックボックスのチェックが
消える
こんなのを作りたいのですが教えてもらえませんか?
よろしくお願いします
< 使用 Excel:Excel2003、使用 OS:WindowsXP >
>別シートに各シートのリンクされたチェックボックス
フォームコントロール、ActiveXコントロール どちらでも行けそうですがどっちで進めるんですか?
>こんなのを作りたいのですが教えてもらえませんか?
イチから丸投げされるのも大変なので、たたき台くらいは提示されたほうがいいんじゃないかとおもいます。
(もこな2) 2018/04/18(水) 12:09
コマンドボタンを配置して、コマンドボタンのマクロを以下のようにすれば 出来ると思います。
Private Sub CommandButton1_Click() If CheckBox1.Value = True Then 'Worksheets("Sheet1").PrintOut Worksheets("Sheet1").PrintPreview End If
If CheckBox2.Value = True Then Worksheets("Sheet2").PrintPreview End If
If CheckBox3.Value = True Then Worksheets("Sheet3").PrintPreview End If End Sub ここで探したのですがこんな感じです
エラーになってしまいます
(タマネギ) 2018/04/18(水) 15:47
ActiveXコントロールで作成してるとして、とりあえず拝見する限りはおかしなところはないようですが・・・
<確認した方がいいとおもうこと>
・シートモジュールに記述しているか。
・オブジェクトの名前は合っているのか。(そもそもオブジェクトをちゃんと設置しているのか)
・対象となるシートの名前は合っているのか
(もこな2) 2018/04/18(水) 17:12
[[20041227183457]]←参考にされたのはこちらですよね
2004年だから約14年前・・・
残念ながら私がVBAの勉強始めたの数年前なので、そもそも「コントロールツールボックス」っていうのが何かわからないです。
なんとなく、シート上に配置したコントロールをつかんでから、Valueを確認して対応するシートをプリントアウトするだけに思えたのですが、controls(オブジェクト名)ではつかめなかったので再考します・・・
(もこな2) 2018/04/18(水) 17:56
OLEObjectsのObject.Valueを見る必要があるみたいです。
なので、たとえばこんな感じならいけるとおもいます。
【※チェックボックス名とシートのインデックス番号を対応させたとして】
Private Sub CommandButton1_Click() Dim i As Long
For i = 1 To 3 If Me.OLEObjects("CheckBox" & i).Object.Value Then _ ThisWorkbook.Worksheets(i).PrintPreview Next i End Sub
(もこな2) 2018/04/18(水) 18:19
もこな2さん
PrintOutメソッドはどこへ行ったの?
>チェックされたシートを印刷しますとガイダンスが表示され
>印刷終了でチェックしたチェックボックスのチェックが
>消える
この部分はどうしたの?
>イチから丸投げされるのも大変なので、.....
と言っておきながら質問者の回答になっていないのでは?
(z) 2018/04/18(水) 22:04
う〜ん。そっか〜そうですね・・・
ちょっとアルコールが入ってしまったので、アタマが動いてないですが、こんな感じではどうですか。
Private Sub CommandButton1_Click() Dim i As Long Dim flag As Integer For i = 1 To 3 If Me.OLEObjects("CheckBox" & i).Object.Value Then With ThisWorkbook.Worksheets(i) flag = MsgBox("「" & .Name & "」シートを印刷してよろしいですか?", vbYesNo) If flag = 6 Then .PrintOut End With End If Next i End Sub
>zさんへ
確かに回答に不足があったのかもしれないけど、そう思うならケチつけるだけじゃなくて足りない思う部分を補足していただいてもいいんじゃないかとおもうんですが・・・
でないと単に喧嘩売りたい人にしか思えないです。(もっとも喧嘩買うほどのスキルもないので、ごめんなさいと言って逃げますけど・・・)
(もこな2) 2018/04/19(木) 00:14
質問を読み直したら、Excel2003なんですね。
手元にあるのが、Excel2007、職場にあるのがExcel2013なので、
そちらでしかわからないですが、シートに設置する(できる?)
ものに、フォームコントロール、ActiveXコントロールの
2種類があります。
私の説明は、ActiveXコントロールを設置した場合のものです。
(コードはシートモジュールに記述)
ただ、上記のように私は古いバージョンのExcelを持ってないので、
2003で同じようにActiveXコントロールが使えるかわかりません。
よって、別の回答者さんをお待ちください。
(もこな2) 2018/04/19(木) 07:07
逆に言うと現状はExcel2003でActiveXコントロールを使うことができないようなので、Excelのバージョンアップをしないなら、フォームコントロール?で処理する方法を考えないとダメみたいですね。
とりあえず、以下のような案はどうですか?
(1)制御用のシートをシートの最後(一番右)になるように追加。 (2)制御用のシートにチェックボックスをシートの数だけ用意(制御用シート分を除く) (3)チェックボックスを右クリックすると「コントロールの書式設定」というのがあるのでそれをクリック (4)表示されたダイアログのうち、「コントロール」タブにリンクするセルというのがあるので、以下のような感じでセットする 1つ目のチェックボックス・・・・$A$1 2つ目のチェックボックス・・・・$A$2 3つ目のチェックボックス・・・・$A$3 ・ ・ ・ (5)以下のコードを標準モジュールに記述。 Sub フォームコントール制御() Dim i As Integer Dim flag As Integer
With ActiveSheet For i = 1 To .Cells(.Rows.Count, "A").End(xlUp).Row If .Cells(i, "A").Value Then flag = MsgBox("「" & .Name & "」シートを印刷してよろしいですか?", vbYesNo) If flag = 6 Then Worksheets(i).PrintOut .Cells(i, "A").Value = "" End If End If Next i End With End Sub
(6)ボタンを配置して、(5)のマクロを登録する。
一応、Excel2013では動いたので、フォームコントロールの仕組みが一緒なら使えると思います。
これで無理なら私のスキルではこれ以上どうにもできないですね・・
他にもこの質問に関心がある回答者さんがいらっしゃるようなので私も一緒に勉強させていただきます。
(もこな2) 2018/04/19(木) 20:00
(タマネギ) 2018/04/19(木) 22:47
提案した方法が成功しているのであれば、1つ目のチェックボックスが1番目のシート、2つ目のチェックボックスが2番目のシートに対応してるから、”シートを指定”できるとおもうんですが・・・
>このコードはどんな仕組みなのですか?
そんなに難しいものを書いたとおもっていないのですが・・・
具体的にどこがわからないんですか?
>チェックボックスを目的のシートにリンクさせて印刷するのでしょうか?
上記のとおり、そうであるとも、そうではないとも言えるように思います。
厳密にいえばチェックを入れるとA列に「TRUE」と入り、
マクロはTRUEとなっている行の行番号に対応するシートを印刷してますよね。
(私の案がうまくいってるとして)
(もこな2) 2018/04/19(木) 23:41
まずは、提示の案で動いているのですか?
もう3回目になりますが、Excel2003を持っていないのでこちらではテストできないので
そもそも提案の方法が使えるか(使えているか)わからないです。
以降、提案した案で行けた場合の話です。
提示したコードは理解できてますか?
理解できていないのであれば、ステップ実行をしてどのようなことをやっているのか研究してみてください。
理解できているのであれば、対応させたくないシートに対応する行番号にリンクさせない(チェックボックスつくらない)か、B列にシート名を書いておいて、A列がTRUEなら、B列のシート名を参照して印刷するといったコードに改造すればよいんじゃないかとおもいます。
あとは、zさんをはじめ、他にもアイデアをお持ちの方がいるとおもうので、のんびりお待ちいただければよいかと。
(もこな2) 2018/04/20(金) 07:40
案1)
チェックボックスを別途用意しないでも、
Ctrlキーを押しながらマウスでシートタブを選択する
ではいけませんか?
案2)
チェックボックスではなく、
リストボックスを使ってはいかがでしょうか?
多分そちらの方がシートの増減に対応しやすいと思います。
(固定で変わらないなら、チェックボックスでいいとおもいます。
VBAを駆使すればチェックボックスでもシートの増減に対応できます。)
もこな2さんへ>
ActiveXコントロールは2000の時代からほぼ変わってないです、
ので、古風なデザインは昔ながらですし
(逆にそれが市販ソフトっぽい雰囲気が出るのはありますが、さすがに時代遅れ感が^^;)、
2003だからとか2000だからとかはあまり気にしなくていいと思います。
(なのでマウスホイールの操作に単純に対応できない><)
だれか、エクセルVBA用にフリーで作ってくれないかなぁ。。。^^;
(まっつわん) 2018/04/20(金) 08:23
'印刷ボタン押下でリストボックスで選択された名前のシートを印刷
Private Sub CommandButton1_Click()
Dim lstSNames As MSForms.ListBox Dim i As Long
Set lstSNames = Me.ListBox1 With ThisWorkbook.Worksheets For i = 0 To lstSNames.ListCount - 1 If lstSNames.Selected(i) Then On Error Resume Next .Item(lstSNames.List(i, 0)).PrintPreview '.Item(lstSNames.List(i, 0)).Printout On Error GoTo 0 End If lstSNames.Selected(i) = False Next End With End Sub
'リセットボタン押下でシート一覧をリセット
Private Sub CommandButton2_Click()
Dim ws As Worksheet Dim lstSNames As MSForms.ListBox
Set lstSNames = Me.ListBox1 With lstSNames .Clear For Each ws In ThisWorkbook.Worksheets If Not Me Is ws Then .AddItem ws.Name End If Next End With End Sub
'リセットボタン押下で一覧をリセット
Private Sub CommandButton2_Click()
Dim ws As Worksheet Dim lstSNames As MSForms.ListBox
Set lstSNames = Me.ListBox1 With lstSNames .Clear For Each ws In ThisWorkbook.Worksheets If Not Me Is ws Then .AddItem ws.Name End If Next End With End Sub
参考URL>>
http://www.eurus.dti.ne.jp/~Yoneyama/Excel/vba/vba_userform03b.html
(まっつわん) 2018/04/20(金) 09:11
〇フォームコントロール(標準モジュールに記述)
※印刷時は「'」削除、「PrintPreview」必要なければ先頭に「'」を付記
Sub チェック()
Dim Pri As Integer
Dim Pria As String
Worksheets("フォーム").Select
Select Case True
Case Range("A1").Value = True Pri = MsgBox("シート1を印刷してよろしいですか?", vbYesNo, "印刷") If Pri = vbYes Then Worksheets("Sheet1").PrintPreview 'Worksheets("Sheet1").PrintOut Worksheets("フォーム").Range("A1").Value = False Else Range("A1").Value = False End If Exit Sub Case Range("A2").Value = True Pri = MsgBox("シート2を印刷してよろしいですか?", vbYesNo, "印刷") If Pri = vbYes Then Worksheets("Sheet2").PrintPreview 'Worksheets("Sheet2").PrintOut Worksheets("フォーム").Range("A2").Value = False Else Range("A2").Value = False End If Exit Sub Case Range("A3").Value = True Pria = InputBox("シート名を入力してください", "シートの選択") If Pria = "" Then Range("A3").Value = False Else Range("A3").Value = False Worksheets(Pria).PrintPreview 'Worksheets(Pria).PrintOut Worksheets("フォーム").Range("A3").Value = False End If Exit Sub End Select End Sub
〇ActiveXコントロール(シートモジーュールに記述)
※印刷時は「'」削除、「PrintPreview」必要なければ先頭に「'」を付記
Private Sub CheckBox1_Click()
Dim Pri As Integer
If CheckBox1.Value = True Then Pri = MsgBox("シート1を印刷してよろしいですか?", vbYesNo, "印刷") If Pri = vbYes Then Worksheets("Sheet1").PrintPreview 'Worksheets("Sheet1").PrintOut CheckBox1.Value = False Exit Sub Else CheckBox1.Value = False End If End If End Sub
Private Sub CheckBox2_Click()
Dim Pri As Integer
If CheckBox2.Value = True Then Pri = MsgBox("シート2を印刷してよろしいですか?", vbYesNo, "印刷") If Pri = vbYes Then Worksheets("Sheet2").PrintPreview 'Worksheets("Sheet2").PrintOut CheckBox2.Value = False Exit Sub Else CheckBox2.Value = False End If End If End Sub
Private Sub CheckBox3_Click()
Dim Pria As String
If CheckBox3.Value = True Then Pria = InputBox("シート名を入力してください", "シートの選択") If Pria = "" Then CheckBox3.Value = False Else Worksheets(Pria).PrintPreview 'Worksheets(Pria).PrintOut CheckBox3.Value = False End If End If End Sub
(もこな2)さん
前回の発言で気分を悪くされたと痛感しており反省しております。すみませんでした。
ご指摘のように
>足りない思う部分を補足していただいてもいいんじゃないかとおもうんですが・・・
を忘れずに行動したいと思います。
(z) 2018/04/21(土) 17:54
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.