MS Accessフォームオブジェクトに次のコードがあります。MS Accessでコントロール名を動的に参照する方法
Private Sub UpdatePMText(sLang As String)
'Used to pass both Mandate and Language Info to called Sub that will execute the queries
Dim iMandate As Integer
'Check if there is text in the box.
If Me.Controls("txtInput_PM_" & sLang & "_DRAFT") = Null Or Me.Controls("txtInput_PM_" & sLang & "_DRAFT") = "" Then
MsgBox ("There is no text in the " & sLang & " DRAFT Field." & vbNewLine & "The operation will not be executed.")
Exit Sub
End If
iMandate = Me.txtMandateID
Call modUpdateText.macro_PMText(iMandate, sLang)
End Sub
私が直接コントロールを参照し、単に例txtInput_PM_EN_DRAFT
ために、フォームの名前を入力すると意図したとおりに、コードが動作します。
エラーメッセージは、私が最初のIF
ステートメント行にいるときに参照している「フィールド」が見つからないということです。私は.Controls
を.Fields
に変更しようとしましたが、それもうまくいきませんでした。
実行する必要があるすべての言語で同じコードを繰り返すことは望ましくありません。 MS Accessでコントロール名を動的に参照するにはどうすればよいですか?私は何が欠けていますか?
「txtInput_PM_EN_DRAFT」とは何ですか?フォームかコントロールですか?サブフォームコントロールに含まれているフォームの名前である場合は、コントロールの名前を使用する必要があります。これは含まれているフォームの名前と異なる場合があります。 – HansUp
フォーム上に直接存在するコントロールの名前です。サブフォームはありません。しかし、違いがある場合は、タブコントロールフォームの中にあります。 – rohrl77
Accessには、フォームに 'txtInput_PM_EN_DRAF T'という名前のコントロールが含まれていないと考えられます。 Accessがフォームに含まれていると考えるコントロールの名前を調べることをお勧めします。フォームビューでフォームを開いた状態で、イミディエイトウィンドウで次のように1行として入力してください: 'Forms!YourFormNameHere.Controlsの各ctl:'? ctl.name:next' – HansUp