• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBA 赤ペン先生をお願いします)

エクセルVBAでのコード修正についての質問

このQ&Aのポイント
  • エクセルVBAでユーザーフォームを作成しているが、動作が思うようにならない。
  • 「作成書類を選択して下さい」というメッセージが表示される条件が正しくない。
  • 「処理を続行しますのキャンセル」を押してもユーザーフォーム5に戻らず、ユーザーフォーム4に進んでしまう。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

その後考えて、2つ目のユーザーフォームを追加してみます。 コントロールの数やCaptionなどは、質問者の要求に比べて少なく、私の勝手にした例ですが、参考にして得るところがあれば使ってください。 処理推移は 1。UserForm1に一度選択入力する 。「次へ」でUserForm2を表示。 2。Userform2にUserform1の選択を引き継ぐ。 3.UserForm2をみて,「Ok」か「やり直し」の選択をする。 4.「OK」の場合、エクセルシートでの処理条件として使うための、   Sheet1のA1,B1に2種類の情報をセットする。 5. 「やり直し」の場合、UserForm1を表示。ただし当初選択の痕跡は消す。 ーーー 前回答に加えて UserForm2を追加(VBEのメニューでは挿入)します。 UserForm2にテキストボックスを2つ設けます。 またコマンドボタンを2つ設けます。 2つのボタンのCaptionは、それぞれ「OK」と「やり直し」にします。 ーー 「OK」のボタンのクリックに対しては Private Sub CommandButton1_Click() Worksheets("Sheet1").Range("A1") = TextBox1.Text Worksheets("Sheet1").Range("B1") = TextBox2.Text UserForm2.Hide UserForm1.Hide End Sub ーー 「やり直し」ボタンに対しては Private Sub CommandButton2_Click() UserForm2.Hide '-- Dim Ctrl As Control For Each Ctrl In UserForm1.Controls If TypeName(Ctrl) = "OptionButton" Then _ Ctrl.Value = False Next Ctrl End Sub のコードを作成します。 ーーー UserForm1については、前回答とほぼ同じですが、少し変えて 各オプションボタンのプロパティのTagプロパティの行に テキストで設定します。そのテキストは選択された後で、どれを選択したかの点で使いたい文字列を設定します。 (Captionでも済むのかもしれません) Private Sub CommandButton1_Click() For Each x In UserForm1.Controls If InStr(x.Caption, "Option") Then If x.GroupName = "g1" Then If x.Value = True Then ' MsgBox x.Caption ' x1 = X.Caption x1 = x.Tag End If End If If x.GroupName = "g2" Then If x.Value = True Then 'MsgBox x.Caption 'MsgBox x 'x2 = X.Caption x2 = x.Tag End If

harumama0430
質問者

お礼

imogasiさん 私の下手な説明を汲み取っていただきありがとうございました。 言葉の説明をしていただいたので初心者の私には大変分かりやすく ありがたかったです。 今は自分でも何をどうしたら良いか分かっていないようなレベルですので 少しずつレベルアップして せめて質問くらいはまともに書けるようにならないと・・と痛感しました。 imogasiさんにいただいたご回答を元にここ2日間ひたすら挑戦して やりたかった事が出来ました。 2回もご回答をいただけて本当に感謝しています。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

ここはコードを添削するコーナ、ーではなかろう。 やりたいことを分割し整理して疑問点を絞ること。 質問を文章で簡潔に述べること。 ーーー 参考までに UserForm1を設ける。 Frame1とFrame2をUserForm1に設ける。 Frame1にはOptionボタンを3つ、Frame2には2つ設ける(数は勝手に減らした。コードはあまり変わらないはず) Frame1のOptionボタンにはそれぞれ、GroupNameにはg1、Frame2のOptionボタンにはそれぞれGroupNameにはg2を設定しておく(各Optionボタンのプロパティウインドウズのところで入力)。 UserForm1にコマンドボタンを1つ設ける。Captionを「次へ」にする。 Private Sub CommandButton1_Click() For Each x In UserForm1.Controls If InStr(x.Caption, "Option") Then If x.GroupName = "g1" Then If x.Value = True Then MsgBox x.Caption x1 = x.Caption End If End If If x.GroupName = "g2" Then If x.Value = True Then MsgBox x.Caption X2 = x.Caption End If End If End If Next MsgBox x1 & " " & X2 End Sub ーー これでユーザーフォrムの表示(実行)で Frame1に1つ、Frame2に1つクリックして「次へ」ボタンをクリックすると、 上記ではX1とX2に、2分野の要求が入る。 このX1,X2を以下で使ってみては。 コントロールの数などは簡略にしたが、上記でしたいことはできているのではとおもう。 ーー 1度選択したものを、それをキャンセルして再試行(再要求)する部分は質問者がまず考えること。 初心者であるならUserFormのコントロールやShowやHideやUnloadなどに凝る力はないだろう。 ワークシートのセルを使う方法を考えるべきだろう。

  • kamikami30
  • ベストアンサー率24% (812/3335)
回答No.1

赤ペン先生ですか。 まず、VBとVBAは違う Excelと書いているくらいですから、Excel(マクロ)の方がカテゴリは近いです。 技術者向なのに、初心者です 間違っているのはこのあたりですかね。

harumama0430
質問者

お礼

スイマセン、出直します。