Discussion:
Worksheet_SelectionChange
(zu alt für eine Antwort)
Hans Faber
2004-02-20 11:03:56 UTC
Permalink
Hallo NG'ler,

ich arbeite mit Excel 2000 unter NT4. In einer Datei habe
ich mit Hilfe des Worksheet_SelectionChange-Ereignisses
bestimmte Routinen (z.B. das Behandeln der eingegebenen
Werte) an die Bedingung geknuepft, ob sich die Markierung
in einem bestimmten Bereich befindet. Es gibt verschiedene
Bereiche, die mit Namen angesprochen werden und in denen
dann jeweils andere Sub-Routinen gestartet werden. Das
funktioniert soweit auch ganz gut.
Das Worksheet_SelectionChange-Ereigniss tritt ja ein, wenn
sich die Markierung in einem Arbeitsblatt aendert. Diese
Aenderung kann durch ENTER, CURSOR-Tasten oder einen
Mausklick auf eine neue Zelle hervorgerufen werden.
Frage:
Gibt es eine Moeglichkeit, per VBA zu erfahren, durch
welche Aktion (ENTER, CURSOR, Mausklick) das
Worksheet_SelectionChange-Ereigniss ausgeloest wurde?

Fuer Hinweise, die ... ..., bedanke ich mich sehr.
Gruss,
Hans Faber
Frank Kabel
2004-02-20 11:07:10 UTC
Permalink
Hi Hans
AFAIK kannst du das leider nicht in Erfahrung bringen.
--
Regards
Frank Kabel
Frankfurt, Germany
Post by Hans Faber
Hallo NG'ler,
ich arbeite mit Excel 2000 unter NT4. In einer Datei habe
ich mit Hilfe des Worksheet_SelectionChange-Ereignisses
bestimmte Routinen (z.B. das Behandeln der eingegebenen
Werte) an die Bedingung geknuepft, ob sich die Markierung
in einem bestimmten Bereich befindet. Es gibt verschiedene
Bereiche, die mit Namen angesprochen werden und in denen
dann jeweils andere Sub-Routinen gestartet werden. Das
funktioniert soweit auch ganz gut.
Das Worksheet_SelectionChange-Ereigniss tritt ja ein, wenn
sich die Markierung in einem Arbeitsblatt aendert. Diese
Aenderung kann durch ENTER, CURSOR-Tasten oder einen
Mausklick auf eine neue Zelle hervorgerufen werden.
Gibt es eine Moeglichkeit, per VBA zu erfahren, durch
welche Aktion (ENTER, CURSOR, Mausklick) das
Worksheet_SelectionChange-Ereigniss ausgeloest wurde?
Fuer Hinweise, die ... ..., bedanke ich mich sehr.
Gruss,
Hans Faber
Melanie Breden
2004-02-20 12:33:36 UTC
Permalink
Hallo Frank,
Post by Frank Kabel
AFAIK kannst du das leider nicht in Erfahrung bringen.
sag niemals nie.... ;-)
--
Mit freundlichen Grüssen

Melanie Breden
- Microsoft MVP für Excel -

http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
Frank Kabel
2004-02-20 12:54:57 UTC
Permalink
:-)
o.k. ich habe es ja herausgefordert. Hatte auch ganz kurz an Onkey
gedacht, es dann aber wieder als zu komplex verworfen.

Gruß
Frank
Post by Melanie Breden
Hallo Frank,
Post by Frank Kabel
AFAIK kannst du das leider nicht in Erfahrung bringen.
sag niemals nie.... ;-)
Hans Faber
2004-02-20 12:53:28 UTC
Permalink
Hallo Frank,
irgendwie stehe ich wohl auf'm Schlauch. Was heisst AFAIK?
Gruss,
Hans
-----Originalnachricht-----
Hi Hans
AFAIK kannst du das leider nicht in Erfahrung bringen.
--
Regards
Frank Kabel
Frankfurt, Germany
Post by Hans Faber
Hallo NG'ler,
ich arbeite mit Excel 2000 unter NT4. In einer Datei
habe
Post by Hans Faber
ich mit Hilfe des Worksheet_SelectionChange-Ereignisses
bestimmte Routinen (z.B. das Behandeln der eingegebenen
Werte) an die Bedingung geknuepft, ob sich die
Markierung
Post by Hans Faber
in einem bestimmten Bereich befindet. Es gibt
verschiedene
Post by Hans Faber
Bereiche, die mit Namen angesprochen werden und in denen
dann jeweils andere Sub-Routinen gestartet werden. Das
funktioniert soweit auch ganz gut.
Das Worksheet_SelectionChange-Ereigniss tritt ja ein,
wenn
Post by Hans Faber
sich die Markierung in einem Arbeitsblatt aendert. Diese
Aenderung kann durch ENTER, CURSOR-Tasten oder einen
Mausklick auf eine neue Zelle hervorgerufen werden.
Gibt es eine Moeglichkeit, per VBA zu erfahren, durch
welche Aktion (ENTER, CURSOR, Mausklick) das
Worksheet_SelectionChange-Ereigniss ausgeloest wurde?
Fuer Hinweise, die ... ..., bedanke ich mich sehr.
Gruss,
Hans Faber
.
Frank Kabel
2004-02-20 13:00:45 UTC
Permalink
Hi Hans
AFAIK: As far as I know :-)
--
Regards
Frank Kabel
Frankfurt, Germany
Post by Melanie Breden
Hallo Frank,
irgendwie stehe ich wohl auf'm Schlauch. Was heisst AFAIK?
Gruss,
Hans
-----Originalnachricht-----
Hi Hans
AFAIK kannst du das leider nicht in Erfahrung bringen.
--
Regards
Frank Kabel
Frankfurt, Germany
Post by Hans Faber
Hallo NG'ler,
ich arbeite mit Excel 2000 unter NT4. In einer Datei habe
ich mit Hilfe des Worksheet_SelectionChange-Ereignisses
bestimmte Routinen (z.B. das Behandeln der eingegebenen
Werte) an die Bedingung geknuepft, ob sich die Markierung
in einem bestimmten Bereich befindet. Es gibt verschiedene
Bereiche, die mit Namen angesprochen werden und in denen
dann jeweils andere Sub-Routinen gestartet werden. Das
funktioniert soweit auch ganz gut.
Das Worksheet_SelectionChange-Ereigniss tritt ja ein, wenn
sich die Markierung in einem Arbeitsblatt aendert. Diese
Aenderung kann durch ENTER, CURSOR-Tasten oder einen
Mausklick auf eine neue Zelle hervorgerufen werden.
Gibt es eine Moeglichkeit, per VBA zu erfahren, durch
welche Aktion (ENTER, CURSOR, Mausklick) das
Worksheet_SelectionChange-Ereigniss ausgeloest wurde?
Fuer Hinweise, die ... ..., bedanke ich mich sehr.
Gruss,
Hans Faber
.
Melanie Breden
2004-02-20 12:37:53 UTC
Permalink
Hallo Hans,
Post by Hans Faber
Das Worksheet_SelectionChange-Ereigniss tritt ja ein, wenn
sich die Markierung in einem Arbeitsblatt aendert. Diese
Aenderung kann durch ENTER, CURSOR-Tasten oder einen
Mausklick auf eine neue Zelle hervorgerufen werden.
Gibt es eine Moeglichkeit, per VBA zu erfahren, durch
welche Aktion (ENTER, CURSOR, Mausklick) das
Worksheet_SelectionChange-Ereigniss ausgeloest wurde?
du kannst mit der OnKey-Methode Tastendrucke umleiten und
dadurch auch kontrollieren.
Allerdings erfordert das Ganze reichlich Code, aber das soll
uns ja nicht stören :-)

Speicher folgende Prozeduren in DieseArbeitsmappe:

Private Sub Workbook_Activate()
OnTastenPrüfung
End Sub
Private Sub Workbook_Deactivate()
OffTastenPrüfung
End Sub

Diese Deklarierung und Prozeduren in ein Standardmodul:

Public gstrKey As String
' ***@mvps.org | 20.02.2004
Sub OnTastenPrüfung()
' weitere Tasten:
' Pos1,Strg+Pos1,Ende,Strg+Ende,BildUp,BildDown
With Application
.OnKey "{ENTER}", "MyEnter"
.OnKey "{Return}", "MyEnter"
.OnKey "{TAB}", "MyTab"
.OnKey "{LEFT}", "MyLeft"
.OnKey "{UP}", "MyUp"
.OnKey "{RIGHT}", "MyRight"
.OnKey "{DOWN}", "MyDown"
End With
End Sub
Sub OffTastenPrüfung()
With Application
.OnKey "{ENTER}"
.OnKey "{Return}"
.OnKey "{TAB}"
.OnKey "{LEFT}"
.OnKey "{UP}"
.OnKey "{RIGHT}"
.OnKey "{DOWN}"
End With
End Sub

Public Sub MyEnter()
Mark "Enter", 1, 0
End Sub
Public Sub MyTab()
Mark "Tab", 0, 1
End Sub
Public Sub MyLeft()
Mark "Links", 0, -1
End Sub
Public Sub MyUp()
Mark "Oben", -1, 0
End Sub
Public Sub MyRight()
Mark "Rechts", 0, 1
End Sub
Public Sub MyDown()
Mark "Unten", 1, 0
End Sub

Sub Mark(strKey As String, _
lngRow As Long, intCol As Long)
gstrKey = strKey
On Error Resume Next
ActiveCell.Offset(lngRow, intCol).Select
End Sub

Function CheckKey() As String
Select Case gstrKey
Case ""
CheckKey = "Mausklick"
Case Else
CheckKey = gstrKey
End Select
gstrKey = ""
End Function

Und im SelectionChange-Ereignis der Tabelle:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox CheckKey
End Sub

Wie funktionieren die Prozeduren bei dir in der Praxis?
--
Mit freundlichen Grüssen

Melanie Breden
- Microsoft MVP für Excel -

http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
Hans Faber
2004-02-20 12:52:03 UTC
Permalink
Hallo Melanie,
vielen Dank für deine schnelle Antwort. Das sieht ja recht
vielversprechend aus. Hoffe, dass ich das alles auch
umsetzen kann.
Nochmals vielen Dank
Gruss,
Hans
-----Originalnachricht-----
Hallo Hans,
Post by Hans Faber
Das Worksheet_SelectionChange-Ereigniss tritt ja ein,
wenn
Post by Hans Faber
sich die Markierung in einem Arbeitsblatt aendert. Diese
Aenderung kann durch ENTER, CURSOR-Tasten oder einen
Mausklick auf eine neue Zelle hervorgerufen werden.
Gibt es eine Moeglichkeit, per VBA zu erfahren, durch
welche Aktion (ENTER, CURSOR, Mausklick) das
Worksheet_SelectionChange-Ereigniss ausgeloest wurde?
du kannst mit der OnKey-Methode Tastendrucke umleiten und
dadurch auch kontrollieren.
Allerdings erfordert das Ganze reichlich Code, aber das
soll
uns ja nicht stören :-)
Private Sub Workbook_Activate()
OnTastenPrüfung
End Sub
Private Sub Workbook_Deactivate()
OffTastenPrüfung
End Sub
Public gstrKey As String
Sub OnTastenPrüfung()
' Pos1,Strg+Pos1,Ende,Strg+Ende,BildUp,BildDown
With Application
.OnKey "{ENTER}", "MyEnter"
.OnKey "{Return}", "MyEnter"
.OnKey "{TAB}", "MyTab"
.OnKey "{LEFT}", "MyLeft"
.OnKey "{UP}", "MyUp"
.OnKey "{RIGHT}", "MyRight"
.OnKey "{DOWN}", "MyDown"
End With
End Sub
Sub OffTastenPrüfung()
With Application
.OnKey "{ENTER}"
.OnKey "{Return}"
.OnKey "{TAB}"
.OnKey "{LEFT}"
.OnKey "{UP}"
.OnKey "{RIGHT}"
.OnKey "{DOWN}"
End With
End Sub
Public Sub MyEnter()
Mark "Enter", 1, 0
End Sub
Public Sub MyTab()
Mark "Tab", 0, 1
End Sub
Public Sub MyLeft()
Mark "Links", 0, -1
End Sub
Public Sub MyUp()
Mark "Oben", -1, 0
End Sub
Public Sub MyRight()
Mark "Rechts", 0, 1
End Sub
Public Sub MyDown()
Mark "Unten", 1, 0
End Sub
Sub Mark(strKey As String, _
lngRow As Long, intCol As Long)
gstrKey = strKey
On Error Resume Next
ActiveCell.Offset(lngRow, intCol).Select
End Sub
Function CheckKey() As String
Select Case gstrKey
Case ""
CheckKey = "Mausklick"
Case Else
CheckKey = gstrKey
End Select
gstrKey = ""
End Function
Private Sub Worksheet_SelectionChange(ByVal Target As
Range)
MsgBox CheckKey
End Sub
Wie funktionieren die Prozeduren bei dir in der Praxis?
--
Mit freundlichen Grüssen
Melanie Breden
- Microsoft MVP für Excel -
http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
.
Hans Faber
2004-03-03 08:01:49 UTC
Permalink
Hallo Melanie,

mittlerweile habe ich das alles mal umgesetzt. Es hat
zwar 'ne Weile gedauert, weil ich zwischendurch andere
Terminaufgaben zu erledigen hatte. Aber nun ist es soweit
und das ganze klappt auch recht ordentlich. Bis jetzt ist
allerdings ein Problem aufgetaucht, bei dem ich nicht
recht weiterkomme.
Bei der Tastenpruefung
Application.OnKey "{ENTER}", "MyEnter"
wird "MyEnter" nur ausgefuehrt, wenn die Enter-Taste des
Zahlenblocks der Tastatur betaetigt wird. Die normale
Enter-Taste wird nicht erkannt.
Woran kann das liegen und wie kriege ich auch die normale
Enter-Taste mit ins Boot?

Gruss,
Hans
-----Originalnachricht-----
Hallo Hans,
Post by Hans Faber
Das Worksheet_SelectionChange-Ereigniss tritt ja ein,
wenn
Post by Hans Faber
sich die Markierung in einem Arbeitsblatt aendert. Diese
Aenderung kann durch ENTER, CURSOR-Tasten oder einen
Mausklick auf eine neue Zelle hervorgerufen werden.
Gibt es eine Moeglichkeit, per VBA zu erfahren, durch
welche Aktion (ENTER, CURSOR, Mausklick) das
Worksheet_SelectionChange-Ereigniss ausgeloest wurde?
du kannst mit der OnKey-Methode Tastendrucke umleiten und
dadurch auch kontrollieren.
Allerdings erfordert das Ganze reichlich Code, aber das
soll
uns ja nicht stören :-)
Private Sub Workbook_Activate()
OnTastenPrüfung
End Sub
Private Sub Workbook_Deactivate()
OffTastenPrüfung
End Sub
Public gstrKey As String
Sub OnTastenPrüfung()
' Pos1,Strg+Pos1,Ende,Strg+Ende,BildUp,BildDown
With Application
.OnKey "{ENTER}", "MyEnter"
.OnKey "{Return}", "MyEnter"
.OnKey "{TAB}", "MyTab"
.OnKey "{LEFT}", "MyLeft"
.OnKey "{UP}", "MyUp"
.OnKey "{RIGHT}", "MyRight"
.OnKey "{DOWN}", "MyDown"
End With
End Sub
Sub OffTastenPrüfung()
With Application
.OnKey "{ENTER}"
.OnKey "{Return}"
.OnKey "{TAB}"
.OnKey "{LEFT}"
.OnKey "{UP}"
.OnKey "{RIGHT}"
.OnKey "{DOWN}"
End With
End Sub
Public Sub MyEnter()
Mark "Enter", 1, 0
End Sub
Public Sub MyTab()
Mark "Tab", 0, 1
End Sub
Public Sub MyLeft()
Mark "Links", 0, -1
End Sub
Public Sub MyUp()
Mark "Oben", -1, 0
End Sub
Public Sub MyRight()
Mark "Rechts", 0, 1
End Sub
Public Sub MyDown()
Mark "Unten", 1, 0
End Sub
Sub Mark(strKey As String, _
lngRow As Long, intCol As Long)
gstrKey = strKey
On Error Resume Next
ActiveCell.Offset(lngRow, intCol).Select
End Sub
Function CheckKey() As String
Select Case gstrKey
Case ""
CheckKey = "Mausklick"
Case Else
CheckKey = gstrKey
End Select
gstrKey = ""
End Function
Private Sub Worksheet_SelectionChange(ByVal Target As
Range)
MsgBox CheckKey
End Sub
Wie funktionieren die Prozeduren bei dir in der Praxis?
--
Mit freundlichen Grüssen
Melanie Breden
- Microsoft MVP für Excel -
http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
.
Melanie Breden
2004-03-03 11:06:58 UTC
Permalink
Hallo Hans Faber,
Post by Hans Faber
Bis jetzt ist
allerdings ein Problem aufgetaucht, bei dem ich nicht
recht weiterkomme.
Bei der Tastenpruefung
Application.OnKey "{ENTER}", "MyEnter"
wird "MyEnter" nur ausgefuehrt, wenn die Enter-Taste des
Zahlenblocks der Tastatur betaetigt wird. Die normale
Enter-Taste wird nicht erkannt.
Woran kann das liegen und wie kriege ich auch die normale
Enter-Taste mit ins Boot?
es gibt die 'Enter' und die 'Return'-Taste und es sind beide in der Prozedur
integriert. Allerdings wird bei beiden die Prozedur MyEnter ausgeführt,
weil beide die gleichen Auswirkungen haben.

Man kann diese beiden Tasten auch getrennt übewachen:
Ändere dazu folgende Zeile:
.OnKey "{Return}", "MyEnter"
in
.OnKey "{Return}", "MyReturn"

und füge diese Prozedur zusätzlich bei den Aufrufprozeduren ein:

Public Sub MyReturn()
Mark "Return", 1, 0
End Sub
--
Mit freundlichen Grüssen

Melanie Breden
- Microsoft MVP für Excel -

http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
Hans Faber
2004-03-03 12:57:45 UTC
Permalink
Hi Melanie,
nun bin ich aber erstmal platt. Haette beim besten Willen
nicht erwartet, dass meine Reaktion auf diesen "Uralt-
Beitrag" so schnell gelesen und auch beantwortet wird.
Kompliment. Würde Dich auf'n Eis oder Kaffee einladen,
wenn ich Du hier in der Naehe waerst und ich das wuesste.
Denn eigentlich dachte ich schon daran, das ganze als
neuen Beitrag nochmal in die NG zu stellen. Wie kriegt Ihr
das denn mit, ob jemand nochmal ein Statement zu einem 2
Wochen alten Beitrag geschickt hat? Also nochmal tausend
Dank für Deine superschnelle Antwort. Haette ich
eigentlich auch selber drauf kommen koennen oder muessen,
oder nicht, oder doch?
Gruss,
Hans
-----Originalnachricht-----
Hallo Hans Faber,
Post by Hans Faber
Bis jetzt ist
allerdings ein Problem aufgetaucht, bei dem ich nicht
recht weiterkomme.
Bei der Tastenpruefung
Application.OnKey "{ENTER}", "MyEnter"
wird "MyEnter" nur ausgefuehrt, wenn die Enter-Taste des
Zahlenblocks der Tastatur betaetigt wird. Die normale
Enter-Taste wird nicht erkannt.
Woran kann das liegen und wie kriege ich auch die
normale
Post by Hans Faber
Enter-Taste mit ins Boot?
es gibt die 'Enter' und die 'Return'-Taste und es sind
beide in der Prozedur
integriert. Allerdings wird bei beiden die Prozedur
MyEnter ausgeführt,
weil beide die gleichen Auswirkungen haben.
.OnKey "{Return}", "MyEnter"
in
.OnKey "{Return}", "MyReturn"
und füge diese Prozedur zusätzlich bei den
Public Sub MyReturn()
Mark "Return", 1, 0
End Sub
--
Mit freundlichen Grüssen
Melanie Breden
- Microsoft MVP für Excel -
http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
.
Melanie Breden
2004-03-03 16:29:11 UTC
Permalink
Hallo Hans,
Post by Hans Faber
nun bin ich aber erstmal platt. Haette beim besten Willen
nicht erwartet, dass meine Reaktion auf diesen "Uralt-
Beitrag" so schnell gelesen und auch beantwortet wird.
Kompliment. Würde Dich auf'n Eis oder Kaffee einladen,
wenn ich Du hier in der Naehe waerst und ich das wuesste.
deine Einladung würde ich auch glatt annehmen :-)
Post by Hans Faber
Denn eigentlich dachte ich schon daran, das ganze als
neuen Beitrag nochmal in die NG zu stellen. Wie kriegt Ihr
das denn mit, ob jemand nochmal ein Statement zu einem 2
Wochen alten Beitrag geschickt hat?
Es war schon richtig in dem angefangenen thread dein Feedback
zu geben und Nachfragen zu stellen.
Hättest du einen neuen Thread angefangen, wäre der evtl. bei mir
eher untergegangen.

Ich nutze Outlook Express als Newsreader und kann mir die Beiträge
der NG in verschiedenen Ansichten anzeigen lassen.
Alle neuen Beiträge sehe ich in der Ansicht 'nicht übertragene Beiträge'.
Threads an denen ich beteiligt bin, oder die mich interssieren markiere ich.
Dadurch erhalten sie eine andere Farbe und auch neue Beiträgen zu
bestehenden Threads werden farblich hervorgehoben :-)
Post by Hans Faber
Also nochmal tausend
Dank für Deine superschnelle Antwort. Haette ich
eigentlich auch selber drauf kommen koennen oder muessen,
oder nicht, oder doch?
Wenn du den Code lesen kannst und ihn verstehst, hättest du drauf kommen können ;-)
Aber ich gebe zu, dass die vielen Codes auch sehr verwirren können.
--
Mit freundlichen Grüssen

Melanie Breden
- Microsoft MVP für Excel -

http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
Lesen Sie weiter auf narkive:
Loading...