[[20180418105502]] 『チェックボックスにチェックで印刷』(タマネギ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『チェックボックスにチェックで印刷』(タマネギ)

別シートに各シートのリンクされたチェックボックスを
配置し配置したチェックボックスにチェックした
シートのみ印刷しなおかつ全て目的のページを
にチェックを入れたら別のマクロのボタンで
チェックされたシートを印刷しますとガイダンスが表示され
印刷終了でチェックしたチェックボックスのチェックが
消える
こんなのを作りたいのですが教えてもらえませんか?
よろしくお願いします

< 使用 Excel:Excel2003、使用 OS:WindowsXP >


回答・・・でもないですがとりあえず。

>別シートに各シートのリンクされたチェックボックス
フォームコントロール、ActiveXコントロール どちらでも行けそうですがどっちで進めるんですか?

>こんなのを作りたいのですが教えてもらえませんか?
イチから丸投げされるのも大変なので、たたき台くらいは提示されたほうがいいんじゃないかとおもいます。
(もこな2) 2018/04/18(水) 12:09


コントロールツールボックスのチェックボックスを3個と、
 コマンドボタンを配置して、コマンドボタンのマクロを以下のようにすれば
 出来ると思います。

 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


>PrintOutメソッドはどこへ行ったの?
>「ガイダンスが表示され印刷終了でチェックしたチェックボックスのチェックが消える」この部分はどうしたの?
>質問者の回答になっていないのでは?

う〜ん。そっか〜そうですね・・・
ちょっとアルコールが入ってしまったので、アタマが動いてないですが、こんな感じではどうですか。

    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


おはようございます。
色々ありがとうございます
チェックボックスはシートに貼り付けるタイプ
しかしよくわかってないので
このコードの使い方が良くわかってないのですが
どのようにしたらよいのでしょうか?
よろしくお願いします
(タマネギ) 2018/04/19(木) 05:46

>チェックボックスはシートに貼り付けるタイプ
>しかしよくわかってないので
>このコードの使い方が良くわかってないのですが
>どのようにしたらよいのでしょうか?

質問を読み直したら、Excel2003なんですね。
手元にあるのが、Excel2007、職場にあるのがExcel2013なので、
そちらでしかわからないですが、シートに設置する(できる?)
ものに、フォームコントロール、ActiveXコントロールの
2種類があります。

私の説明は、ActiveXコントロールを設置した場合のものです。
(コードはシートモジュールに記述)

ただ、上記のように私は古いバージョンのExcelを持ってないので、
2003で同じようにActiveXコントロールが使えるかわかりません。

よって、別の回答者さんをお待ちください。
(もこな2) 2018/04/19(木) 07:07


追加で。
手空きのときにちょっと調べてみましたが、Excel2003で、ActiveXコントロールは使用可能”だった”ようです。
【参考】https://kokodane.com/macro18.htm

逆に言うと現状は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


>チェックボックスとコードを入れて動くのですが
>シートを指定して印刷できるのでしょうか?
えっと・・・質問が理解できません。
提案した案は成功したんですか?(繰り返しになりますが、Excel2003を持っていないのでこちらではテストできません)

提案した方法が成功しているのであれば、1つ目のチェックボックスが1番目のシート、2つ目のチェックボックスが2番目のシートに対応してるから、”シートを指定”できるとおもうんですが・・・

>このコードはどんな仕組みなのですか?
そんなに難しいものを書いたとおもっていないのですが・・・
具体的にどこがわからないんですか?

>チェックボックスを目的のシートにリンクさせて印刷するのでしょうか?
上記のとおり、そうであるとも、そうではないとも言えるように思います。
厳密にいえばチェックを入れるとA列に「TRUE」と入り、
マクロはTRUEとなっている行の行番号に対応するシートを印刷してますよね。
(私の案がうまくいってるとして)

(もこな2) 2018/04/19(木) 23:41


おはようございます
複数のシートがあり印刷したくないシートが
存在すると印刷シートを指定出来ないと言う
ことでしょうか?
一個目チェックボックスは必ずシート1二つ目の
チェックボックスはシート2を印刷する
印刷したくないシートはチェックボックスを存在させて
どこかに隠すしかないと言うことですか?
よろしくお願いします。
(タマネギ) 2018/04/20(金) 07:18

なるほど・・・・そういうことですか。

まずは、提示の案で動いているのですか?
もう3回目になりますが、Excel2003を持っていないのでこちらではテストできないので
そもそも提案の方法が使えるか(使えているか)わからないです。

以降、提案した案で行けた場合の話です。

提示したコードは理解できてますか?
理解できていないのであれば、ステップ実行をしてどのようなことをやっているのか研究してみてください。
理解できているのであれば、対応させたくないシートに対応する行番号にリンクさせない(チェックボックスつくらない)か、B列にシート名を書いておいて、A列がTRUEなら、B列のシート名を参照して印刷するといったコードに改造すればよいんじゃないかとおもいます。

あとは、zさんをはじめ、他にもアイデアをお持ちの方がいるとおもうので、のんびりお待ちいただければよいかと。
(もこな2) 2018/04/20(金) 07:40


ありがとうございました
色々試して理解していきます。
(タマネギ) 2018/04/20(金) 07:55

んと、遅ればせながら、

案1)
チェックボックスを別途用意しないでも、
Ctrlキーを押しながらマウスでシートタブを選択する
ではいけませんか?

案2)
チェックボックスではなく、
リストボックスを使ってはいかがでしょうか?
多分そちらの方がシートの増減に対応しやすいと思います。
(固定で変わらないなら、チェックボックスでいいとおもいます。
VBAを駆使すればチェックボックスでもシートの増減に対応できます。)

もこな2さんへ>
ActiveXコントロールは2000の時代からほぼ変わってないです、
ので、古風なデザインは昔ながらですし
(逆にそれが市販ソフトっぽい雰囲気が出るのはありますが、さすがに時代遅れ感が^^;)、
2003だからとか2000だからとかはあまり気にしなくていいと思います。
(なのでマウスホイールの操作に単純に対応できない><)
だれか、エクセルVBA用にフリーで作ってくれないかなぁ。。。^^;

(まっつわん) 2018/04/20(金) 08:23


Option Explicit

'印刷ボタン押下でリストボックスで選択された名前のシートを印刷
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


あ、リンク先に書いてありますが、
リストボックスのプロパティを
MultiSelect → fmMultiSelectSingle
ListStyle → fmListStyleOption
にセットしておいてください。
(まっつわん) 2018/04/20(金) 09:15

>別シートに各シートのリンクされたチェックボックスを配置
〇別シートとしてここではシート名を「フォーム」としています。
 リンクはしていません。目的のシートを呼び出すようにしています。
>なおかつ全て目的のページをにチェックを入れたら
〇シート名(目的のページ)分だけチェックボックスを配置しているのですか?
>チェックボックスはシートに貼り付けるタイプしかしよくわかってないので
〇フォームコントロール、ActiveXコントロールのどちらなのかわからないので
 両方提示しておきます。どちらも3個配置してください。
 ・フォームコントロールは、セルとリンクさせて使用するので状況判断用のセルが必要。
 チェックありの時は「TRUET(真)」チェツクなしの時は「FALSE(偽)」となる
 (もこな2)さん 2018/04/19(木) 20:00 を参照。
 フォントサイズは変更できない。右クリックで容易に変更できるので場合によってはシートを保護する必要がある。
 ・ActiveXコントロールは「TRUET(真)」、「FALSE(偽)」の値が習得できる。
 デザインモードを「ON」にして右クリックでプロパティを選択するとプロパティウィンドウ現れる。
 ここで外観デザインができる。「OFF」にするとロック状態になり変更できない。
>複数のシートがあり印刷したくないシートが
存在すると印刷シートを指定出来ないと言うことでしょうか?
〇そういう事はありません。ここでは「CheckBox3」で印刷シートを指定出来ます。
> 一個目チェックボックスは必ずシート1二つ目のチェックボックスはシート2を印刷する
〇ここではそれぞれ「CheckBox1→シート1」「CheckBox2→シート2」としています。  
>印刷したくないシートはチェックボックスを存在させてどこかに隠すしかないと言うことですか?
〇これは全く必要ありません。

〇フォームコントロール(標準モジュールに記述)
 ※印刷時は「'」削除、「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.