我对此代码存在一些问题
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
用于西班牙语命令组合(所有图像,不压缩,不更改分辨率和删除裁剪区域)
我错过了焦点的东西吗?
答案 0 :(得分:1)
不确定您实际上想要实现的目标,但通常在VBA中通常会避免使用SendKeys()
方法,因为它不可靠并且充其量只是错误。
SendKeys()
会将虚拟击键发送到执行时具有焦点的窗口 - 所以时间就是一切。
如果您知道窗口标题中的完全文字,则可以使用AppActivate()
方法在使用SendKeys()
之前强制对焦
此外,SendKeys()
被更广泛地视为最后的尝试"或者解决方法,因为90%的时间可以使用winapi来可靠地获得相同的结果,尽管使用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语句不再起作用。
我知道这几乎不是解决该问题的方法,但是也许有人会觉得此信息有用!