『印刷エラー』(エクセルおじさん) 以下のコードで印刷を行っていますが、チェックボックスを追加すると エラーとなります。 エラー回避の方法を教示願います。 Private Sub CommandButton2_Click() Dim i As Long, couni As Long With Worksheets("台紙") '印刷するシート名 For i = 0 To Me.Controls.Count - 1 If TypeName(Me.Controls(i)) = "CheckBox" Then If Me.Controls("CheckBox" & i + 1).Value = True Then If (couni Mod 2) <> 0 Then .Range("a6").Value = Me.Controls("CheckBox" & i + 1).Caption Else .Range("a6").Value = Me.Controls("CheckBox" & i + 1).Caption Me.Hide ActiveWindow.SelectedSheets.PrintOut Copies:=1 .Range("a6").ClearContents End If End If End If Next i If (couni Mod 2) <> 0 Then Me.Hide ActiveWindow.SelectedSheets.PrintOut Copies:=1 .Range("a6").ClearContents End If End With Unload Me End Sub 尚、エラーは、     If Me.Controls("CheckBox" & i + 1).Value = True Then で発生します。 今後、チェックボックスを10個程追加の予定です。 < 使用 Excel:Excel2010、使用 OS:Windows7 > ---- エラーメッセージを書いてもらえますか? (γ) 2015/05/23(土) 11:35 ---- γさんへ 早々の対応有難うございます。 エラーは、「指定されたオブジェクトは見つかりません」です。 宜しくお願いします。 (エクセルおじさん) 2015/05/23(土) 11:45 ---- ここを参考にするとよいです http://officetanaka.net/excel/vba/tips/tips44.htm (マナ) 2015/05/23(土) 11:48 ---- マナさんへ 参考にさせて頂いてますが、 私の技量では難しい状態です。 現在、印刷終了後にエラー表示です。 (エクセルおじさん) 2015/05/23(土) 12:49 ---- 現在のコードでいらなそうな部分を除いて これでは、どうなりますか? Private Sub CommandButton2_Click() Dim c As Control With Worksheets("台紙") '印刷するシート名 For Each c In Controls If TypeName(c) = "CheckBox" Then If c.Value = True Then .Range("a6").Value = c.Caption .PrintOut End If End If Next .Range("a6").ClearContents End With Unload Me End Sub (マナ) 2015/05/23(土) 13:54 ---- マナさんへ 思う通りに出来ました。 有難うございます。 済みませんが、後、1つ同様な内容をお伺いさせて下さい。 以下のコードで異常はなかったのですが、チェックボックスを 追加したら同様なエラーとなります。 対象せるが2つ(a6,a8)になった場合はどうなるでしょか。 Private Sub CommandButton1_Click() Dim i As Long, couni As Long With Worksheets("台紙") '印刷するシート名 For i = 0 To Me.Controls.Count - 1 If TypeName(Me.Controls(i)) = "CheckBox" Then If Me.Controls("CheckBox" & i + 1).Value = True Then 'ここでエラー couni = couni + 1 If (couni Mod 2) <> 0 Then .Range("a6").Value = Me.Controls("CheckBox" & i + 1).Caption Else .Range("a8").Value = Me.Controls("CheckBox" & i + 1).Caption Me.Hide ActiveWindow.SelectedSheets.PrintOut Copies:=1 .Range("a6,a8").ClearContents End If End If End If Next i If (couni Mod 2) <> 0 Then Me.Hide ActiveWindow.SelectedSheets.PrintOut Copies:=1 .Range("a6,a8").ClearContents End If End With Unload Me End Sub (エクセルおじさん) 2015/05/23(土) 14:22 ---- a6とa8をどういうルールで区別するか不明ですが? Private Sub CommandButton1_Click() Dim c As Control Dim v Dim n As String v = Array("CheckBox11", "CheckBox5", "CheckBox7") '★a6に転記するものを列挙 With Worksheets("台紙") '印刷するシート名 For Each c In Controls If TypeName(c) = "CheckBox" Then If c.Value = True Then n = c.Caption If IsNumeric(Application.Match(n, v, 0)) Then .Range("a6").Value = n Else .Range("a8").Value = n End If .PrintOut .Range("a6,a8").ClearContents End If End If Next End With Unload Me End Sub (マナ) 2015/05/23(土) 15:41 修正15:57 また修正20:01 ---- .Range("a6").ClearContents の位置を修正しました。 (マナ) 2015/05/23(土) 15:59 ---- 改めて見直すとSelect Caseの意味ありませんでした。 If IsNumeric(Application.Match(n, v, 0)) Then .Range("a6").Value = n Else .Range("a8").Value = n End If (マナ) 2015/05/23(土) 20:03 ---- マナさんへ ご教示誠に有難うございます。 現在、移動中で閲覧させて頂きました。 コードの試行は、明日になるかと思います。 a6とa8の区別の件ですが、 チェックボックスを23個設定しています。その中から 選択したチェックボックスのCaptionをa6とa8に入れて印刷することです。 例1: CheckBox1,CheckBox3,CheckBox6,CheckBox10,を選択した場合     a6に CheckBox1 a8にCheckBox3のCaptionを表示して印刷 次に     a6に CheckBox6 a8にCheckBox10のCaptionを表示して印刷する。 例2: CheckBox2,CheckBox3,CheckBox11,CheckBox20,,CheckBox23を選択した場合     a6に CheckBox2 a8にCheckBox3のCaptionを表示して印刷 次に     a6に CheckBox11 a8にCheckBox20のCaptionを表示して印刷 次に     a6に CheckBox23を表示して印刷する。  以上が目的としている動作です。 (エクセルおじさん) 2015/05/23(土) 22:44 ---- ならば、こんな感じですが、 今のコードの Controls("CheckBox" & i + 1) を Controls(i) にするだけでもよかったです。 Private Sub CommandButton1_Click() Dim c As Control Dim flg As Boolean Dim n As String With Worksheets("台紙") '印刷するシート名 For Each c In Controls If TypeName(c) = "CheckBox" Then If c.Value = True Then n = c.Caption If flg = False Then .Range("a6").Value = n flg = True Else .Range("a8").Value = n .PrintOut .Range("a6,a8").ClearContents flg = False End If End If End If Next If flg = True Then .PrintOut .Range("a6").ClearContents End If End With Unload Me End Sub (マナ) 2015/05/23(土) 23:41 ---- マナさんへ 只今、試行してみました。 目的としていた動作となりました。 誠に有難うございます。 今後、コードを読み解き 技量向上に努めたいと思います。 (エクセルおじさん) 2015/05/24(日) 05:06