Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何在截屏前等待一段时间?_Excel_Vba_Automation_Screen Capture_Pause - Fatal编程技术网

Excel 如何在截屏前等待一段时间?

Excel 如何在截屏前等待一段时间?,excel,vba,automation,screen-capture,pause,Excel,Vba,Automation,Screen Capture,Pause,因此,我有下面的代码,它单击一个按钮,然后捕获屏幕。但问题是,它捕获了我单击按钮之前的屏幕,因为这一切在VBA中发生得太快了。因此,我在捕获屏幕之前放置了一个应用程序。Wait语句,但它没有帮助,同样的事情发生了。如果我将应用程序.Wait语句放在调用keybd_事件(VK_快照,0,0)之前,那么出于某种原因,它会复制并粘贴实际的代码,而不是奇怪的屏幕捕获。因此,我想知道如何等待,以便它在有机会加载后捕获屏幕。我只包含了重要的代码。我使用两个屏幕(监视器),因此我与另一个屏幕上的网页进行交互

因此,我有下面的代码,它单击一个按钮,然后捕获屏幕。但问题是,它捕获了我单击按钮之前的屏幕,因为这一切在VBA中发生得太快了。因此,我在捕获屏幕之前放置了一个
应用程序。Wait
语句,但它没有帮助,同样的事情发生了。如果我将
应用程序.Wait
语句放在
调用keybd_事件(VK_快照,0,0)
之前,那么出于某种原因,它会复制并粘贴实际的代码,而不是奇怪的屏幕捕获。因此,我想知道如何等待,以便它在有机会加载后捕获屏幕。我只包含了重要的代码。我使用两个屏幕(监视器),因此我与另一个屏幕上的网页进行交互

Sub getTest()
    Dim CurrentPosition As POINTAPI

    Application.Wait (Now + TimeValue("0:00:02"))
    Call GetCursorPos(CurrentPosition)
    Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
    Call mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)

    Call CopyScreen
End Sub

Sub CopyScreen()
    Call keybd_event(VK_SNAPSHOT, 0, 0, 0)

    Workbooks.Add
    ActiveSheet.Paste

    ActiveWorkbook.SaveAs Filename:="TBD"
    ActiveWorkbook.Close
End Sub

您是否正在使用IE并打算捕获该屏幕/窗口

您可能需要等待页面完成加载。等待一段时间并不能保证它已经完成加载

这就是我过去用来加载页面并确保在进入代码的下一步之前完成页面的方法(当然我从来没有想过要截图)

我希望这有帮助


Josh

您可以尝试调用一个通用的“暂停”过程,例如:

Sub Pause(seconds As Single)
    Dim tmr As Single
    tmr = Timer
    Do
        DoEvents
    Loop Until Timer > (seconds + tmr)
End Sub

(…或者同样的东西,但以我通常使用的更“压缩”的方式:)


调用该过程的简单方式如下:

Pause 5
…暂停五秒钟,同时仍允许系统事件发生

不幸的是,如果试图使用鼠标/键盘事件来控制这样的应用程序,您将会遇到很多麻烦。您可能需要考虑使用一个更适合自动化的单独应用程序。或者,也许您可以找到另一种获取图像的方法,具体取决于图像所在的应用程序


更多信息:
  • Microsoft文档:

您可以使用
应用程序.OnTime
事件在5秒后调用函数:

Sub getTest()
    ' ...
    Call Application.OnTime (Now + TimeValue("00:00:5"), "CopyScreen")
End Sub

嗨,我实际上在使用一个叫彭博的软件。不是IE,但这个问题不需要了解彭博社@此外,您可能需要在屏幕截图之后、粘贴之前暂停半秒钟左右,以便将数据缓冲到剪贴板上。这个软件没有内置的屏幕捕获功能吗?实际的文本不是比它的图像更好吗?(或许可以尝试谷歌搜索“彭博浏览器刮擦”)。。。祝你好运如果可能的话,我会考虑使用selenium basic
Pause 5
Sub getTest()
    ' ...
    Call Application.OnTime (Now + TimeValue("00:00:5"), "CopyScreen")
End Sub