Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1564to1568
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
Inhaltsverzeichnis

Unterschiedliche Ereignisse bei Zellauswahl

Unterschiedliche Ereignisse bei Zellauswahl
16.06.2017 11:19:52
Matthias
Hallo liebes Herber-Forum.
Ich bin gerade am verzweifeln und hoffe hier mal wieder auf Hilfe. Leider habe ich bisher noch kein vergleichbares Problem gefunden, wo ich etwas Code erspicken konnte.
Folgendes habe ich vor: In Abhängigkeit der Art der Selektion einer Zelle sollen verschiedene Aktionen ausgeführt werden. Klingt erst mal recht simpel, ich habs aber leider bisher nicht hinbekommen.
Folgenden Code habe ich bereits:

Public Sub Worksheet_SelectionChange(ByVal Target As Range)
'Klickbereich festlegen
If Application.Intersect(Target, Range("E:E")) Is Nothing Then
Exit Sub
End If
'Userform anzeigen
UserForm1.Show
End Sub

Bis jetzt aktiviert der Code bei jeder Art der Selektion einer Zelle im definierten Zellbereich E:E ein Userform, dort wird dann weiter verarbetit.
Allerdings gibt es jetzt mehrere Bedingungen für das aktivieren des Userforms durch einen Anwender der den Code nicht kennt:
Es sollen verschiedene Tasten (Z.B. Pfeiltasten, Tab, ...) ausgeschlossen werden, um eine versehentliche Aktivierung des Userforms zu unterbinden.
Mein bisheriger Gedanke war, das ganze irgendwie über das Keypress-Event abzufangen, also zusätzlich zur Begrenzung des Bereichs den letzten Tastendruck auszuwerten und entsprechend zu verzweigen.
Das Userform soll sich darüber hinaus nicht öffnen, wenn bereits eine Zeichenkette in der Zelle steht, die in einer definierten Liste auf einem anderen Tabellenblatt enthalten ist (also eine korrekte Eingabe vorher erfolgte)
Leider habe ich das nach etlicher rumprobiererei nicht hin bekommen :(
Kann mir jemand von euch vielleicht weiter helfen?
Mfg Matze

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Unterschiedliche Ereignisse bei Zellauswahl
16.06.2017 11:26:22
Hajo_Zi
bei mir wird die Userform nur aufgerufen falls Spalte E gewählt.

AW: Unterschiedliche Ereignisse bei Zellauswahl
16.06.2017 12:36:31
Nepumuk
Hallo Matthias,
teste mal:
Option Explicit

Private Declare PtrSafe Function GetAsyncKeyState Lib "user32.dll" ( _
    ByVal vKey As Long) As Integer

Public Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    'Klickbereich festlegen
    If Not Intersect(Target, Columns(5)) Is Nothing Then
        
        'Linke Maustaste gedrückt
        If GetAsyncKeyState(vbKeyLButton) = 1 Then
            
            'Userform anzeigen
            UserForm1.Show
            
        End If
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: Unterschiedliche Ereignisse bei Zellauswahl
16.06.2017 14:12:14
Nepumuk
Nochmal Hallo,
besser so:
Option Explicit

Private Declare Function GetKeyState Lib "user32.dll" ( _
    ByVal nVirtKey As Long) As Integer

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    'Klickbereich festlegen
    If Not Intersect(Target, Columns(5)) Is Nothing Then
        
        'Tab und Pfeil links/rechts/auf/ab ausschließen
        If Not (GetKeyState(vbKeyTab) And &HF0000000) = &HF0000000 And _
            Not (GetKeyState(vbKeyLeft) And &HF0000000) = &HF0000000 And _
            Not (GetKeyState(vbKeyRight) And &HF0000000) = &HF0000000 And _
            Not (GetKeyState(vbKeyUp) And &HF0000000) = &HF0000000 And _
            Not (GetKeyState(vbKeyDown) And &HF0000000) = &HF0000000 Then
            
            'Userform anzeigen
            UserForm1.Show
            
        End If
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: Unterschiedliche Ereignisse bei Zellauswahl
16.06.2017 16:46:39
Matze
Hallo Nepumuk.
Soweit ich das verstehe, sieht die 2. Lösung sehr gut aus. Leider konnte ich Sie nicht testen, da ich nach dem kopieren des Codes eine Fehlermeldung bekommen habe:
Userbild
Ich denke, dass ist nur eine Kleinigkeit, aber ich kann es leider mit meinem rudimentären Wissen nicht selbst hinbiegen :(
Hast du eventuell für mein 2. Problem auch noch eine Lösung?
Im Zellbereich E:E kann ja bereits ein Wert in der jeweiligen Zelle stehen. Dieser soll überprüft werden. Sofern exakt diese Zeichenkette in einer hinterlegten Liste auf einem anderen Datenblatt enthalten ist, soll das Userform ebenfalls nicht aufgehen. Das Ganze also zusätzlich zu der Restriktion mit den Tasten.
Wenn du mir da noch helfen kannst, bist du mein Held des Tages :)
Mfg Matze
Anzeige
AW: Unterschiedliche Ereignisse bei Zellauswahl
16.06.2017 17:30:45
Nepumuk
Hallo,
ändere die Deklaration so:
Private Declare PtrSafe Function GetKeyState Lib "user32.dll" ( _
    ByVal nVirtKey As Long) As Integer

Gruß
Nepumuk
Anzeige
AW: Unterschiedliche Ereignisse bei Zellauswahl
16.06.2017 17:40:50
Matze
Hallo Nepumuk.
Vielen Dank, nun funktionierte es. :)
Hast du eventuell für mein 2. Problem auch noch eine Lösung?
Im Zellbereich E:E kann ja bereits ein Wert in der jeweiligen Zelle stehen. Dieser soll überprüft werden. Sofern exakt diese Zeichenkette in einer hinterlegten Liste auf einem anderen Datenblatt enthalten ist, soll das Userform ebenfalls nicht aufgehen. Das Ganze also zusätzlich zu der Restriktion mit den Tasten.
Wenn du mir da noch helfen kannst, bist du mein Held des Tages :)
Mfg Matze
AW: Unterschiedliche Ereignisse bei Zellauswahl
16.06.2017 18:03:47
Nepumuk
Hallo Matze,
du musst noch den Tabellennamen und die Spalte die durchsucht werden soll anpassen.
Option Explicit

Private Declare PtrSafe Function GetKeyState Lib "user32.dll" ( _
    ByVal nVirtKey As Long) As Integer

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    Dim objCell As Range
    
    'Klickbereich festlegen
    If Not Intersect(Target, Columns(5)) Is Nothing Then
        
        'Tab und Pfeil links/rechts/auf/ab ausschließen
        If Not (GetKeyState(vbKeyTab) And &HF0000000) = &HF0000000 And _
            Not (GetKeyState(vbKeyLeft) And &HF0000000) = &HF0000000 And _
            Not (GetKeyState(vbKeyRight) And &HF0000000) = &HF0000000 And _
            Not (GetKeyState(vbKeyUp) And &HF0000000) = &HF0000000 And _
            Not (GetKeyState(vbKeyDown) And &HF0000000) = &HF0000000 Then
            With Target
                
                If .Count = 1 Then
                    
                    If Not IsEmpty(.Value) Then
                        
                        Set objCell = Worksheets("Tabelle2").Columns(1).Find(What:=.Value, _
                            LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)
                        
                    End If
                    
                    If objCell Is Nothing Then
                        
                        'Userform anzeigen
                        UserForm1.Show
                        
                    Else
                        Set objCell = Nothing
                    End If
                End If
            End With
        End If
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: Unterschiedliche Ereignisse bei Zellauswahl
17.06.2017 07:58:44
Matze
Hallo Nepumuk.
Vielen Dank für deine Hilfe.
Die Lösung funktioniert perfekt für meine Anwendung.
Du hast mir viel Zeit und Nerven damit erspart und ich hab dabei noch viel gelernt :)
Mfg Matze

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige