Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: cyberchris am Februar 16, 2017, 12:03:10

Titel: Formularfeld dynamisch über String ansprechen
Beitrag von: cyberchris am Februar 16, 2017, 12:03:10
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
Titel: Re: Formularfeld dynamisch über String ansprechen
Beitrag von: PhilS am Februar 16, 2017, 12:16:52
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.
Titel: Re: Formularfeld dynamisch über String ansprechen
Beitrag von: DF6GL am Februar 16, 2017, 14:15:01
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.
Titel: Re: Formularfeld dynamisch über String ansprechen
Beitrag von: Joss am Februar 16, 2017, 14:33:23
@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
Titel: Re: Formularfeld dynamisch über String ansprechen
Beitrag von: cyberchris am Februar 18, 2017, 07:14:44
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
Titel: Re: Formularfeld dynamisch über String ansprechen
Beitrag von: DF6GL am Februar 18, 2017, 09:05:57
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..
Titel: Re: Formularfeld dynamisch über String ansprechen
Beitrag von: ebs17 am Februar 18, 2017, 10:23:02
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.
Titel: Re: Formularfeld dynamisch über String ansprechen
Beitrag von: Lachtaube am Februar 18, 2017, 10:29:00
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
Titel: Re: Formularfeld dynamisch über String ansprechen
Beitrag von: cyberchris am Februar 18, 2017, 12:58:44
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
Titel: Re: Formularfeld dynamisch über String ansprechen
Beitrag von: Lachtaube am Februar 18, 2017, 13:04:16
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
Titel: Re: Formularfeld dynamisch über String ansprechen
Beitrag von: Beaker s.a. am Februar 18, 2017, 13:21:46
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
Titel: Re: Formularfeld dynamisch über String ansprechen
Beitrag von: cyberchris am Februar 21, 2017, 20:29:12
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