In einem Dialog auf ein Beschriftungsfeld schreibend zugreifen

In zwei hintereinander geschalteten Dialogen gebe ich in den ersten einen Name ein. Wenn der (via einen Filter geprüft, der funktioniert) in der Datenbank noch nicht vorhanden ist, öffnet sich der zweite Dialog und dort will ich im mittleren von drei Beschriftungsfeldern den Name eintragen.Bildbeschreibung Das gelingt mir nicht, hier ein Versuch:

Die Variable stMinNeu existiert auch nach dem Schließen des ersten Dialoges noch (über msgBox geprüft), in oben stehenden Beispiel hab ich es mit einem String (“Test”) versucht. Auch das geht nicht. Der Dialog öffnet sich zwar, aber das Beschriftungsfeld ist so leer wie auf dem Bild. Was läuft falsch?

Heißt die Eigenschaft nicht Label? Also getControl("Label3").Label? Was spricht denn dagegen, das ganze auch als normales Textfeld zu gestalten. Das fällt doch niemandem auf, wenn Du die Schrift entsprechend einstellst, das Feld rahmenlos machst und mit einheitlich grauem Hintergrund präsentierst.

Mit .Label (sowie Lable, label.text, lable.text sowie die beiden letzten ohne Punkt) kommt immer die Meldung,dass er das nicht kennt. Ich hatte zuerst ein Textfeld genommen, doch da wurde auch nichts reingeschrieben.

und was ist mit dieser Eigenschaft?

getControl(“Label3”).Title

Title, Titeltext, texttitel, titel etc. werden nicht erkannt. Ich habe Spaßeshalber aus dem oben gezeigten Dialog mit stTest=oDlgNeuesMineral2.getControl(“Label1”).text
msgBox(stTest) aus dem Dialogfeld “Label 1” den Text “Ein Mineral mit dem Namen” erfolgreich auslesen können (und den Text habe ich in dem Beschriftungsfeld bei “Titel” eingetragen, das ist ja das, was dann im Feld zu sehen ist). Nur das Schreiben klappt so gar nicht. Ich habe bei dem beschriebenen Test das Auslesen des Textes und die msgBox direkt nach das Execute() gestellt. Die Meldung wird mir aber erst angezeigt, wenn ich den Dialog schließe, so als ob das Makro nach dem Öffnen des Dialoges angehalten ist und auf irgend etwas wartet.

Wenn ich Deine Schreibweisen für “Label” sehe, dann würde ich die zuerst einmal kontrollieren. Denn das ist definitiv eine Eigenschaft der Beschriftungsfelder - und zwar für den Titel, die deutschsprachige Übersetzung.

Hallo,

ich habe da mal was gebastelt und dazu meine vorherige Antwort editiert, damit ich eine Musterdatei hochladen kann.
Ich bin zu dem Schluss gekommen, dass hier ggf. ein Bug vorliegt. Siehe Kommentare im Code.

Mein Code enthält ein Makro mit zwei Dialogen.
Die Event-Steuerung der CommandButton enthält einen Bug, welchen man aber umgehen kann.

Weist man innerhalb der Event-Steuerung einem Label die String Variable zu, dann wird diese im Label des zweiten Dialogs nicht aktualisiert. Egal wie die Variable deklariert wurde.
Siehe Kommentare im Code.

Bei einem Textfeld funktioniert dies ohne Probleme: oTxt2.Text=sVar
Den Fehler habe ich in der Weise umgangen, in dem ich aus der Event-Steuerung heraus eine SUB aufrufe, welche dem Label die Variable zuweist.

Ich weiß nicht, ob es ein Bug oder Absicht ist. Ich meine, ein Dialog wartet nach dem Öffnen anscheinend auf irgendeine Aktion. Wenn in einem Makro nach dem Öffnen des Dialoges noch Zeilen folgen, werden die einfach nicht abgearbeitet. Ich habe mein ursprüngliches Makro nach der Zeile 49 geteilt und beendet, die Zeilen 44 & 45 runter kopiert (damit die Variable stMinNeu auch im neuen Makro belegt ist) in ein neues Makro “Weiter” und löse dieses Makro mit einer Mausbewegung auf dem Dialog aus. Dann klappt alles (Ich denke, das ist im Grunde die gleiche Lösung wie von Craig22). Danke allen Beteiligten für die Hilfe.

Hallo,

ich denke die Variable ist nicht korrekt deklariert.

Die Variable ist nur innerhalb der Sub-Routine gültig.
Damit eine Variable im gesamten Modul gültig wird, ist diese oberhalb aller Sub’s und Funktionen zu deklarieren:

Option Explicit
Dim stMinNeu as String

Sub MeinMakro1
.
.
.
End Sub

Sub MeinMakro2
...
End Sub

Wenn eine Variable in der gesamten Bibliothek Gültigkeit erlangen soll, dann muss diese so deklariert werden.

Option Explicit
Public stMinNeu as String

Sub MeinMakro1
.
.
.
End Sub

(über msgBox geprüft)

Da stellt sich die Frage, zu welchem Zeitpunkt die Msgbox, aus welcher Routine heraus aufgerufen wurde.

Gruß

Craig

E D I T:
2020-06-14 11:52Uhr
Dialog Label.ods

Na ja, die Schilderung zeigt aber doch, dass es auch ohne Variable und mit einem festen vorgegebenen Text nicht funktioniert.

Die Variable hole ich mir aus dem ersten Dialog herüber zu einem Zeitpunkt, als beide Dialoge offen sind. Nach dem Schließen des ersten Dialogs zeigt die MsgBox, dass die Variable immer noch bekannt ist.