Avatar billede bluestrike Nybegynder
17. oktober 2003 - 09:55 Der er 9 kommentarer og
1 løsning

Hvordan kan man bruge en Timerkontrol i VBA til Excel?

Jeg ville meget gerne lave en telefonbog i et Excelark, hvor det er muligt at søge via filtre ved bare udenvidere at skrive på tastaturet. Dette ville jeg i Java eller eller C++ lave med keylisteners. I Visual Basic havde jeg læst mig til at det kan lade sig gøre ved at oprette en timer og så kalde en rutine der lytter efter keypresses.
Havde kigget lidt på denne kode:

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Sub auto_open()
    Application.OnKey "{F12}", "Form_Load"
End Sub
Private Sub Form_Load()
  Timer1.Interval = 50
End Sub
Private Sub Timer1_Timer()
Dim i, KeyResult As Integer
  For i = 0 To 255
  KeyResult = GetAsyncKeyState(i)
    If KeyResult = -32767 Then
      If i = 122 Then
        MsgBox "F11"
      End If
    End If
  Next i
End Sub

Nu har jeg så via denne tråd: http://www.eksperten.dk/spm/415034 fundet ud af at man ikke kan bruge timere direkte i VBA. Nu er mit spørgsmål så om der er nogen der har en løsning på mit problem. Nogen gode foreslag til hvordan man eventuelt kan implementere en timer, eller en anden måde at teste for keypresses.
Avatar billede lokespas Nybegynder
17. oktober 2003 - 10:32 #1
du kan lave din egen:

Option Explicit

Private Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, _
  ByVal uElapse As Long, ByVal lpTimer As Long) As Long

Private Const MY_NID = 88
Private Const MY_ELAPSE = 1000 'et sekund

Sub Main()
  Dim rVal As Long

  rVal = SetTimer(Form1.hWnd, MY_NID, MY_ELAPSE, _
    AddressOf MyWin_Event)
End Sub

Sub MyWin_Event()
    'bliver kaldt hvert sekund
  Debug.Print "asf"
End Sub
Avatar billede bluestrike Nybegynder
17. oktober 2003 - 10:43 #2
Hmm.. har lige et par spørgsmål... Form1?? Er det en UserForm? For hvis det er det, så har jeg ikke en option der hedder hWnd.
Avatar billede lokespas Nybegynder
17. oktober 2003 - 11:10 #3
det virker hvis du sætter hwnd = 0
Avatar billede bluestrike Nybegynder
17. oktober 2003 - 11:12 #4
Jeg får en fejl.. Variable not defined... Er Form1 en UserForm?? Hvis det er, så har jeg ikke hWnd som option på mine UserForme.. ?
Avatar billede lokespas Nybegynder
17. oktober 2003 - 11:20 #5
rVal = SetTimer(0, MY_NID, MY_ELAPSE, _
    AddressOf MyWin_Event)
End Sub
Avatar billede bluestrike Nybegynder
17. oktober 2003 - 11:29 #6
Okay, I got the timer working... Now.. inside the timer sub i would like to test for keypresses... Anyone know how?
Avatar billede bluestrike Nybegynder
17. oktober 2003 - 11:34 #7
LOL.. Har vist skrevet lidt for meget på de engelske forums... ;-)
Avatar billede lokespas Nybegynder
17. oktober 2003 - 12:10 #8
Avatar billede bluestrike Nybegynder
17. oktober 2003 - 12:15 #9
Okay... Og de links skal jeg uddrage hvad fra?? Skal jeg kalde Windows api'et bare for at få afvide om der er trykket en tast ned?
Avatar billede lokespas Nybegynder
17. oktober 2003 - 12:46 #10
så brug din egen kode fra sidste eksp.

Sub MyWin_Event()
Dim i, KeyResult As Integer
  For i = 0 To 255
  KeyResult = GetAsyncKeyState(i)
    If KeyResult = -32767 Then
      If i = 122 Then
        MsgBox "F11"
      End If
    End If
  Next i
End Sub
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester