Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
464to468
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
464to468
464to468
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

SelectionChange

SelectionChange
11.08.2004 08:11:45
eres
Guten Morgen Excel-Gemeinde, liebe Excel-Gurus,
bestimmt könnt Ihr mein beschränktes Verständnis der Ereignisse worksheet_Change und Worksheet_SelectionChange erhellen ...
Folgendes Problem: Ich habe auf einem Tabellenblatt »Beispiel« eine Zelle als Input-Feld zur Eingabe eines Pfades angelegt.
Mit Hilfe der obigen beiden Ereignisse möchte ich sicherstellen, dass in der Zelle ein gültiger Pfad steht. Dazu habe ich im Codebereich des Tabellenblatts folgendes eingetragen:

Private Sub worksheet_Change(ByVal Target As Excel.Range)
Application.EnableEvents = False
If Target.Address = "$B$2" And Target.Value <> "" Then
' Der PFAD wurde also geändert geändert
If Dir(Range("B2"), vbDirectory) = "" Then
MsgBox "Der Input-Pfad  existiert nicht. !", vbCritical
Range("B2").Activate
End If
End If
Application.EnableEvents = True
End Sub


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
If Dir(Range("B2"), vbDirectory) = "" Then
MsgBox "Der Input-Pfad  existiert nicht. !", vbCritical
Range("B2").Activate
End If
Application.EnableEvents = True
End Sub

Mal abgesehen davon, dass ich u.a. auch noch andere Bedingungen wie "leere Zelle" etc. abprüfen muss, verstehe ich folgendes nicht:
Wenn B2 die aktive Zelle ist und ich dann in der Zelle eine Änderung vornehme, durchläuft das Makro brav den Bereich »worksheet_Change«. Was ich dann aber absolut nicht verstehe ist, wieso er dann sofort nach dem »worksheet_Change« auch noch in den »Worksheet_SelectionChange« einsteigt, obwohl die Active Zelle nie gewechselt wurde ?
Zum Verständnis füge ich meine Beispieldatei noch bei.
https://www.herber.de/bbs/user/9486.xls
Wenn es möglich ist, gebt einem Blinden die Erleuchtung oder wenn Pfadfinder gerade online sind, macht die gute Tat doch schon jetzt am frühen Morgen.
Vielen Dank im voraus und Gruss ans Forum
eres

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SelectionChange
11.08.2004 08:28:54
Frank
Hi
das Problem ist Dein
Range("B2").activate statement. Das triggert den Selection Change event. Das gleiche wird Dir auch beim Selection Change event passieren. Lösung:
ergänze Dein Statement wie folgt:
'...
application.enableevents=false
range("B2").activate
application.enableevents=True
'...
Frank
AW: SelectionChange
eres
Hallo Frank, ich habe sowohl beim Ereignisse worksheet_Change als auch beim Ereignis Worksheet_SelectionChange als erstes Statement "Application.EnableEvents = False". Wieso reicht das denn nicht aus? Ich schalte die Application.EnableEvents doch jeweils erst am Ende der Ereignisprozedur wieder ein ?
Gruss (und schon mal vielen Dank für Deine Hilfe)
eres
Anzeige
AW: SelectionChange
11.08.2004 08:35:12
Frank
Hi eres,
sorry, ist wohl noch zu früh am Morgen (bzw. zu wenig Kaffee bisher). Ich hatte diese beiden Zeilen übersehen.
D.h. eigentlich sollte das ausreichen. Hilft denn die Umstellung der Zeilen?
Frank
AW: SelectionChange
11.08.2004 08:39:53
eres
Hallo Frank, auch wenn die die Application.EnableEvents direkt vor dem »Range("B2").Activate« stelle, geht er immer noch nach dem Change-Ereignis in das SelectionChange Ereignis, obwohl die aktive Zelle nicht verändert wurde ...
Gruss
eres
AW: SelectionChange
ChrisL
Hi eres
Change Ereignis wird ausgeführt, EnableEvents wieder eingeschaltet. Anschliessend wechselt der Cursor in die neue Zelle, was dann das SelectionChange Ereignis auslöst.
Wieso brauchst du denn beide Ereignisse?
Gruss
Chris
Anzeige
AW: SelectionChange
11.08.2004 10:07:25
eres
Hallo Chris, ich sehe nicht, dass mein Cursor in eine andere Zelle als B2 wechselt. Er B2 ist die aktive Zelle die geändert wird und in dieser Zelle bleibt der Cursor auch ...
Insofern sehe ich nicht den Auslöser des SelectionChange-Ereignisses.
Ich benötige beide Ereignisse, da ich verhindern will, dass die Zelle B2 ohne gültigen Eintrag verlassen wird.
Gruss und Danke
eres
AW: SelectionChange
ChrisL
Hallo Eres
Fact ist, dass das Ereignis ausgelöst wird und auch EnableEvents nicht hilft.
Da es nur schwer möglich ist, die Zelle zu ändern, ohne ein SelectionChange Ereignis auszulösen, denke ich, dass das SelectionChange Ereignis genügen sollte.
Ferner würde ich dir empfehlen, eine Fehlerroutine einzubauen, da sonst u.U. das EnableEvents permanent deaktiviert wird.
On Error Goto ErrorHandler
Application.EnableEvents = False
' Dein Code
Application.EnableEvents = True
Exit SUb
ErrorHandler:
MsgBox "Fehler..."
Application.EnableEvents = True
Gruss
Chris
Anzeige
AW: SelectionChange
11.08.2004 11:57:05
eres
Hallo Chris, vielen Dank für den Tipp mit dem error-handler zur Sicherstellung, dass die EnableEvents im Zweifel immer »true« sind.
Natürlich hast Du recht ("Fakt ist ...") , dass es scheinbar ausreicht nur das SelectionChange - Ereignis zu verwenden. So werde ich es wohl auch machen.
Ich hätte nur gerne verstanden, wieso das SelectionChange - Ereignis ausgelöst wird, wenn die ActiveCell.Address nicht verändert wird ?
Nochmals vielen Dank Chris für Deine Hilfe.
eres
AW: SelectionChange
ChrisL
Hi eres
Wenn du mit Enter oder Tab die Zelle verlässt, dann wird das SelectionChange Ereignis angesprochen. Da hilft auch nicht, wenn du mit Activate wieder in die andere Zelle zurück springst.
Gruss
Chris
Anzeige
AW: SelectionChange
11.08.2004 12:12:16
eres
Chris, du schreibst: "Wenn du mit Enter oder Tab die Zelle VERLÄSST, dann wird das SelectionChange Ereignis angesprochen".
Wieso wird die Zelle den verlassen, wenn ich mich in der Zelle befinde, eine Änderung vornehme oder Eingabe mache und diese mit ENTER bestätige. Der Cursor bleibt doch in der Zelle stehen und insofern änderst sich doch auch die ActiveCell.Address nicht. ?
Gruss
eres
AW: SelectionChange
ChrisL
eres, A1 ist aktiv... du schreibst etwas, dann Enter, dann wird normalerweise A2 aktiv. Das Ereignis ist somit ausgelöst. Du aktivierst zwar in der Prozedur wieder A1, aber das Ereignis ist bereits ausgelöst. Ist einfach so.
Vielleicht kann es dir jemand anders besser erklären.
Gruss
Chris
Anzeige
AW: SelectionChange
11.08.2004 13:15:10
eres
sorry Chris, über Optionen/Bearbeiten kannst Du einstellen, ob sich der Cursor nach dem Enter aus der Zelle wegbewegt oder nicht. Bei mir ist die Einstellung so, dass nach dem Betätigen der Enter-Taste die geänderte Zelle nicht verlassen wird.
Insofern bleibt es für mich unlogisch, wieso das SelectionChange-Ereignis ausgelöst wird.
Gruss
eres
einverstanden, dann ist es unlogisch ;-)
ChrisL
Gruss
Chris
AW: einverstanden, dann ist es unlogisch ;-)
Udo
Ja, so ist es.
Udo

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige