2016-08-17 8 views
0

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でコントロール名を動的に参照するにはどうすればよいですか?私は何が欠けていますか?

+0

「txtInput_PM_EN_DRAFT」とは何ですか?フォームかコントロールですか?サブフォームコントロールに含まれているフォームの名前である場合は、コントロールの名前を使用する必要があります。これは含まれているフォームの名前と異なる場合があります。 – HansUp

+0

フォーム上に直接存在するコントロールの名前です。サブフォームはありません。しかし、違いがある場合は、タブコントロールフォームの中にあります。 – rohrl77

+1

Accessには、フォームに 'txtInput_PM_EN_DRAF T'という名前のコントロールが含まれていないと考えられます。 Accessがフォームに含まれていると考えるコントロールの名前を調べることをお勧めします。フォームビューでフォームを開いた状態で、イミディエイトウィンドウで次のように1行として入力してください: 'Forms!YourFormNameHere.Controlsの各ctl:'? ctl.name:next' – HansUp

答えて

3

基本的なトラブルシューティングを追加する必要があると思います。答えはおそらくあなたが考えるよりも簡単です。名前の誤ったテキストボックスを検索しようとしているか、またはNull比較で失敗している可能性があります(@HansUpで提案されたように)

基本サブを変更してこのサブルーチンでテストします。コードが現在のフォームにあり、サブフォームを参照していない限り、メソッドは機能します。

Private Sub UpdatePMText(sLang As String) 

    Const ERR_MISSING_CONTROL As Long = 2465 

On Error GoTo Err_UpdatePMText 
    Dim sTextBox As String 

    sTextBox = "txtInput_PM_" & sLang & "_DRAFT" 

    'Check if there is text in the box. 
    If Nz(Me.Controls(sTextBox).Value, "") = "" Then 
     MsgBox ("There is no text in the " & sLang & " DRAFT Field." & vbNewLine & "The operation will not be executed.") 
     Exit Sub 
    End If 

    Exit Sub 

Err_UpdatePMText: 
    If Err.Number = ERR_MISSING_CONTROL Then 
     MsgBox "Error: No Such Textbox: " & sTextBox 
    Else 
     MsgBox "Error Looking Up Textbox: """ & sTextBox & """" & vbCrLf & Err.Description 
    End If 
End Sub 
+0

私はあなたのコードをエラー処理に使用しました。私も命名の問題を変更した後、完全に働いた。助けてくれてありがとう! – rohrl77

関連する問題