• ベストアンサー

シートのボタンからフォーム出した場合、チェックボタンの動作がうまくいきません

bonaronの回答

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.2

チェックボックスを使って、 オプションボタンと同様の動作を実現したい というところでしょうか? ExcelVBA は、あまり得意ではないのですが 力まかせにやってみました。 もっと良い方法があるかもしれません。 Private Sub UserForm_Initialize()   CheckBox1.Value = True   CheckBox2.Value = False End Sub Private Sub CheckBox1_AfterUpdate()   If Not Me.CheckBox1 Then     Me.CheckBox1 = True   Else     Me.CheckBox2 = False   End If End Sub Private Sub CheckBox2_AfterUpdate()   If Not Me.CheckBox1 Then     Me.CheckBox2 = True   Else     Me.CheckBox1 = False   End If End Sub

believe_me
質問者

お礼

回答ありがとうございます。 オプションボタンを使わなかったのは、添付写真には写っていませんがもう一組選択箇所があって、オプションボタンが使えないと思い、チェックボタンにしたわけです。 皆様のご指摘の後、調べた結果フレームを使えば何組でもオプションボタンを使えることが先ほどわかりました。 どうもお騒がせしました。

関連するQ&A

  • 複数のユーザーフォームをコマンドボタンにて表示・非表示させるには

    VBA勉強中のものです。 複数のユーザーフォームをコマンドボタンを使用して画面への表示切替を考えております。 例)ユーザーフォーム1,ユーザーフォーム2,ユーザーフォーム3のそれぞれにコマンドボタン1,コマンドボタン2,コマンドボタン3を作成し、   コマンドボタン1→ユーザーフォーム1を表示   コマンドボタン2→ユーザーフォーム2を表示   コマンドボタン3→ユーザーフォーム3を表示 とするようなことを考えおります。  そこで、下記のようにコードを作成したのでですが,一度表示させたユーザーフォームを再度表示させようとコマンドボタンをクリックしたら、「フォームはすでに表示させているのでモーダル表示はできません」とエラーがでてしまいます。   どなたか、どのようにしたらいいかご教授ねがいます。 サンプルコード) --------------------------------------------------- 'UserForm1のコード Private Sub CommandButton2_Click() Call UserForm2_show UserForm1.Hide End Sub Private Sub CommandButton3_Click() Call UserForm3_show UserForm1.Hide End Sub ---------------------------------------------------- 'UserForm2のコード Private Sub CommandButton1_Click() Call UserForm1_show UserForm2.Hide End Sub Private Sub CommandButton3_Click() Call UserForm3_show UserForm2.Hide End Sub ------------------------------------------------------- 'UserForm3のコード Private Sub CommandButton1_Click() Call UserForm1_show UserForm3.Hide End Sub Private Sub CommandButton2_Click() Call UserForm2_show UserForm3.Hide End Sub ------------------------------------------------------------ '標準モジュール コード Sub UserForm1_show() UserForm1.Show End Sub Sub UserForm2_show() UserForm2.Show End Sub Sub UserForm3_show() UserForm3.Show End Sub

  • エクセルのユーザーフォームでご教授ください

    マクロの知識はほぼなく、調べながらエクセルの入力用のユーザーフォームを作りましたが、うまく作動しません。 UserForm1 ~~~~~~~~~~~~~~~~~~~~~~~~~ Option Explicit Private Declare Function ReleaseCapture Lib "user32" _ () As Long Private Sub UserForm_Initialize() Me.Show End Sub Private Sub Button_cxl_Click() Me.Hide End Sub Private Sub ok_Click() Dim RowNum As Long Dim Ctrl As Control RowNum = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(RowNum, 1).Value = Me.txt_date Cells(RowNum, 2).Value = Me.txt_guest Cells(RowNum, 3).Value = Me.txt_person Cells(RowNum, 4).Value = Me.txt_begin Cells(RowNum, 5).Value = Me.txt_finish For Each Ctrl In Me.Controls If Ctrl.Name Like "txt*" Then Ctrl.Value = "" RowNum = 0 End If Next Ctrl Me.Hide ReleaseCapture UserForm2.Show vbModal End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~ UserForm2 ~~~~~~~~~~~~~~~~~~~~~~~~~ Option Explicit Private Declare Function ReleaseCapture Lib "user32" _ () As Long Private Sub UserForm_Initialize() End Sub Private Sub ButtonEnd_Click() Unload Me UserForm1.Hide End Sub Private Sub ButtonNext_Click() Unload Me ReleaseCapture UserForm1.Show vbModal End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~ Module1 ~~~~~~~~~~~~~~~~~~~~~~~~~ Sub ユーザーフォーム() UserForm1.Show End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~ UserForm1を開き、Button_cxlで閉じず、もう一度Button_cxlをクリックで閉じる。 UserForm1を開き、Button_okでUserForm2を出し、ButtonEndをクリックでUserForm1にもどる(1と2を数度行き来しても同じ) UserForm1を開き、Button_okでUserForm2を出しButtonNextをクリックでUserForm1にもどりButton_cxlをクリックで閉じず、もう一度クリックしても閉じず、三回目で閉じる。 現状、エクセルを開いた直後のみで発生してます。 一度ユーザーフォームを出し、閉じたあとは意図通り動き、再度エクセルを開くまで発生しません。 ちなみにUserForm2の Private Sub ButtonEnd_Click() Unload Me UserForm1.Hide End Sub 部分の、UserForm1.HideをUnload UserForm1にすると、「オブジェクト変数または With ブロック変数が設定されていません」と出てデバックでModule1の UserForm1.Show が黄色になります。 どこが悪いか教えてください。

  • コンボボックスとスピンボタン

    いつも勉強させていただいています。 ユーザーフォームにコンボボックスとスピンボタンを組み 日付の取得をしました。欲しいのは年と月だけです。(2001/11) どうしても日付を外すことが出来ません。宜しくお願いします。 Private Sub spnDate_SpinDown() Dim dtDate As Date dtDate = UserForm1.txtDate.Value UserForm1.txtDate.Value = DateAdd("m", -1, dtDate) End Sub Private Sub spnDate_SpinUp() Dim dtDate As Date dtDate = UserForm1.txtDate.Value UserForm1.txtDate.Value = DateAdd("m", 1, dtDate) End Sub Private Sub UserForm_Initialize() UserForm1.txtDate.Value = Date End Sub

  • ユーザーフォームの切り替えについて・・・

    UserForm1とUserForm2の2つのユーザーフォームがあります。 UserForm1の中にあるcommandButton1をクリックすると、UserForm2が表示される仕組みになっています。 (ちなみに、UserForm2にもコマンドボタンがあり、クリックするとUserForm1に戻るようになっています) UserForm1の方に、 Private Sub CommandButton1_Click() UserForm2.Show 0 Unload UserForm1 End Sub UserForm2の方に、 Private Sub CommandButton1_Click() UserForm1.Show 0 Unload UserForm2 End Sub と記述してあります。 ところが、それぞれのユーザーフォームには、閉じると同時にブックが閉じるように Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) ActiveWorkbook.Save 'ブックを保存 ActiveWorkbook.Close 'ブックを閉じる Application.Quit 'excelを終了 End If End Sub というコードを記述しているため、UserForm1からUserForm2へ移るときにブックが閉じてしまいます。 右上の「×」を押したときだけブックを閉じるようにしたいのですが、どういうコードを書いたらいいのですか? 宜しくお願いします。(*´Д`人)

  • エクセルVBAユーザーフォームの変数の設定方法について

    すいません、エクセルVBAのユーザーフォームの変数の設定方法について質問があります。 1 ユーザーフォームを2つ用意する。 2 それぞれにComboBox1をおく。 3 立ち上げたユーザーフォームについて、UserForm_InitializeでComboBox1に"a"のAddItemを作る。 この、「立ち上げたフォームのComboBox1に"a"のAddItemを作る」 という作業を各々のユーザーフォームに記載するのではなく、標準モジュールでまとめて記載する方法で躓いています。 Public m As String Private Sub UserForm_Initialize() ’フォーム1を立ち上げた場合   m = "UserForm1"   Call Test1(m) End Sub Private Sub UserForm_Initialize() ’フォーム2を立ち上げた場合   m = "UserForm2"   Call Test1(m) End Sub ↓ 標準モジュールに記載 Sub Test1(m As String) VBA.UserForms.Add(m).ComboBox1.AddItem "a" End Sub これだとUserForm_InitializeとTest1の間で無限ループが始まってしまい、うまく進んでくれません。 ヘルプを見ましたが、Add(変数)でユーザーフォームを変数で指定できるということ以上のことは発見できず行き詰っています。  それぞれのフォームに書けばいいだけの話なのかもしれませんが、メンテを考えると出来ればまとめて記述しておきたいと考えています。 解決方法がありましたらどうぞよろしくご教示願います。

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

  • なぜかフォームは上書きされません。

    こんにちは。 下記のようなフォームにボタンを追加し、セルにデータを書き込み、最後に上書きするマクロを作ってみました。 セルのデータは上書きされますが、なぜかフォームは上書きされません。フォームの表示で追加したボタンも表示されます。 どなたかご教示願います。 -------------------------------------------- Sub testVBA() Dim WOBJ As Object With UserForm1 Set WOBJ = .Controls.Add("Forms.CommandButton.1", "MyCom", True) End With Range("A1").Value = "aaaaaaaaaaa" ThisWorkbook.Save UserForm1.Show End Sub

  • ユーザーフォームで別シートを検索できますか

    現在エクセルのユーザーフォームを勉強中です。職員データとメモの二つのシートがあります。職員データシート上で職員コード番号で検索し検索画面を閉じるとデータを表示するユーザーフォームが表示されるように作成しました。ここまでは出来ました。これを、コード番号の検索でメモシートの職員番号も検索し該当する番号があれば行番号を取得(変数名:メモRow)無ければカーソルを最終行に移動。データ表示フォームに職員のデータとその職員のメモデータを表示するように、メモを書きたいときはメモ表示ボックスに記入。記入したデータをメモシートにも記入できるようにしたい。 出来ないこと (1)職員データシートの検索画面でメモシートを同時に検索したい (2)メモシートの行番号を変数に格納したい (3)該当番号がなければ最終行にカーソルを移動したい (4)職員データのフォームに記入したデータをメモシートに反映させたい わかる方どうぞ教えてください。 こんな風に作りました Private Sub 初期化_Click() Unload UserForm検索 UserForm検索.次へ.Enabled = False UserForm検索.Label1.Caption = "検索値を入れて検索ボタンを押してください。" UserForm検索.Show vbModeless End Sub Private Sub 検索_Click() Dim 検索値 As String '変数を宣言。 On Error GoTo errhandler 検索値 = TextBox1.Value If 検索値 = "" Then MsgBox "検索する語句を入れてください。" TextBox1.SetFocus 'TextBox1にカーソルを移動。 Else Cells.Find(What:=検索値, After:=ActiveCell, LookIn:=xlValues, LookAt:= _ xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False).Activate 検索.Enabled = False 次へ.Enabled = True Label1.Caption = "次をさがすには「次へ」ボタンを押してください。" 'Label1のメッセージを変える。 errhandler: ' Select Case Err.Number Case 91 MsgBox "その検索値は存在しません。" End Select ' End If End Sub Private Sub 次へ_Click() Cells.FindNext(After:=ActiveCell).Activate End Sub Private Sub 閉じる_Click() Unload Me DATA.Show End Sub 以上検索画面 ※別シートの検索は可能ですか? 以下は表示画面(DATA) Option Explicit Private myRow As Long Private Sub btm検索_Click() Unload Me 'DATAフォームを非表示に。 UserForm検索.Show '検索フォームを表示 End Sub Private Sub btm前_Click() '前へボタン myRow = myRow - 1 GetData End Sub Private Sub btnCancel_Click() '終了を確認する If MsgBox("終了しますか?", vbYesNo, "確認") = vbYes Then Unload Me End If End Sub Private Sub btn次_Click() '次へボタン myRow = myRow + 1 GetData End Sub ※以下はデータ表示コマンドが続きます最後に Me.tab3資格1.Value = ActiveSheet.Cells(myRow, 111).Value Me.tab3資格2.Value = ActiveSheet.Cells(myRow, 114).Value Me.tab4メモ.Value = Worksheets("メモ").Cells(メモRow, 3).Value                              ↑                  表示できない、具体的に行数を入れると表示する! End Sub ※変数:メモRowをどこで宣言すれば?

  • 続)ユーザーフォームにあるチェックボックスやオプションボタンなどの選択結果保存

     以前に,エクセルファイルを閉じても,再度ファイルを開いたときに,閉じる前のユーザーフォームにあるチェックボックスやオプションボタンなどの選択結果を再表示させる方法をお教えいただき,そのご指導のもとコントロールの状態を、シートに保存しておく方法で作業を進めていました。 しかし,次の2点の問題が新たに出てきました(><)。いろいろと自分なりに考えて見ましたが,解決できず再度投稿させていただきました。 問題1.ユーザーフォームに「ラベル」・「イメージ」・「マルチページ」等があると,エラーが発生します。 問題2.「コンボボックス」は,保存したコントロール状態は再表示するのですが,リストを読み込まず,コンボボックスでほかのものが選択できない事になってしまいます。 大変、恐縮なのですが、どなたか解決策をお教えください。 何卒、よろしくお願いいたします。 例)UserForm1にチェックボックス、オプションボタン、トグルボタン、テキストボックス、「ラベル」・「イメージ」・「マルチページ」「コンボボックス」を作る。SHEET2のセル(E1:E5)にコンボボックスのリストを作る。こうしたユーザーフォームの結果をフォームを閉じる時にシート(dataという名前をつけています)に保存し、フォームを開く時に、値を読み込みこませるようにしました。(、「ラベル」・「イメージ」・「マルチページ」「コンボボックス」を省くと以下のコードで問題なく作動します。) '☆標準モジュール Sub test() UserForm1.Show UserForm1.ComboBox1.List = Sheets("sheet2").range("E1:E5").Value End Sub '☆ UserForm1のモジュール Private Sub UserForm_Initialize() Dim srcRange As Range Dim myCell As Range Set srcRange = ThisWorkbook.Sheets("data").Range("A1").CurrentRegion For Each myCell In srcRange.Columns(1).Cells Me.Controls(myCell.Value).Value = myCell.Offset(0, 1).Value Next myCell End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) Dim myCtrl As Control Dim destRange As Range Set destRange = ThisWorkbook.Sheets("data").Range("A1") destRange.Parent.Cells.Clear For Each myCtrl In Me.Controls With destRange .Value = myCtrl.Name .Offset(0, 1).Value = myCtrl.Object.Value End With Set destRange = destRange.Offset(1, 0) Next myCtrl End Sub

  • エクセル VBAのチェックボックスについて

    お読みくださり、ありがとうございます。 エクセル初心者でございます。 エクセルのマクロなのですが、 お詳しい方、是非教えて欲しいです!汗 調子に乗って入力フォームなるものを作りました。 入力フォームの中にて、チェックボックスで「ある」「なし」の項目を入れてみたのですが、チェックしていないのに、値が入る現象が起きています汗 以下、素人が書いたコードを恥を承知で記載させていただきます。 Private Sub CheckBox1_Click() If CheckBox1.Value = True Then OK = "○" End If End Sub Private Sub CheckBox2_Click() If CheckBox2.Value = True Then NO = "×" End If End Sub Private Sub UserForm_Click() End Sub '以下のコードは、登録ボタンがクリックされたときの処理! Private Sub 登録ボタン_Click() If TextBox1.Text = "" Then MsgBox "グッズ名を入力してください。" Exit Sub End If If TextBox2.Text = "" Then MsgBox "アプローチ先を入力してください。" Exit Sub End If With Worksheets("協賛グッズ") With Cells(Rows.Count, 2).End(xlUp) .Offset(1, 0).Value = TextBox1.Text .Offset(1, 1).Value = mori .Offset(1, 2).Value = mori2 .Offset(1, 3).Value = TextBox2.Text .Offset(1, 5).Value = TextBox3.Text .Offset(1, 6).Value = TextBox4.Text .Offset(1, 7).Value = TextBox5.Text .Offset(1, 8).Value = TextBox6.Text End With End With TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox5.Text = "" TextBox6.Text = "" CheckBox1.Value = False CheckBox2.Value = False End Sub 以上です。 おかしなところ満載かと思いますが、 チェックを入れた項目だけ値を入れたいと考えております。 おわかりになるかたおりましたら何卒お助けください汗 よろしくお願いいたします。