vba Excel / procedure uitvoeren vanuit KeyDownEvent / Ongeacht welke control actief

Status
Niet open voor verdere reacties.

Wocky

Gebruiker
Lid geworden
22 feb 2014
Berichten
192
Beste,

Is er een manier om een procedure uit te voeren met een KeyDownEvent, ongeacht welke UserFormControl actief is (zolang Userform actief is).

In bijlage een voorbeeld van UserForm.
Ik zou graag wanneer ik "PijlNaarBeneden" druk, naar de volgende rij springen in de listbox.
Maar ik wil dit laten gebeuren, ongeacht welke Control actief is (TextBox 1, ..2, ..3, OptionButton 1, .. 2, enz...)

Ik zou voor elke control een KeyDownEvent kunnen schrijven... Iets zoals hieronder.
Maar lijkt me wat omslachtig...
Code:
Private Sub EenderWelkUserformControl_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Select Case KeyCode
        Case vbKeyDown
            Call ListboxRijOmlaag
            
    End Select
    
End Sub

Bestaat er een manier om een iets dergelijks te laten gebeuren, ongeacht welk control actief is?

Alvast bedankt.
Wocky

1.JPG
 
Laatst bewerkt:
Ik heb nou een paar keer op de Key Down gedrukt, maar er gebeurt niks in het plaatje.... Ik krijg langzaamaan het vermoeden dat een bestandje meer helderheid verschaft.
 
Daarnaast is het standaard om met de pijltjestoets omlaag naar de volgende regel in een listbox te gaan.
Ik heb dus geen idee waarom je daar zo moeilijk om wilt doen.
 
Daarnaast is het standaard om met de pijltjestoets omlaag naar de volgende regel in een listbox te gaan.
Ik heb dus geen idee waarom je daar zo moeilijk om wilt doen.

Ik wil gewoon niet 3x op pijltje naar beneden drukken voordat ik in lisbox ben... meer niet.
Als je in 1ste TextBox bent, en je drukt naar beneden, ga je 1st naar de OptionButton, dan moet je nog eens naar beneden drukken, dan ben je in ListBox, dan moet je nog eens naar beneden drukken, dan ben je een rij lager in listbox.
Maar ik zal wel een voorbeeldbestandje maken, maar zal voor morgen zijn...

Wocky

(In het UserForm dat ik heb gebruik zijn meer optionbutton, Checkboxen & TextBoxen... de afbeelding in bijlage is een vereenvoudigde versie)
 
Laatst bewerkt:
Ik wil gewoon niet 3x op pijltje naar beneden drukken voordat ik in lisbox ben... meer niet.
Als je 1x op de listbox klikt kan je al met de pijltjestoetsen omhoog en omlaag.
 
Ik wil gewoon niet 3x op pijltje naar beneden drukken voordat ik in lisbox ben... meer niet. Als je in 1ste TextBox bent, en je drukt naar beneden, ga je 1st naar de OptionButton, dan moet je nog eens naar beneden drukken, dan ben je in ListBox, dan moet je nog eens naar beneden drukken, dan ben je een rij lager in listbox.
Wel eens aan de tabvolgorde gedacht? En verder ben ik het met de anderen eens: je moet de werking van objecten niet willen vernaggelen. Een druk op de pijltjestoets in een listbox verplaatst de cursor binnen die listbox. Wat jij wilt (van de ene naar de andere listbox glippen) activeert de listbox, maar je zult nooit en te nimmer met de pijltjestoetsen iets kunnen selecteren, want zodra je op de pijl drukt, heb je de volgende listbox alweer te pakken. Luiheid is niet per definitie altijd beter...
 
In Bijlage een voorbeeld
Ik wil gewoon bij een druk op pijl naar beneden de volgende rij selecteren in de listbox, ongeacht welk control actief is.
Ik wil vermijden voor elk control code te typen.

In mijn toepassing heb ik allerlei knopjes om een tekst samen te stellen, die gegevens neemt vanuit een array... maar tegen dat ik heel het concept heb uitgelegd zijn we een uur verder.

De vraag is gewoon of het mogelijk is een actie uit te voeren met een KeyDown, ongeacht welke control actief is.
Meer niet.

Bekijk bijlage Voorbeeld_1.xlsm
 
Dan is het simpele antwoord nee. Tenzij je het er voor over hebt om met class modules te gaan werken:
https://www.businessprogrammer.com/vba-class-module-example/

Maar dat is meer werk dan per object op je formulier de keycode op te vangen en de daarvoor bedoelde routine uit te voeren die de listbox focus geeft en de betreffende actie uitvoert.
 
In mijn toepassing heb ik allerlei knopjes om een tekst samen te stellen, die gegevens neemt vanuit een array... maar tegen dat ik heel het concept heb uitgelegd zijn we een uur verder.

Dan denk ik dat het aan het onnodig gecompliceerde concept schort.

Wat is de zin naar een listbox te gaan waarin de gebruiker niets anders kan doen dan scrollen ?
 
Laatst bewerkt:
Zij bijgaand voorbeeldje, (bijna) alles kan, of het handig is laat ik het midden....
 

Bijlagen

  • een_mogelijkheid.xlsm
    21,5 KB · Weergaven: 31
Een alternatief

Klasse-module

Code:
Public WithEvents m_tekst As MSForms.TextBox

Private Sub m_tekst_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 40 Then m_tekst.Parent.ListBox1.ListIndex = m_tekst.TabIndex
End Sub

Userform

Code:
Dim v_controls() As New CatchEvents

Private Sub UserForm_Initialize()
  ReDim v_controls(Controls.Count)
    
  For Each it In Controls
    Select Case TypeName(it)
    Case "TextBox"
      Set v_controls(j).m_tekst = it
      j = j + 1
    End Select
  Next
     
  ListBox1.List = Blad1.Range("A1:a10").Value
End Sub
 

Bijlagen

  • __een_alternatief.xlsb
    18,6 KB · Weergaven: 27
Laatst bewerkt:
snb heeft in #13 een voorbeeld class module voor je uitgewerkt.
Doe er je voordeel mee :)
 
Dan denk ik dat het aan het onnodig gecompliceerde concept schort.

Wat is de zin naar een listbox te gaan waarin de gebruiker niets anders kan doen dan scrollen ?

Ik gebruik de ListBox als overzichtsorgaan.. meer hoeft het in deze niet te doen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan