Access VBAでテキストボックスの値をオプションボタンに反映させる方法

このQ&Aのポイント
  • Access VBAでテキストボックスの値をオプションボタンに反映させる方法について質問です。
  • テキストボックス1に入力された文字列を選択されているオプションボタンのキャプションと合わせて、テキストボックス2に反映させる方法を教えてください。
  • VBA初心者のため、詳細なコードの見本や説明を教えていただけると助かります。
回答を見る
  • ベストアンサー

access vba プロシージャの呼び出し

access vba についての質問です。 フォームにテキストボックスが二つあるのに対して、 オプションボタンが三つあります。(グループです) テキストボックス1に文字列を入力し、コマンドボタンを押すと 選択されているオプションボタンのcaptionをテキストボックス1の文字列と合わせる形でテキストボックス2に反映させたいです。 コマンドボタンのクリックで以上の動きをするfunctionプロシージャを呼び出したいのですが、呼び出す側プロシージャと呼び出される側プロシージャの変数の設定がわかりません。 超初心者のため初歩的、かつ説明がわかりづらくて恐縮ですが、理解のため省略などをしない形でコードの見本等お教え願えませんでしょうか。 よろしくおねがいします。

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

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは まずは、コマンドボタンを右クリックしてイベントのビルドでコードビルダーを 表示して、 Private Sub コマンド1_Click()   Dim s As String   Select Case Me.フレーム1.Value     Case 1: s = Me.ラベル2.Caption     Case 2: s = Me.ラベル4.Caption     Case 3: s = Me.ラベル6.Caption   End Select   Me.テキスト2.Value = Me.テキスト1.Value & s End Sub みたいにしてはどうですか? コマンド1とか、フレーム1とか、ラベル2とかはそれぞれ実際の環境に 合わせて変更して下さい。 あまり最初から高度なコードを書こうとせずに 少しずつ動くコードが書けるようにしていくといいと思います。

nanamizuki77
質問者

補足

ushi2015様 回答ありがとうございます。 実は、まったくの素人が入社して一週間でやっている課題です。 オプションcaptionの反映機能はコマンド1で呼び出して使わないといけません。回答の方法だと、「s」にcase「1」が入ってしまいます。 呼ぶときに「フレームの中で選ばれたオプションのcaption」のような指定は出来ないのでしょうか。。 ほんと頓珍漢な事を言ってしまっているのでしょうね、、ごめんなさい。

その他の回答 (3)

回答No.4

Private Function TestFunction(ByVal strText1 As String, _               ByVal strText2 As String) As String 【訂正】 ByVal 宣言が欠落していました。

回答No.3

Option Compare Database Option Explicit Private Sub コマンド1_Click()   Dim strText1 As String   Dim strText2 As String      If Len(Me.テキスト1 & "") > 0 Then     strText1 = Me.テキスト1     strText2 = Me.Controls("オプションラベル" & Me.フレーム1.Value).Caption     Me.テキスト2 = TestFunction(strText1, strText2)   End If End Sub Private Function TestFunction(ByVal strText1 As String, strText2 As String) As String   TestFunction = strText1 & strText2 End Function >functionプロシージャを呼び出したい! 上述のコードでは Me.テキスト2 = TestFunction(strText1, strText2) という形で呼び出しています。でも Me.テキスト2 = strText1 & strText2 と書けば事足ります。 【オプションラベル名の付け方】 オプションラベル1 オプションラベル2 オプションラベル3 としておけば Me.Controls("オプションラベル" & Me.フレーム1.Value).Caption 該当するオプションのCaptionを取得することができます。

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

いまエクセル環境しか使えないのですが、やってみた UserForm1にテキストボックス2つ Frame1つ  その中にOPTボタン3つ  配置 ーー OPTボタン3つのCaptionは Lサイズ Mサイズ Sサイズ ーー Private Sub CommandButton1_Click() For i = 1 To Frame1.Controls.Count If Frame1.Controls(i - 1).Value = True Then op = Frame1.Controls(i - 1).Caption End If Next TextBox2.Text = TextBox1 & op End Sub ーー TextBox1に「スカート」と入力、 「Sサイズ」のOPTボタンをクリック、 コマンドボタンをクリック。 Textbox2に「スカートSサイズ」と入りました。 ーー アクセスでも似たようなコードでできませんかね。 -- 心配事2つ ・この後どうしようというのか? なぜfunctionプロシージャを使わないといけないのか。 ーー ・>テキストボックス1の文字列と合わせる形で に、こういう方法が本当に良いのか(個人的に素人っぽいニオイがする)、本当は、VBAコードを聞くのではなく、その前に、こういうコーナーでは、識者に設計仕様を聞いてみるのがよいのでは? そのためには直面しているシチュエーションを文章で表現できなければならず、 業務関連を他人に伺わせたくないのかな。

nanamizuki77
質問者

補足

imogasi様。 回答ありがとうございます。 「自分で調べろ」方式の会社で、何の説明もないままコードを書かされているので、素人も素人、中国語の部屋状態です。 さらに言うと、今回の課題は ・テキストボックス1には特定の記号しか入力できない(入力規制) ・コマンドボタン1では、テキストボックス1と2をつなげる動作のみ(入力規制とオプションの反映は呼び出して使う) というものです。

関連するQ&A

  • Access2010 VBAで文字を数える

    あるデータベースのフォーム内で、テキストボックス内に記載のある任意の文字列の数を数えて変数に格納したいと考えています。 そして、コマンドボタンを押したときに、メッセージボックスで「○件選択しています。」のように表示されるようにしたいと考えています。 色々と検索してみて以下のような記述をしたのですがうまく動いてくれませんでした。(「コンパイルエラー: SubまたはFunctionが定義されていません。」と表示されます。) Dim A As Integer A = Len([txtbox]) - Len(SUBSTITUTE([txtbox], ","))   MsgBox(A & "件の選択しています。") なお、テキストボックス、コマンドボタンは同一のフォーム内においてあります。 また、テキストボックス内で検索したい文字は半角カンマです。 詳しい方がおりましたら、どうぞご教示ください。

  • VBAのプロシージャのことで

    TEST1のプロシージャ内に使用している readfileという変数の中にテストという文字列を代入し、 文字列が代入された状態で Callによって別のプロシージャを読みにいったとき TEST(変数)に入った文字列ごと持っていくには どの様に記述すればよいかどなたか教えていただけませんでしょうか・・・。。 ----------------------------------------------------------- Sub TEST () Dim readfile As String readfile = "テスト" Call TEST2 End Sub ----------------------------------------------------------- Sub TEST2() readfile ←テストという文字列をTESTプロシージャから持ってきたい End Sub ----------------------------------------------------------- 単純に書いてみたコードですが、この様なことは可能なのでしょうか? すいませんがいただけないでしょうか><;

  • VBA Functionプロシージャで複数の値を

    エクセルでVBAのFunctionプロシージャについて複数の値を戻り値として 受け取る方法を考えています。 下記のようなサンプルプログラムを作りました。 --------------------------------------------------------------------------------- Option Explicit Private Sub CommandButton1_Click() Dim kekka(3) As Double Dim txt As String txt = "12.12A,34.34B,56.56C,78.78D" kekka(0) = test(txt) End Sub Public Function test(ByVal text As String) As Double Dim txt_kakou(3) As String '## 渡された「txt = "12.12A,34.34B,56.56C,78.78D"」を加工し、数値のみを取り出し '## 下記のように配列txt_kakou(3)に振り分ける '## 加工方法は割愛 txt_kakou(0) = 12.12 txt_kakou(1) = 34.34 txt_kakou(2) = 56.56 txt_kakou(3) = 78.78 'string型からdouble型に変換する。 txt_kakou(0) = CDbl(txt_kakou(0)) txt_kakou(1) = CDbl(txt_kakou(1)) txt_kakou(2) = CDbl(txt_kakou(2)) txt_kakou(3) = CDbl(txt_kakou(3)) test = txt_kakou() End Function ----------------------------------------------------------------------------------- まず、呼び出し側のプロシージャでkekka(3)という配列を宣言します。 次に変数txtに「"12.12A,34.34B,56.56C,78.78D"」の文字列を代入します。 そして変数txtをFunctionプロシージャに投げます。 Functionプロシージャでは、受け取った「"12.12A,34.34B,56.56C,78.78D"」 を数値のみに分解し、4つの変数に代入します。 この4つの変数も配列で用意し、txt_kakou(3)とします。 このtxt_kakou(3)を呼び出し元に返し、呼び出しもとの変数kekka(3)に入れたいのです。 また、はじめ変数txtに代入される値は文字列ですが、この文字列をFunctionプロシージャで分解し、 分解した値は、最終的には数値として扱いたいので、途中でdouble型に変換しています。 これを実行すると、Functionプロシージャの最後のtest = txt_kakou()で、型が一致しません といわれてしまいます。 どのように書き直せばいいのでしょうか。 よろしくお願いします。

  • ACCESS フォームについて

    お世話になっております。 ACCESSのフォームについてのご質問ですが、 2つのフォーム『fm_A』と『fm_B』があり、 fm_A・・・テキストボックス・コマンドボタン fm_B・・・テキストボックス・コマンドボタン グローバル変数一つ があります。 fm_Aのコマンドボタンをクリックすると、fm_Bが開き、fm_Bが開いているときはfm_Aに戻れなくしようとしております。 fm_Bのテキストボックスへ文字をいれ、fm_Bのコマンドボタンをクリックするとグローバル変数へその内容を保存。 保存後fm_Bが閉じてそのグローバル変数をfm_Aのテキストボックスへ入れる。 上記の作業をしようとおもったのですが、どうすればいいのかわかりません。 VB6の場合はform.showを使ってオプションで固定を使えば出来たのですが・・・ よろしくお願いします。

  • アクセスvba [イベント プロシージャ]つけたい

    もうフォームモジュールにイベントは出来上がってるのですが コントロールの名前を変更したため デザインビューのプロパティの[イベント プロシージャ]と言う文字が消えてしまいました。 フォーム上の全てのコマンドボタンのクリック時に [イベント プロシージャ]と言う文字を入れたいのですが そのような作業は可能でしょうか? [イベント プロシージャ]と言う文字が入れば、該当のイベントは既にモジュールにある為 イベントとして機能します。

  • access2000でカレンダーコントロールをいろいろな場面で

    access2000で1つのカレンダーコントロールをいろいろな(複数の)場面で利用したいと思います。 カレンダーコントロールを置いたフォームは作成しました。→「カレンダーフォーム」 カレンダーフォームで取得した値をテキストボックスに戻すプロシージャも作成し、うまくいっています。 しかし、特定のテキストボックスに対してしか機能しません。 1つのカレンダーフォームで、複数のテキストボックスに入力させるプロシージャを教えてください。 カレンダーフォームの起動は、sample1_frm上のコマンドボタン1、コマンドボタン2やsample2_frm上のコマンドボタン1、コマンドボタン2を押すと起動するようにしたいと思います。 sample1_frm上のテキストボックス1(横にコマンドボタン1)やテキストボックス2(横にコマンドボタン2)があるので、それに対応したテキストボックスにカレンダーコントロールで取得した値を代入する方式です。 どのように1つのカレンダーフォームで各フォーム、テキストボックスに対応したコードを書けばよいでしょうか?

  • VBAのユーザーフォーム・・

    教えてください。 ユーザーフォームのテキストボックス・コンボボックスに入力した文字列をコマンドボタンを押したら、セルC1・B1に反映させたいのですが、できません。 このコマンドボタンには他のプログラムも入っており、同時にプログラムを実行したいのですが。

  • VB.NETの関数プロシージャの書き方を教えてください。

    Public A As String という変数にある文字列データが入っていて、 ボタンを押すとその時に変数X,Y,Zに入っている 文字列を検索してButton1_Clickプロシージャ内に戻って来て KekkaX,KekkaY,KekkaZに数値が入るような関数プロシージャなのですが、 呼び出す部分の書き方と関数のプロシージャ名の書き方を教えて頂きたいです。 検索する部分は自分で出来ると思うので大丈夫です。 Public A As String = "何かの文字列" Button1_Click Dim X,Y,Z As String Dim KekkaX,KekkaY,KekkaZ as Integer '変数Aの中からX,Y,Zを検索したい X="*****" Y="ABCDE" Z="#####" GetKensakuKekka(????????) ←この部分の書き方を教えて下さい。 'KekkaX,KekkaY,KekkaZ 内に検索結果を取得したい Console.WriteLine(KekkaX) Console.WriteLine(KekkaY) Console.WriteLine(KekkaZ) End Sub Function GetKensakuKekka (???????????) ←この部分の書き方を教えて下さい。 ・ ・ ・ End Function よろしくお願い致します。

  • テキストボックスに入力してフィルタできるボタン

    access2000です。 フォームで テキストボックスに文字列を入れると商品フィールドと完全一致するデータだけ表示するボタンを付けたくなりました。 テキスト5 というテキストボックスをつけ コマンドボタンを貼り付け コマンドボタンのプロパティからイベントプロシージャーから Me.filter="商品='" & textテキスト5 & "'" を貼り付ければいいと考えましたが、うまくいきません。 手持ちの書籍ではMe.filterの解説がないので手探りでやっています。 どうすればいいのでしょうか? お願い致します。

  • (アクセス)全てのイベントプロシージャが無反応に

    何らかの原因でプロシージャやコマンドボタンに設定したマクロ等が無反応になる現象に苦慮しています。 多くのフォームの中で、この現象に関連するフォームは2画面あり、それぞれをフォームA、フォームBということで説明いたします。((1)~(4)) (1)フォームAのコマンドボタン押下でフォームBを開きクエリーのデータ(フォームAで指定した条件)  を表示しています。  フォームBで他のフォームと異なっているプロパティは次の通りです。  ・ポップアップ ----はい  ・作業ウィンド固定 --はい (2)フォームBにはレコードソース(クエリ)の値を表示する幾つかのテキストボックスとコンボボックス  が2つあり、それぞれをコンボA、コンボBとするとフォームBを開いた時はそれぞれにクエリーの   データを表示し、変更する場合はコンボAで選定した条件でクエリによりコンボBにデータを表示す  るようにしています。 (3)なお、コンボAの列数は2で、コンボボックスには列1のデータ(商品名)を表示するようしていて列 2の値(商品コード)を一旦テキストボックスに取り出し、そのコードでクエリによりコンボBのデータ  を表示しています。テキストボックスのプロパティのコントロールソースには次のように記述していま す。   =コンボ186.column(1)   ※=コンボ186がコンボAのことです (4)あと、フォームBにはデータをチェックするためのイベントプロシージャが幾つかとフォームAへ戻る ためのコマンドボタンがありますが他のフォームと比べても特に問題は無いように思えます。 以上のような環境でフォームAからフォームBを開いた時に、フォームBにはレコードソースであるクエリの値は全て表示するものの全てのイベントプロシージャ及び(3)で説明しました  =コンボ186.column(1) の処理が一切動作しなくなります。 しかし、次の操作により回復し、その後はACCESSを終了し再起動しても正常に動作します。  ・フォームBをデザインビューで開く  ・フォームBを開く時に設定しているイベントプロシージャを表示  ・イベントプロシージャをいじって閉じる。(内容は変更しない)  ・フォームBをホームビューで開く   だらだらと長くなり説明も不十分かと思いますが、原因がどうしてもわからなく困っております。 何か手がかりを教えて頂けたらと思い投稿しました。 よろしくお願いいたします。