Hallo,
ich glaube, dass ich nur ein Formatfehler habe, komme aber trotz Suchen nicht weiter...
Wie kann ich ein Formularfeld dynamisch ansprechen? Mit Screen.PreviousControl.Name bekomme ich den Namen. Jetzt möchte ich prüfen ob das Feld Leer ist.
Bekomme aber eine Syntax-Fehlermeldung:
Dim InField As String
InField = Screen.PreviousControl.Name
If Not IstLeer((InField).Value) Then MsgBox "füllen"
Besten Dank!
Christoph
Zitat von: cyberchris am Februar 16, 2017, 12:03:10Dim InField As String
InField = Screen.PreviousControl.Name
If Not IstLeer((InField).Value) Then MsgBox "füllen"
Der
Name ist reiner Text (String) und hat keine Eigenschaften. Du kannst direkt das Steuerelement selbst als Objektvariable referenzieren.
Dim InField As Control
Set InField = Screen.PreviousControl
If Not IstLeer(InField.Value) Then MsgBox "füllen"Achtung: PreviousControl könnte evtl. in manchen Fällen
Nothing sein.
Hallo,
--
IstLeer() gibt es in VBA nicht, dort lautet die Funktion IsNull() (außer die Funktion ist als benutzerdefiniert erstellt worden).
--
ZitatWie kann ich ein Formularfeld dynamisch ansprechen?
Was meinst Du mit "dynamisch" ? Ein Formularfeld (Steuerelemenet) wird einfach durch/mit seinem Namen "angesprochen": Msgbox Me!
MeinTextfeld--
ZitatJetzt möchte ich prüfen ob das Feld Leer ist.
Ein Feld prüft man auf Plausibilität,
-- bevor der Fokus das Steuerelement verläßt: MeinTextfeld_Exít(...), bzw. MeinTextfeld_Lostfocus()), ( als einzige Maßnahme nicht empfohlen)
-- bevor der Datensatz in die Tabelle abgelegt (gespeichert) wird: Form_BeforeUpdate(...)
Screen.PreviousControl.Name bringt lediglich den Namen des Controls, das vorher den Fokus hatte und ist damit nicht klar bestimmt zum aktuellen Zeitpunkt.
@Franz,
Zitat(außer die Funktion ist als benutzerdefiniert erstellt worden).
die Funktion stammt vermutlich aus dem DBWiki:
http://dbwiki.net/wiki/VBA_Tipp:_Funktion_zum_Pr%C3%BCfen,_ob_ein_Textfeld_leer_ist (http://dbwiki.net/wiki/VBA_Tipp:_Funktion_zum_Pr%C3%BCfen,_ob_ein_Textfeld_leer_ist)
Gruß
Josef
Guten Morgen,
ja, ISTLEER ist eine benutzerdefinierte Funktion.
Ziel ist es, wenn ich auf ein Button drücke, soll das letzte aktive Feld ermittelt werden, in das ich dann per VBA was reinschreiben lassen möchte.
Daher Screen.PreviousControl.Name, damit ich den Namen bekomme.
Nur bekomme ich es eben nicht hin das letzte aktive Feld anzusprechen.
Gruß Christoph
Hallo,
ich kann immer noch nicht verstehen, wozu da PreviousControl verwendet werden soll.. Das ist doch fehlerträchtig bis völlig in die Luft geschossen.
Hast Du meine Hinweise nicht gelesen?
Erklär mal den kompletten Zusammenhang..
ZitatZiel ist es, wenn ich auf ein Button drücke, soll das letzte aktive Feld ermittelt werden, in das ich dann per VBA was reinschreiben lassen möchte.
Du solltest auch in Betracht ziehen, dass der Buttonklick als erste Maßnahme im Formular erfolgt, es also im Formular gar kein vorheriges aktives Steuerelement geben könnte.
Was User irgendwie tun können, das tun sie auch.
Der Name wäre doch nur von Interesse, wenn Du auf ein ganz bestimmtes Steuerelement aus bist. Das Reinschreiben (ohne den tieferen Sinn zu hinterfragen) könnte im Prinzip so erfolgen.
Private Sub DeinKnopf_Click()
On Error Resume Next
With Screen.PreviousControl
If IsNull(.Value) Then .Value = "Foo Bar"
End With
If Err Then MsgBox "Bitte vor Knopfdruck ein unausgefülltes Textfeldsteuerelement auswählen."
End Sub
Hallo,
Beim formular öffnen wird der Focus auf ein feld gesetzt. Daher geht da nix schief.
Zum anderen möchte ich damit ein sonderzeichen in das Feld hineinbekommen.
Hat für mich also alles einen Sinn.
Vielen Dank für eure Hilfen, aber wenn ihr die Hintergründe nicht kennt, könnt ihr auch nicht bewerten ob das Sinn macht oder nicht.
Gruß Christoph
Statt den Fokus zu setzen, geht doch auch die direkte Zuweisung - oder verstehe ich den Zusammenhang nicht?Private Sub DeinKnopf_Click()
If IsNull(Me.Textfeldname) Then Me.Textfeldname = "Foo Bar"
End Sub
Hallo Christoph,
Zitataber wenn ihr die Hintergründe nicht kennt
Und du sie konsequent nicht offen legst :(
Trotzdem hast du doch zwei Lösungen erhalten, wobei die letzte von Lachtaube
wohl, so oder so, die sicherste sein wird.
Dein eigener, ursprünglich geposteter, Code würde mit folgender Korrektur
allerdings auch funzen.
Dim InField As String
InField = Screen.PreviousControl.Name
If Not IstLeer(Me.Controls(InField).Value) Then MsgBox "füllen"gruss ekkehard
Vielen Dank ekkehard!
So funzt es.
Es ist nicht immer so einfach den kompletten Zusammenhang kurz und knapp zu erklären.
Schönen Abend
Christoph