vba Excel / KeyDown Event activeren met CommandButton / Hoe?

Status
Niet open voor verdere reacties.

Wocky

Gebruiker
Lid geworden
22 feb 2014
Berichten
192
Beste,

Kan iemand mij uitleggen hoe ik een KeyDown-Event kan activeren door het drukken op een CommandButton?

Ik heb een ListBox, waarin lege regels staan (= de bedoeling).
Als ik op "PijlNaarBeneden" druk, dan verspringt de selectie in de LisBox naar het eerstvolgende record met waarde in.

Ik zou dit event ook willen triggeren door op een CommandButton te klikken.
Heb onderstaande code geprobeerd, maar zonder succes.

Kan iemand mij op weg helpen?
Ik zou de juiste KeyCode nodig hebben denk ik... maar vind ze niet.
Heb onderstaande website al gecheckt... "0x28" werkt niet...
https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/keycode-constants

Is moeilijk om een voorbeeld hiervan te posten... zonder heel m'n code vrij te geven (wat het er vermoedelijk niet duidelijker op gaat maken), anders zou ik het wel doen.

Code Event (werkt):
Korte Toelichting: Als ik op Keybord "PijlNaarBeneden" of "PijlNaarBoven" druk, springt selectie naar 1st volgende gevulde record.
Op het einde (of begin) van de listbox kan de selectie natuurlijk niet verder, om error te vermijden ga ik terug naar laatste selectie.
Code:
Private Sub ListBoxTitels_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbKeyDown Then
        On Error GoTo ErrorHandlingKeyDown
            Do Until ListBoxTitels.List(ListBoxTitels.ListIndex + 1, 1) <> ""
                ListBoxTitels.Selected(ListBoxTitels.ListIndex + 1) = True
            Loop
    End If
    
    If KeyCode = vbKeyUp Then
        On Error GoTo ErrorHandlingKeyUp
            Do Until ListBoxTitels.List(ListBoxTitels.ListIndex - 1, 1) <> ""
                ListBoxTitels.Selected(ListBoxTitels.ListIndex - 1) = True
            Loop
    End If
    Exit Sub
    
ErrorHandlingKeyDown:
        With ListBoxTitels
            .Selected(.ListIndex - 2) = True
        End With
    Exit Sub
    
ErrorHandlingKeyUp:
        With ListBoxTitels
            .Selected(.ListIndex + 2) = True
        End With
    Exit Sub
End Sub

Code CommandButtond (werkt niet)
Code:
Private Sub CommandButton4_Click()
    Call ListBoxTitels_KeyDown(vbKeyDown)
    
End Sub

Ik krijg onderstaande foutmelding
1.JPG
 
Laatst bewerkt:
Probeer het zo:
Code:
Private Sub CommandButton4_Click()
    ListBoxTitels.SetFocus
    Application.SendKeys({DOWN})
End Sub

Al vind ik het een vreemde manier van werken.
 
Laatst bewerkt:
Een spinbutton lijkt me handiger dan een knop.
En sendkeys binnen Excel is een teken van onkunde.

Code:
Private Sub Commandbutton1_Click()
  if listbox1.listindex<listbox.listcount -1 then listbox1.listindex=listbox1.listindex+1
End Sub

NB. Als programmacode ingewikkelder wordt dan het op te lossen probleem, schiet automatisering zijn doel voorbij.
 
Laatst bewerkt:
Probeer het zo:
Code:
Private Sub CommandButton4_Click()
    ListBoxTitels.SetFocus
    Application.SendKeys({DOWN})
End Sub

Al vind ik het een vreemde manier van werken.

Bedankt voor je reactie.
Is dit de enige manier om zo'n KeyDownEvent te activeren vanuit een commandbutton?
(ik stel deze 2de vraag nu vooral om te achterhalen (uit interesse) hoe je algemeen een event indirect kan aanspreken vanuit een procedure die niet direct iets met het bepaalde FormControlEvent te maken heeft).
...

Ik zou ook gewoon de betreffende code die ik wil laten uitvoeren, in een aparte module kunnen schrijven, en dan gewoon deze module aanspreken vanuit welk event dan ook... is waarschijnlijk meer gebruikelijk...

Groeten Wocky
 
Laatst bewerkt:
Je kan gewoon een routine maken die je vanuit andere routines aanroept, zonder er eerst een ander event voor te genereren.
 
Het betere antwoord geef je zelf al in post #4, maar zoek eens op CallbyName

++ of je dit event aan de praat krijgt (een toetsenbord key-down meegeven) vraag ik me overigens af
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan