Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
920to924
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
920to924
920to924
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

OnSelect oder OnBlur in Excel?

OnSelect oder OnBlur in Excel?
30.10.2007 14:41:00
Wilhelm
Hallo!
Gibt es so etwas wie ein OnSelect, oder ein OnClick für ein Feld. Besser bzw. das richtige wäre ein OnBlur, also Verlassen des Feldes. Wird ein Wert in ein Feld eingetragen, soll in einem anderen Feld Daten eingetragen werden. Das alles funktioniert bisher durchaus. Allerdings wurde jenes Feld, bei dem die ID eingetragen wurde, fest in den VBA-Code geschrieben. Das soll jedoch Variabel geschehen. Wenn der Benutzer eine Zeile einfügt, stimmen natürlich nicht die Verweise mehr. Daher soll ausgehend vom ID-Feld das Zielfeld bestimmt und gefüllt werden.
Wie jedoch erfahre ich die ID des Zielfeldes? Es sind 5 Felder die als ID-Feld bestimmt sind.
Ich habe schon viel gesucht, auch in einem anderen Forum nachgefragt, eine Lösung oder ein "Das geht nicht" bisher nicht erhalten.
Nun bin ich irgendwie am Ende von meinem Latein. Vielleicht wisst Ihr eine Lösung. Vielen Dank im voraus!

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: OnSelect oder OnBlur in Excel?
30.10.2007 14:46:34
Andi
Hi,
im Modul des betreffenden Tabellenblattes steht Dir das Change-Ereignis zu Verfügung.
Welche Zelle geändert wurde, kannst Du zB mit

Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox Target.Address
End Sub


abfragen. Wenn ausgehend von einer Zelle eine andere bestimmen willst, dann hilft Dir möglicherweise die Offset-Anweisung weiter.
Schönen Gruß,
Andi

AW: OnSelect oder OnBlur in Excel?
30.10.2007 14:47:00
Fred
Hi,
die Ereingnisse heißen in Excel Change und SelectionChange, vergib für die ID-Felder Namen.
mfg Fred

Vielen Dank!
31.10.2007 08:40:00
Wilhelm
Ich danke euch allen 3! Problem gelöst. So wie Fred beschrieb: ID für die Felder vergeben. Die 2 weiteren Beiträge von Andi und NoNet sind ebenfalls sehr hilfreich, auch für andere Aufgaben. Ein Auszug aus der Lösung (das möchte ich auch nicht verwehren):

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Trim(Range("ttf"))  "" Then
Irgendwas()
Else
FelderLeeren()
End If
End Sub


Anzeige
EVENT-Makros "Worksheet_SelectionChange"
30.10.2007 15:01:05
NoNet
Hallo Wilhelm,
In puncto VBA musst Du gegenüber Java(Script) umdenken : Ein "OnClick" oder "OnBlur"-Ereignis selbst gibt es in VBA nicht, aber zumindest verwandte Events.
Beispiel : Private Sub Worksheet_SelectionChange wenn eine andere Zelle/Bereich aktiviert wird.
Dadurch kannst Du das "Onclick"-Ereignis nachbilden. WICHTIG : Der Code muss im VBA-Editor (Alt+F11) in das Klassenmodul des entsprechenden Tabellenblattes kopiert werden (z.B. in "Tabelle1") :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'TARGET bezeichnet hier das selektierte Objekt, z.B. einzelne Zelle B5
MsgBox Target.Address
'Mit TARGET(1,1) wird die erste (linke obere) Zelle des Bereiches überprüft
'Mit INTERSECT (="Schnittpunkt") wird geprüft, ob diese Zelle im Bereich [A1:D10] liegt
If Intersect(Target(1, 1), [A1:D10]) Is Nothing Then
MsgBox "Bereich ausserhalb A1:D10 angeklickt !"
Else
MsgBox "Bereich innerhalb A1:D10 angeklickt !"
End If
End Sub


Möchtest Du hingegen nicht das Anklicken einer Zelle, sondern die Änderung einer Zelle überprüfen, musst Du das Ereignis Worksheet_Change verwenden (ebenfalls in das Klassenmodul des Tabellenblattes im VBA-Editor !) :


Private Sub Worksheet_Change(ByVal Target As Range)
'TARGET bezeichne hier die gerade geänderte Zelle oder geänderten Bereich
MsgBox Target.Address
'Auch hier kannst Du z.B. mit INTERSECT prüfen, ob die Änderung INNERHALB oder
'ausserhalb eines Bereiches erfolgte.
'Da auch mehrere Zellen gleichzeitig geändert/gelöscht werden können, empfiehlt sich,
'jede einzelne Zelle zu überprüfen :
Dim rngZelle As Range
For Each rngZelle In Target
If Not Intersect(rngZelle, [A1:D10]) Is Nothing Then
MsgBox rngZelle.Address & " innerhalb des Bereiches A1:D10 wurde geändert !"
End If
Next
'Oder einfach nur die Schnittmenge des geänderten Bereiches mit dem fixen Bereich anzeigen:
If Not Intersect(Target, [A1:D10]) Is Nothing Then
MsgBox Intersect(Target, [A1:D10]).Address
End If
End Sub


Ich hoffe, das war in etwa DAS, was Du gesucht hast.
Gruß, NoNet

Anzeige
Whow!
30.10.2007 15:47:24
Wilhelm
Gleich 3 Antworten! Vielen Dank Leute! Leider habe ich heute noch eine andere Arbeit, ich werde mir das ganze morgen nochmals zu Gemüte führen. Vielen Dank im voraus. Ich werde morgen nochmals Antworten.
Grüsse!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige