• 締切済み

VBAにてフォームコントロールの変更

VBAでフォームコントロールのチェックボックスのON・OFFを変更することは可能でしょうか。 具体的にはA.xlsmのマクロを実行して、 A.xlsmのセルA1が0ならB.xlsの"チェック 1"がOFF状態に。1ならON状態になる。 以上のような仕組みを作りたいです。 (フォームコントロールなのは様式(B.xls)がフォームコントールで作成されており、変更不可のため) ですが、同じシート内でもチェックボックスのON・OFFができずに挫折しそうです。 まずは同一シート内で作ってみようと思い下記コードを作成したのですが、 ”SubまたはFunctionが定義されていません”となってしまいます。 Public Sub test() If Range("A1") = 0 Then CheckBoxes("チェック 1").Value = False ElseIf Range("A1") = 1 Then CheckBoxes("チェック 1").Value = True Else MsgBox "無効な値が設定されています" End If End Sub エラーは”CheckBoxes”のところで出てしまいます。 どなたかご教授ねがいます。

みんなの回答

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.2

2003だとエラーは出ずに正常に動きました。 以下のコードにしてみたらかがでしょうか Shapes("Check Box 1").ControlFormat.Value = 1 TrueだとエラーでFalseはOkでした。

-ales-
質問者

お礼

ありがとうございます。 いろいろやってみたら下記のコードでできました。 Public Sub test() If Range("A1") = 0 Then With ActiveSheet.CheckBoxes("チェック 1") .Value = xlOff End With ElseIf Range("A1") = 1 Then With ActiveSheet.CheckBoxes("チェック 1") .Value = xlOn End With Else MsgBox "無効な値が設定されています" End If End Sub

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> エラーは”CheckBoxes”のところで出てしまいます。 いつから複数形で記述することになったのかな? CheckBox("チェック 1").Value = False と単数形に書き替えたらどうなりますか?

-ales-
質問者

お礼

ありがとうございます。 いろいろ調べたら下記のコードでできました Public Sub test() If Range("A1") = 0 Then With ActiveSheet.CheckBoxes("チェック 1") .Value = xlOff End With ElseIf Range("A1") = 1 Then With ActiveSheet.CheckBoxes("チェック 1") .Value = xlOn End With Else MsgBox "無効な値が設定されています" End If End Sub

関連するQ&A

  • エクセルVBAで2種類のCheckboxについて

    ワークシート上に配置したチェックボックスですが、 フォームから挿入したものなら Sub TEST01() ActiveSheet.CheckBoxes.Value = xlOn End Sub で、全てのチェックボックスがオンになります。 コントロールツールボックスから貼り付けたチェックボックスの場合はどのように記述するのでしょうか?

  • Excel フォームコントロール オプション

    いつもお世話になってます。 ActiveXのOptionButtonやChekcBoxは複製Windowでは働かないので、フォームコントールを使おうと思います(フォームコントロールは動作します)。 例えばVBAなら,次のようにすればCheckBox2はoffになります。 これをフォームコントロールのチェック(ボックス)でやりたいのですが? Sub CheckBox1_Click() If CheckBox1.Value = True Then CheckBox2.Value = False" End Sub

  • フォームの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の使い方について思い違いをしているのでしょうか? ご教示をお願いいたします。

  • ダブルクリック・右クリックの操作方法

    勤務表作成してます。 A1に「ON・OFF」を表示します。 「ON」のときに、ダブルクリックで、上のセルを表示、右クリックで「1」を表示します。 「OFF」のときは、コンテキストメニュ-(通常の操作)が出来るようにしたいのですが、ON.OFFの切り替え操作のVBAがわかりません。 よろしくお願いします。 Option Explicit Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) ActiveCell = ActiveCell.Offset(-1, 0).Value If Target = Range("$A$1") Then Cancel = True If Range("$A$1").Value = "イベントON" Then Range("$A$1").Value = "イベントOFF" Else Range("$A$1").Value = "イベントON" End If If Range("$A$1").Value = "イベントOFF" Then Exit Sub End If End If End Sub Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) ActiveCell = "1" ' If Target = Range("$A$1") Then ' Cancel = True ' ' If Range("$A$1").Value = "イベントON" Then ' Range("$A$1").Value = "イベントOFF" ' Else ' Range("$A$1").Value = "イベントON" ' End If If Range("$A$1").Value = "イベントOFF" Then Exit Sub End If End Sub

  • 右クリック、ダブルクリックの操作

    勤務表作成してます。 A1に「ON・OFF」を表示します。 「ON」のときに、ダブルクリックで、上のセルを表示、右クリックで「1」を表示します。 「OFF」のときは、コンテキストメニュ-(通常の操作)が出来るようにしたいのですが、ON.OFFの切り替え操作のVBAがわかりません。 よろしくお願いします。 Option Explicit Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) ' ActiveCell = ActiveCell.Offset(-1, 0).Value ' ' If Target = Range("$A$1") Then ' Cancel = True If Range("$A$1").Value = "イベントON" Then Range("$A$1").Value = "イベントOFF" Else Range("$A$1").Value = "イベントON" ActiveCell = ActiveCell.Offset(-1, 0).Value Exit Sub End If Cancel = True If Range("$A$1").Value = "イベントOFF" Then Exit Sub End If End Sub Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) 'ActiveCell = "1" ' If Target = Range("$A$1") Then ' Cancel = True ' If Range("$A$1").Value = "イベントON" Then ' Range("$A$1").Value = "イベントOFF" If Range("$A$1").Value = "イベントON" Then ActiveCell = "1" Else: Range("$A$1").Value = "イベントOFF" Exit Sub End If Cancel = True If Range("$A$1").Value = "イベントOFF" Then Exit Sub End If End Sub

  • 条件判定について

    下記のようなコードを作成しましたが、チェックボックスがオンでもオフでもTextBox4.Valueの値が返ります。どこがいけないでしょうか。 Private Sub CommandButton2_Click() If CheckBox1.Visible = True Then Worksheets("sheet1").Range("a1") = TextBox4.Value Else Worksheets("sheet1").Range("a1") = TextBox3.Value End If End Sub

  • EXCEL2010 VBAのチェックマーク作成方法

    いつもお世話になります。 エクセルでチェックマークをつける際に、フォームコントロールやActiveXコントロールのチェックボックスを利用していました。 しかし、このたび、すべての色を青色でつくらなくてはいけなくなりました。 フォームコントロールのチェックボックスでは、文字も枠もチェックマークも黒色しかできません。 ActiveXコントロールのチェックボックスでは、文字の色こそ変えることができましたが、枠とチェックマークの色を変えることはできませんでした。 そこで、チェックマークさえできてしまえば、枠は図形で、文字はテキストボックス、もしくはセル内に入力というやり方ができるのでいろいろと探してみました。 結果、以下のサイトを発見し、試してみました。 http://okwave.jp/qa/q5678741.html 一部抜粋 ---------------------------------------------------------------------------------- Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("A1:A10")) Is Nothing = False Then Cancel = True If Target.Value = ChrW(10003) Then Target.ClearContents Else Target.Value = ChrW(10003) End If End If End Sub ---------------------------------------------------------------------------------- 上記でチェックマークの色の変更と、ONとOFFができるようになったのですが、EXCELデータ作成の都合上、どうしてもセルの結合内にチェックマークをつくらなければなりません。 上記では、セルが結合されていなければうまくいくのですが、セルが結合されていると下記のエラーが出てしまいます。 ------------------- 実行時エラー '13': 型が一致しません。 ------------------- そこで、セルの結合をメインにgoogleで調べたところ以下のサイトを発見しました。 http://okwave.jp/qa/q3155117.html 以下の内容を踏まえて、下記のように変更してみました ---------------------------------------------------------------------------------------- Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("A1:A10")) Is Nothing = False Then Cancel = True If Target.Text = ChrW(10003) Then Target.ClearContents Else Target = ChrW(10003) End If End If End Sub -------------------------------------------------------------------------------------- 結果、セルが結合されていてもチェックマークをつけることはできました。 けれど、チェックマークがついたセルを、もう一度ダブルクリックしてもチェックマークが外れてくれません。 結合されていないセルでは、チェックマークをつけたりはずしたりができます。 そこで、もう一度googleでいろいろと調べてみたのですが、どうしても解決できませんでした。 現段階では、チェックマークのONはできるけど、OFFにはできないという一方通行の状態なので 結合セル内でもチェックマークをOFFにできるようにしたいです。 皆さまに教えていただけますと幸いです。 どうか、よろしく願いいたします。

  • エクセルのフォームのVBAについて

    VBAがまったくわからないのに参考書を見て高度な事に挑戦しています フォームは作れてフォームをクリックやら入力やらして作ったOKボタンを押すと シート2のA1B1C1‥の列に入力文字だけが羅列されます。 しかし次にやろうとするとA2B2C2‥と下に行かず又A1B1C1‥の列の文字が変更になり続きません。何がいけないのでしょうか? Sub 入力() Dim LastRow As Long With Worksheets("sheet2") LastRow = Worksheets("sheet2").Range("A" & Rows.Count).End(xlUp).Row .Range("A" & LastRow).Value = Worksheets("sheet1").Range("A5").Value .Range("B" & LastRow).Value = Worksheets("sheet1").Range("A7").Value .Range("C" & LastRow).Value = Worksheets("sheet1").Range("A8").Value .Range("D" & LastRow).Value = Worksheets("sheet1").Range("A10").Value End With End Sub と参考書とおりいれたのですが‥。教えて下さい。

  • VBA

    下記に、ツールバーにある印刷ボタンを押すとチェックBOXがチェックされていない時印刷できないようにするというVBAですが下のVBAのような感じで 例えばセルA1にFALSEという文字が入っていたら印刷不可で印刷するかしないかを選択。もし、セルA1にTRUEという文字が入っていたら印刷可。 というのをVBA教えて下さい。 よろしくお願いします。 Private Sub Workbook_BeforePrint(Cancel As Boolean)   With Worksheets("sheet1").CheckBoxes("チェック 1")     If .Value <> 1 Then      If MsgBox("印刷しますか?", vbYesNo) <> 6 Then Cancel = True      End If     End With End Sub

  • エクセル2003(VBA)で違うフォームのチェックボックス配列を繰り返し処理したい

    エクセル2003(VBA)で違うフォームのチェックボックス配列を 元に順番に繰り返し処理したいのですが、うまくいきません。 どうかお知恵をお貸し下さい。 よろしくお願いします。 ■<ユーザーフォーム1>(本体フォーム) Private Sub CommandButton1_Click() UserForm2.Show Dim n As Integer Dim ender As Integer ender = 1 i = 1 For n = 1 To 20 If i > 4 Then i = 1 '4を超えたら1に戻る If cb(i).Value = False Then 'チェックがなかったら飛ばす i = i + 1 '次の配列へ n = n - 1 'ループ回数をカウントしないように1引く Else Worksheets("sheet1").Cells(ender, 5).Select Worksheets("sheet1").Cells(ender, 5) = "■" & cb(i).Caption & " = " & cb(i).Value ender = ender + 1 i = i + 1 End If Next n End Sub ■<ユーザーフォーム2>(チェックボックスフォーム) Private Sub CommandButton1_Click() Const cb_num = 4 'チェックボックスを4個に設定 Dim cb(cb_num) As Control Dim ctrl As Control Dim i As Integer i = 0 For Each ctrl In Me.Controls 'コントロールの数だけループする If TypeName(ctrl) = "CheckBox" Then 'タイプがチェックボックスなら i = i + 1 If i > cb_num Then Exit For 'チェックボックスの数を超えたコントロールは無視 Set cb(i) = ctrl 'コントロールを配列に代入 End If Next ctrl End Sub

専門家に質問してみよう