Avatar billede madsmpedersen Nybegynder
10. maj 2005 - 17:52 Der er 5 kommentarer og
1 løsning

Findes VBA-keydown event i et MS Word dokument

Er det muligt at få et VBA-event, hver gang man trykker på en tast i MS Word.
Avatar billede hiks Nybegynder
11. maj 2005 - 10:56 #1
jeg vil tro det tætteste du kommer på det er hvis du tilføjer kontrolelementer som textbox o.l. til dit dokument, der finder du eventet?

/hiks
Avatar billede madsmpedersen Nybegynder
11. maj 2005 - 11:53 #2
Det er til at vise skrivehastighed.
I øjeblikket har jeg lavet en userform med en textbox på. Når man er færdig trykker man på en knap der sætter teksten ind i worddokumentet.
Men det ville være meget bedre, hvis man kunne gøre det direkte i word, og på den måde have glæde af løbende stavekontrol, autokorrektur og autogem.
Avatar billede hiks Nybegynder
11. maj 2005 - 13:01 #3
ok - jeg tænkte lige og kommer bare lige med et simpelt forslag til det. Hvad med en "Start/Slut"-knap i Word.

Prøv at tilføje en CommandButton og navngiv den: cmdStartSlut

Tilføj følgende:

Public StartTid As String
Private Sub cmdStartSlut_Click()

    If cmdStartSlut.Caption = "Start" Then
        StartTid = Now
        ActiveDocument.Activate
        cmdStartSlut.Caption = "Slut"
    Else
        Dim secs As Long, chrs As Long
        secs = DateDiff("s", StartTid, Now)
        chrs = ActiveDocument.Characters.Count
        MsgBox "Skrivetid: " & SecToTime(secs) & vbCrLf & _
              "Tegn m. mellemrum: " & chrs & vbCrLf & _
              "Skrivehastighed chrs/sec: " & chrs / secs
        cmdStartSlut.Caption = "Start"
    End If

End Sub
Public Function SecToTime(Seconds As Long) As String
   
    Dim lngHours As Long
    Dim lngMinutes As Long
    Dim lngSeconds As Long
   
    lngSeconds = Seconds Mod 60
    lngMinutes = (Seconds \ 60) Mod 60
    lngHours = (Seconds \ 3600)
   
    SecToTime = lngHours & ":" & Format(lngMinutes, "00") & ":" & Format(lngSeconds, "00")

End Function

/hiks
Avatar billede madsmpedersen Nybegynder
11. maj 2005 - 13:34 #4
Tak for forslaget. Det var ikke lige det jeg søgte, for jeg vil gerne løbende kunne se skrive hastigheden og fejlprocenten(backspace), men det gav mig ide til en løsning.
Jeg laver en lille bitte textbox til at opfange tasttrykkene og løbende skriver jeg så bogstaverne i dokumentet. Det er selvfølgelig ikke optimalt, fordi man ikke kan flytte rundt i teksten med musen, men jeg tror det bliver godt nok.
Hvis du laver et svar får du pointene.
Avatar billede hiks Nybegynder
11. maj 2005 - 19:25 #5
godt jeg kunne sprede lidt ideer.. :o)

prøv evt også dette (sættes ind i ThisDocument og tilføj en etiket/label, navngivet lblchr):

Sub timerMsg()
    Dim alertTime
   
    ActiveDocument.Activate
    lblChr = ActiveDocument.Characters.Count
    alertTime = Now + TimeValue("00:00:01")
    Application.OnTime alertTime, "timerMsg"

End Sub

Ressourcemæssigt ved jeg ikke helt hvordan den tager det men den fyrer i hvert fald eventet af hvert sekund.

/hiks
Avatar billede madsmpedersen Nybegynder
14. maj 2005 - 19:42 #6
I praksis viste det sig at ideen med at lade en textbox reagere på keydown og så sætte det rigtige bogstav ind i dokumentet var alt for langsomt/resourcekrævende. Cursoren blev væk og nogle tegn blev først indsat når sammen med næste tegn. Desuden var det ret besværlig at indsætte de rigtige bogstaver, tal og tegn.

Jeg kunne ikke få ontime funktionen til at virke. Den kom bare med det samme, i stedet for med forsinkelse, men det gav mig igen en ide. Jeg lavede en ActiveX timer i VB6 og lader den ”ringe” hvert 1/10 sek.
På den måde kan jeg også holde styr på fejltast(backspace/delete), hvis man ikke når at skrive et nyt bogstav inden timeren ”ringer” igen.

Tak for hjælpen
Med venlig hilsen
Mads M Pedersen
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