Wie zu Referenz-Steuerelement-Namen dynamisch in MS Access

Ich habe den folgenden code in eine MS-Access-Form-Objekt.

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

Wenn ich beziehen sich auf die Bedienelemente direkt und einfach geben Sie die Namen der Formulare, zum Beispiel txtInput_PM_EN_DRAFT dann der code wie gewünscht funktioniert.

Die Fehlermeldung die ich bekomme ist, dass der Zugang nicht finden können, die "Feld" - ich beziehe mich auf wenn ich am ersten IF statement line. Ich habe versucht, die änderung der .Controls zu .Fields aber das hat nicht funktioniert entweder.

Möchte ich nicht wiederholen Sie den gleichen code für jede Sprache, die ich brauche zu laufen. Wie kann ich die Verweis-Steuerelement-Namen dynamisch in MS Access? Was bin ich?

  • Was ist txtInput_PM_EN_DRAFT? Ist es eine form oder ein Steuerelement? Wenn Sie den Namen einer form, die sich in einem Unterformular-Steuerelement, die Sie verwenden müssen den Namen des Steuerelements ... die können anders sein als der name der form, die es enthält.
  • Es ist der name des Steuerelements, das ist direkt auf dem Formular. Es gibt keine Unterformulare. Es ist jedoch innerhalb eines registersteuerelements form, ob das einen Unterschied macht.
  • Es scheint, Zugriff glaubt, dass die form nicht enthält ein Steuerelement namens txtInput_PM_EN_DRAF‌​T. Ich schlage vor, Sie untersuchen die Namen der controls, die den Zugriff denkt, die das Formular enthält. Mit Ihr Formular in der Formularansicht geöffnet ist, versuchen Sie dies als eine einzige Zeile in das Direktfenster ein: for each ctl in Forms!YourFormNameHere.Controls : ? ctl.name : next
  • Später müssen Sie ändern, Ihren code, denn nichts ist jemals gleich Null, nicht einmal eine andere Null. Aber das ist nicht die Ursache des Problems, das Sie jetzt gegenüber.
  • Kannst du bitte ein Beispiel geben von dem, was sein kann, Wert von sLang und einige von den Namen der Steuerelemente in Ihrem Formular. Stellen Sie sicher, dass die Zeichenfolge "txtInput_PM_" & sLang & "_DRAFT" macht ein Steuerelement, das ist genau dort auf dem Formular-Steuerelement-Namen sind nicht case sensitive, das bitte beachten. Also ich denke, die control-Namen txtInput_PM_EN_DRAFT. Um diese situation zu behandeln, wenn das Steuerelement nicht vorhanden ist, auf die form, @dbmitch hatte vorgeschlagen, die Fehlerbehandlung, die pop-up-Meldung, die eine solche Kontrolle nicht vorhanden ist.
  • Sie hatten Recht, es war ein Schreibfehler in einer der Formen. Ich habe auch NULL Problem. Danke für Sie Hilfe!

InformationsquelleAutor rohrl77 | 2016-08-17
Schreibe einen Kommentar