BeforeUpdate für Erscheinen von Bezeichnungsfeld

hallo experten,

zu meiner frage: ich habe ein userform erstellt, in dieser userform kommen mehrere textfelder vor. ich will dass wenn der bediener auf das textfeld klickt, ein text im userform erscheint(„eine art definition, die das bedienen erleichtern soll“) z.b. klickt der bediener auf das textfeld apfel, soll ein text erscheinen „Die Äpfel (Malus) bilden eine Pflanzengattung der Kernobstgewächse“ und klickt der bediener auf das textfeld birnen, bevor er diese ausfüllt soll ein anderer text erscheinen.

ich weis momentan, dass ich das BeforUpdate Ereignis verwenden muss. ich wollte das Text, welche nach dem klicken erscheinen soll als Visible = False setzen und wenn er darauf klickt soll diese dann gleich True gesetzt werden.

z.b.

Private Sub textfeldapfel_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)

textfeldapfel.visible = true

End Sub

leider erscheint es nicht beim klicken sondern nachdem ich das textfeld gefüllt haben, es muss an dem cancel liegen, da ich diesen nicht genutzt habe.

Würde mich auf eure unterstützung freuen…

Nein, es liegt nicht am Cancel.
Das BeforeUpdate tritt ein, wenn der Benutzer die Bearbeitung abgeschlossen hat und bevor die eingegeben Daten in (eventuell) mit dem Textfeld verbundene Tabellen geschrieben werden.

Du musst das MouseDown-Ereignis benutzen.
Die Parameter dort brauchst Du für Deinen Zweck nicht auswerten.

Viel Erfolg

Ingo

vielen dank ingo…

eine frage hätte ich noch, kannst du mir ein vba buch empfehlen, ich habe viele ausgeliehen, finde aber meistens nicht das was ich suche bzw. ich weis nicht wonach ich suchen soll, z.b. wusste ich nicht dass mousedown das ereignis ist, welche ich benötige…

wie hast du dich in das programmsytem eingearbeitet?

mfg

willswissen

Grüezi WillsWissen

ich weis momentan, dass ich das BeforUpdate Ereignis verwenden
muss.

Woher weisst Du das…?

ich wollte das Text, welche nach dem klicken erscheinen
soll als Visible = False setzen und wenn er darauf klickt soll
diese dann gleich True gesetzt werden.

Ich denke, dass das ‚Enter‘-Ereignis sich hier besser eignet - schaus dir mal näher an:

Private Sub TextBox2_Enter()

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

hallo thomas,

zuerst vielen dank für deine antwort,
ich habe es jetzt mit mousedown versucht, geht eigentlich ziemlich gut…
z.b.

Private Sub txtType_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

Label3.Visible = True
If Label3.Visible = True Then
Label2.Visible = False
Label1.Visible = False
End If
End Sub

wenn ich auf das eine textfeld typ klicke erscheint das label3 und wenn ich auf ein anderes texfeld klicke wird das label3 gleich false gesetzt und es erscheint label2 usw.

Vielen Dank

willswissen

Wenn es beim Klicken erscheinen soll, musst du auch das OnClick-Ereignis (oder auch das OnFocus-Ereigns) nehmen und nicht das BeforeUpdate-Ereignis.

Gruß
Reinhard Kraasch

Danke reinhard

vielen dank ingo…

eine frage hätte ich noch, kannst du mir ein vba buch
empfehlen,

Nein, mir ging das auch immer so, was ich suchte habe ich da nicht gefunden.

wie hast du dich in das programmsytem eingearbeitet?

Das ist lange her. Die Hilfefunktion der Office-Programme war damals viel besser als heute, dafür gab es kein Internet.
Heute schaue ich in Foren nach wie
http://www.office-loesung.de
http://www.office-hilfe.com

oder googele einfach.

Hallo,
ich habe ein Beispiel, welches Dir vielleicht helfen könnte. Ich habe es mit „textbox_Enter“ gelöst.

Bau Dir eine Userform mit 4 Textboxen.
Hinter der Userform habe ich folgende Scripts hinterlegt:

Private Sub TextBox1_Enter()
Hinweis_ TextBox1, „Hinweis TextBox1“
End Sub

Private Sub TextBox2_Enter()
Hinweis_ TextBox2, „Hinweis TextBox2“
End Sub

Private Sub TextBox3_Enter()
Hinweis_ TextBox3, „Hinweis TextBox3“
End Sub

Private Sub TextBox4_Enter()
Hinweis_ TextBox4, „Hinweis TextBox4“
End Sub

Private Sub Hinweis_(objTxT As MSForms.TextBox, strHinweis$)
If objTxT.Value = „“ Then
objTxT = strHinweis
End If
End Sub

Ich denke, dass ist das, was Du benötigst - oder?
Bei Bedarf schicke ich Dir mein Beispiel gerne zu.
Gruß,
Ptonka

Hallo WillsWissen,
versuche doch mit zwei Eventhandlern:
Enter und Exit

Private Sub TextBox1_Enter()
Label1.Visible = True
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Label1.Visible = False
End Sub

Ich würde aber vorher die Textfelder in ein Control-Array reipacken und die Controls nicht einzeln benahmen.
Vorteil: wenig Enter/Exit - Methoden
Nachteil: Die Controls habeb keine sprechende Namen, nur Nummern(index)

hast du schon antwort?
bin erst jetzt dazu gekommen die message zu lesen.

Hallo RoPF,

ja, ich habe es jetzt mit dem Mousedown Ereignis gelöst.

Danke!!

hast du schon antwort?
bin erst jetzt dazu gekommen die message zu lesen.

Danke!!!

Danke!!!.

Hallo,

hoffentlich kommt meine Antwort nicht zu spät :smile:

Das „BeforeUpdate“ wird erst ausgelöst, wenn der Inhalt geändert wurde (also nach Texteingabe und vor verlassen des Feldes), insofern nicht passend.

Ich würde das Event „Enter“ empfehlen - sobald man in das Feld klickt, wird es ausgelöst. Dann könntest Du dort hinterlegen

if len(textfeldapfel.text) = 0 then textfeldapfel.text = „Die Äpfel (Malus) bilden eine Pflanzengattung der Kernobstgewächse“

LG
MidnShape

danke mindshape

da gibt’s eine Verwirrung - ich nehme mal an, der „erklärende“ Text soll nicht in dem auzufüllenden Feld erscheinen, sondern in einem anderen Feld (zumeist nimmt man dafür ein Bezeichnungsfeld). Wie heißen die beiden Felder?
Wann und wie kommt der erklärende Text in das Feld, falls es kein Bezeichnungsfeld ist?
Cancel ist übrigens nur dafür da, ein Ereignis abzubrechen, es also doch nicht stattfinden zu lassen; sprich einen Update nicht durchzuführen. Und BeforeUpdate ist nicht das Ereignis, das du brauchst, versuch’s mal mit Activate.

lg