我有一个 VBA 用户表单,可以在 TextPad 中打开一个文本文件,其中包含以下内容:
Call Shell("C:\Program Files\TextPad 5\TextPad.exe " & "C:\testfile.txt", vbNormalFocus)
我希望文本文件显示在特定的行号处。
有没有办法将行号作为参数传递给这个 Shell 调用?
您可以使用 WScript.Shell.SendKeys 在 TextPad (ctrl-G) 中触发 goto line 快捷方式来完成此操作
Dim wshshell
Set wshshell = CreateObject("WScript.Shell")
Call Shell("C:\Program Files\TextPad 5\TextPad.exe " & "C:\testfile.txt", vbNormalFocus)
Application.Wait (10)
wshshell.SendKeys "^g" 'ctrl-G
Application.Wait (10)
wshshell.SendKeys "15" 'desired line number
Application.Wait (10)
wshshell.SendKeys "{ENTER}" 'enter
您可能不得不弄乱等待行来添加或删除命令之间的延迟,但我在 Excel 中的 VBA 模块中对此进行了测试,并且它有效。
我知道可以直接从 VBA 调用的 SendKeys,但是当我尝试使用它时,它似乎绑定到了 vba 编辑器窗口。
您也可以使用“-n”参数调用notepad++以获得相同的效果,
如果您切换屏幕或在命令执行时出现弹出窗口,则发送密钥(特别是延迟)可能是一件危险的事情,您可能会丢失数据或无意中在其他应用程序中执行危险操作。