VBA MS-WORD使用sendkeys时出现问题

时间:2015-11-20 12:22:11

标签: vba ms-word sendkeys

我对此代码存在一些问题

Private Sub CortarSobrantes()
'Procedimiento que llama al comando "Comprimir imágenes" con parámetros
    With Application.CommandBars.FindControl(ID:=6382)
        SendKeys "%T%n%C{ENTER}", False ' Las letras equivalen a los accesos de teclado en la ventana, ~ para ejecucion
        .Execute
    End With
End Sub

如果我在项目中点击Run(F5),它运行正常,但当我尝试从按钮快捷方式调用它时,它不会捕获sendkeys。如果我尝试逐步运行它(F8)

,也会发生这种情况

BTW %T%n%C用于西班牙语命令组合(所有图像,不压缩,不更改分辨率和删除裁剪区域)

我错过了焦点的东西吗?

2 个答案:

答案 0 :(得分:1)

不确定您实际上想要实现的目标,但通常在VBA中通常会避免使用SendKeys()方法,因为它不可靠并且充其量只是错误。

SendKeys()会将虚拟击键发送到执行时具有焦点的窗口 - 所以时间就是一切。

如果您知道窗口标题中的完全文字,则可以使用AppActivate()方法在使用SendKeys()之前强制对焦

此外,SendKeys()被更广泛地视为最后的尝试"或者解决方法,因为90%的时间可以使用来可靠地获得相同的结果,尽管使用Win API时需要更高级的VBA /编程知识

答案 1 :(得分:0)

我在SendKeys语句上也遇到麻烦。
我正在尝试将Alt =发送到Word文档。从而在方程字段中更改一些数学公式。例如:((x_1 q + x_2 p)/(p + q),(y_1 q + y_2 p)/(p + q))
一段时间后,我发现SendKeys语句仅按公告方式工作,并且只有在我的宏中没有进一步的声明时才起作用。
我知道这有点尴尬,但确实如此。
请考虑以下内容:

Public Sub test()

    Dim test As String
    test = ActiveWindow.Selection.Text

    SendKeys "%=", True

'    MsgBox test

End Sub

这很好。
在Word文档中复制/粘贴上面的公式,在Word中打开VBA,制作一个新模块,然后将上面的Sub复制/粘贴到其中。
选择公式。
您必须从宏菜单(Alt + F8)启动Sub。
您会注意到,公式将在方程式字段中更改,并在中间居中。
再次运行宏,公式将改回标准文本格式。 现在激活MsgBox语句,您会发现SendKeys语句不再起作用。
我知道这几乎不是解决该问题的方法,但是也许有人会觉得此信息有用!