• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

OnKeyPress Functie

Status
Niet open voor verdere reacties.

dionikink

Gebruiker
Lid geworden
14 mrt 2009
Berichten
83
Hallo,

Ik wil graag een macro maken waardoor ik met slechts één druk op een knop (in mijn geval CTRL (KeyCode 17)) de waarde van de actieve cel kan veranderen naar de huidige tijd.

Ik heb al een klein beetje, maar het lukt me niet om die OnKeyPress functie erin te krijgen.

Code:
If KeyCode = 17 Then
ActiveCell.Value = Time()
End If

Dit werkt dus niet.


Bij voorbaat dank
 
Code:
Sub TijdInvullen()
ActiveCell = Time()
End Sub

deze macro via het macro menu koppelen aan een toets

groet sylvester
 
Laatst bewerkt door een moderator:
Ah, dus ik hoef in de macro nergens een toets te definiëren?

EDIT: Hoe koppel ik de macro aan een toets? Ik kan het niet vinden.
 
Laatst bewerkt:
Extra >> Macro >> Macro's >> Macronaam selecteren >> Opties
 
Dat is een sneltoets. Wat ik bedoel is één enkele knop. Ik zal even een voorbeeldje in ActionScript2 geven:

Code:
if(Key.getCode() == 17)
{
          ActiveCell.Value = getTime()
}

Let niet op het gedeelte tussen { en }, ik wist niet wat ik er neer moest zetten. Maar het gaat om het eerste 'if' gedeelte. Ik wil alleen de Ctrl toets indrukken en dan deze code uitvoeren.
 
Laatst bewerkt door een moderator:
Volgens mij is 17 niet de CTRL toets maar de CTRL-Q toetscombinatie.
 
Laatst bewerkt:
Ctrl is 17, maar dat maakt niet uit, het gaat mij om de code die ik nodig heb.
 
Laatst bewerkt door een moderator:
Keypress-events werken voor zover ik weet enkel in Controls.
Waar jij baat bij kan hebben is Application.OnKey
 
Ik wil graag een macro maken waardoor ik met slechts één druk op een knop (in mijn geval CTRL (KeyCode 17))
Waar jij baat bij kan hebben is Application.OnKey

alleen CTRL krijg ik niet voor elkaar

maar een van de letter cijfer of functie of vele andere toetsen is geen probleem met Application.OnKey

ik ben benieuwd of iemand het met alleen de CTRL voor elkaar krijgt

groet sylvester
 
De CTRL key is een zogenaamde STATE key. De status is Pressed of Depressed en dat kan worden gecontroleerd bij een andere actie. Ik gebruik bijvoorbeeld in een Userform_Initialize de volgende controle:

Code:
    If (GetAsyncKeyState(VK_CONTROL) And &H8000) Then
        'Actie als CTRL toets is ingedrukt
    End If

Maar het is dus altijd in combinatie met een ander event. Volgens mij is er geen event die door het indrukken van de CTRL toets wordt geactiveerd.

GetAsyncKeyState zit in de user32.dll

Code:
Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
 
Laatst bewerkt:
hallo edmoor
ik heb dit geprobeerd in vb
Code:
Declare Function GetKeyState Lib "user32" (ByVal vKey As Long) As Integer

Sub test()
    For n = 1 To 10000000
        a = GetKeyState(VK_LCONTROL)
        If a <> 0 Then
            ActiveCell = Time()
            Exit For
        End If
    Next n
End Sub



maar als ik test start en de VK_LCONTROL toets indruk komt er geen tijd in de acticecell te staan.

groet sylvester
 
Je code is ook niet helemaal juist. Probeer het eens zo:

Code:
Declare Function GetKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Const VK_LCONTROL = &H11

Sub test()
    For n = 1 To 10000000
        a = GetKeyState(VK_LCONTROL)
        If (a And &H8000) Then
            Msgbox "Left Control is Pressed"
            Exit For
        End If
    Next n
End Sub

Oh! En &H11 is inderdaad 17 ;)
 
Laatst bewerkt:
hallo edmoor
als ik deze code test blijkt hij wisselend te reageren
soms met -127 of -128 en
soms met 0 of 1
en soms helemaal niet

Code:
Declare Function GetKeyState Lib "user32" (ByVal vKey As Long) As Integer
Sub test()
    Sheets(1).Cells.ClearContents
    For r = 1 To 35
        For k = 1 To 35
        Cells(r, k) = GetKeyState(17)
        Application.Wait (Now + 0.000006)
'als ik de wachttijd korter zet reageert hij helemaal niet op ce LCONTROL toets
        Next k
    Next r
End Sub

ik vraag of dionikink een andere toets kan gebruiken
eentje die met Application.OnKey "1", "macro1" of zo werkt

dionikink: is dat mogenlijk?

groet sylvester
 
Je hebt het ook niet gedaan zoals in mijn voorbeeld. Ik heb je eigen code iets aangepast en zo werkt het bij mij prima.

Code:
Private Declare Function GetKeyState Lib "user32" (ByVal vKey As Long) As Integer
Sub test()
    Sheets(1).Cells.ClearContents
    For r = 1 To 35
        For k = 1 To 35
        If GetKeyState(17) And &H8000 Then
            Cells(r, k) = "Down"
        Else
            Cells(r, k) = "Up"
        End If
        Application.Wait (Now + 0.000006)
        Next k
    Next r
End Sub
 
zo iets wordt het denk ik
Code:
Declare Function GetKeyState Lib "user32" (ByVal vKey As Long) As Integer

Function Key(Number As Integer) As String
    Application.Wait (Now + 0.000006)
    If GetKeyState(Number) And &H8000 Then
        Key = "Down"
    Else
        Key = "Up"
    End If
End Function
weet iemand of het op de een andere manier mogenlijk is zonder deze regel ?
Code:
Application.Wait (Now + 0.000006)
dit kost een seconde

groet sylvester
 
Die application.wait is helemaal niet nodig maar dan moet de CTRL toets al wel ingedrukt zijn op het moment dat de functie loopt.
Daarom zei ik eerder al dat het afhankelijk is van het event dat hem triggert.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan