我有一个小的 vab 脚本,可以在 Firefox 中为特定站点打开一个新选项卡,并在其中输入一些数据。我必须一遍又一遍地这样做,并注意到每次打开选项卡时,焦点都会丢失 - 而且确实是每次打开。
我想知道这是 vba 还是 firefox 的问题,以及可以采取什么措施来避免这种情况。目前,我只是再使用一条 vba 行将焦点设置到新打开的选项卡,但我不明白问题首先发生在哪里。
您可以使用以下 vba 代码进行测试:
Sub Test_Firefox()
'Shell """C:\Program Files\Mozilla Firefox\firefox.exe"" -safe-mode"
Shell """C:\Program Files\Mozilla Firefox\firefox.exe"" -new-tab www.google.de"
Shell """C:\Program Files\Mozilla Firefox\firefox.exe"" -new-tab www.google.de"
'Shell """C:\Program Files\Mozilla Firefox\firefox.exe"" -new-tab www.google.de"
End Sub
打开标签一三次,焦点在google搜索,但打开两次,焦点就丢失了,看不清在哪里。
我在安全模式下尝试了 Firefox、不同的 Firefox 版本(ESR 和发行版)和两台笔记本电脑(但均装有 Microsoft 365)。
对我来说,第四个就发生了。我相信这不是 VBA 问题。更多的是 Firefox 的处理方式。
尝试给 Firefox 一些时间来处理命令。
Option Explicit
Sub Test_Firefox()
Shell """C:\Program Files\Mozilla Firefox\firefox.exe"" -new-tab www.google.de"
Wait 1 '<~~ Wait for 1 second
Shell """C:\Program Files\Mozilla Firefox\firefox.exe"" -new-tab www.google.de"
Wait 1
Shell """C:\Program Files\Mozilla Firefox\firefox.exe"" -new-tab www.google.de"
Wait 1
Shell """C:\Program Files\Mozilla Firefox\firefox.exe"" -new-tab www.google.de"
Wait 1
End Sub
Private Sub Wait(ByVal nSec As Long)
nSec = nSec + Timer
While nSec > Timer
DoEvents
Wend
End Sub
我也建议不要使用这种方法。使用适用于 Firefox 的 Selenium WebDriver。这样比较靠谱。还有一件事。如果用户使用 Microsoft Store 而不是在线/离线安装程序安装 Firefox,您的代码将会失败。