Microsoft Access VBAでコントロールの名前として変数を使用できますか

私はアドレスを検索するために使用するMicrosoft Accessポップアップフォームを持っています。ユーザが郵便番号を見つけたら、アドレスは、それが発射されたフォーム上の様々なテキストボックスに入れられる。問題は、このポップアップフォームがデータベース全体のさまざまなフォームから起動されるため、結果を格納するテキストボックスが異なる場所にあることです。

私はこれを次のようにして回避しようとしました。私はいつも開いているスイッチボードを持っているので、私はそこにプログラム上、私はポップアップフォームを起動しているフォームの名前を置く隠されたテキストボックスを持っています。私はこのようにこの隠しテキストボックスの現在の値に設定されている文字列変数を宣言します:

Dim currentForm As String
currentForm = [Forms]![foo]![bar]

私は次に、適切なテキストボックスに住所の詳細を入れようとしました。

Forms!currentForm![txtCurrentAdd1] = rst![Line1]

しかし、これは計画どおりに動作していない、私は間違って何ですか?

ありがとう

4
@Remouはいあなたは正しい
追加された 著者 JMK,
現在のフォームを取得するには、 Me だけを使用してください!
追加された 著者 Patrick Honorez,
私はHeisenburgが書かれているフォームを意味するのに対して、現在のフォーム内でのみ動作する@iDevelopをyesno?
追加された 著者 Fionnuala,

4 答え

次のような他のフォームのコントロールにアクセスすることができます:

Dim FormName As String
Dim ControlName As String

FormName = "YourForm"
ControlName = "YourTextbox"

Forms(FormName).Controls(ControlName) = "New Value"
5
追加された

どちらか:

Dim currentFまたはm As String
''Not sure where the two parts are coming from
''but you cannot have them like that
currentFまたはm = "foobar"

Fまたはms(currentFまたはm).[txtCurrentAdd1] = rst![Line1]

または

Dim currentFまたはm As Fまたはm
Set currentFまたはm = Fまたはms![foobar]

currentFまたはm![txtCurrentAdd1] = rst![Line1]

あなたはバング対ドットを読みたいかもしれません。

あなたのことを心配してください、上流に泳いでいるように全体が少し見えます。

5
追加された
助けてくれてありがとう、私はバング対ドットで読むのポイントを作るでしょう。
追加された 著者 JMK,
Phoogにもあなたのコメントを投票しました、説明してくれてありがとう=)
追加された 著者 JMK,
2番目の例は、 Set currentForm = Forms![foobar] でなければなりません。また、私が正しく理解している場合、 "2つの部分"はフォームとテキストボックスです。正しい答えは Forms(Forms!foo!bar)!txtCurrentAdd1 = rst!Line1 (またはいくつかの変形構文です)
追加された 著者 phoog,
なぜバーはテキストボックスではないと思いますか? OPは、フォームの名前を保持している隠しテキストボックスで、テキストボックス(txtCurrentAdd1)を保持していて、データを追加していることを示しています。
追加された 著者 phoog,
.....ありがとう:)
追加された 著者 phoog,
@phhog、私はsetconctionを受け入れますが、私が参照している2番目の部分は、テキストボックスにすることはできません - opはform!foo!barとし、textboxを参照し、barはtextboxではなく、 。
追加された 著者 Fionnuala,
さて、私はその行を逃した。
追加された 著者 Fionnuala,
...そしてあなたのコメントを投票するのを忘れた@phoog :)
追加された 著者 Fionnuala,

また、OpenArgsプロパティを使用することもできます。再利用可能なポップアップを開くには、以下を使用します。

DoCmd.OpenForm FormName:="frmPopup", OpenArgs:=Me.Name

発信者の名前を渡すために。

frmPopupでは、その情報を得るために Me.OpenArgs を参照することができます。

1
追加された

私はこれが古い投稿だと知っていますが、これは新しい読者にとって役に立ちます。私がモジュールとフォームの間で変数を渡す問題を回避する簡単な方法は、VBAレジストリ領域を使用することです。それは非常にシンプルで使いやすいテクニックであり、プロジェクトをすばらしく清潔に保ちます。

値を保存するには:

SaveSetting AppName, Section, Key, Setting

値を取得するには:

GetSetting AppName, Section, Key, [Default]

これにより、変数の追跡が失われたり、フォームに隠れたコントロールが作成されたりすることがなくなります。また、PCとMac上で変更なしにクロスプラットフォームで動作します。

私は通常、プロジェクトの最初の3つのパラメータを定義する定数の負荷を設定します:

Public Const REG_PROD = "My product name"
Public Const REG_CONFIG = "Configuration"
Public Const REG_SETTING1 = "My Setting 1"

したがって、上記の呼び出しは次のようになります。

値を保存するには:

SaveSetting REG_PROD, REG_CONFIG, REG_SETTING1, "My Value"

値を取得するには:

GetSetting REG_PROD, REG_CONFIG, REG_SETTING1, "Value not set"

私は隠されたコントロールメソッドを使用していましたが、多くの管理が追加され、デバッグの目的でRegEditのインスタンスを開いたままにすることはできますが、常に変数の値にすることはできません。

1
追加された