gpt4 book ai didi

excel - 等待 CSV 文件打开?

转载 作者:行者123 更新时间:2023-12-04 20:16:15 25 4
gpt4 key购买 nike

我正在尝试在 Excel 中使用 VBA 下载并打开一个 CSV 文件。当我逐步使用调试器时,我的代码工作正常,但是当我尝试正常运行它时它不起作用,它试图将信息从新打开的 CSV 文件复制到现有的 .xlsm 文件中,但没有找到任何事物。我找到了检查文件是否打开的方法,但我需要它继续检查,一旦它确实存在就继续使用代码。

以下是我如何下载文件:

Sub getFile(address)
On Error Resume Next
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = False
ie.navigate address
ie.Quit
Set ie = Nothing
On Error GoTo 0
End Sub

然后在调用 getFile 的 sub 中,
Do While Workbooks(Workbooks.Count).Name <> "file.csv"
Loop

我尝试了一些变体,当在调试器中缓慢运行时,它们都可以正常工作,否则会崩溃。有谁知道让它继续检查并等到文件打开的方法?它需要用户做一些事情来确保 file.csv 是打开的。我应该把我的支票放在 sub getFile 中还是在它被调用后保留它?

解决方案:
在下面接受 hnk 的建议后,我尝试了这个并且效果很好:
Sub getFile(address)
On Error Resume Next
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = False
ie.navigate address
Do While Workbooks(Workbooks.Count).Name <> "file.csv"
DoEvents
Loop
ie.Quit
Set ie = Nothing
On Error GoTo 0
End Sub

将检查移至关闭 IE 之前并添加 DoEvents到我的循环。

最佳答案

通常这种行为的发生不是因为代码逻辑而是因为中断。根据您环境的性质,它可能是两件事之一

  • 一些后台刷新过程在您的代码执行时间之间的某个时间执行,导致一些问题。例如在金融服务环境中,您的 Bloomberg API 可能会及时处理 BlpUpdate事件
  • 您的代码会阻塞大量时间并导致意外行为,因为在循环期间触发的事件被阻塞太久,等待您的代码在主线程上完成。

  • 因此,您需要尝试以下两种解决方案,其中一种应该可以

    对于第二个问题,在您的内部
    Do While Condition
    ' ... your code ...
    Loop

    添加一行代码来检查并清除任何待处理的事件队列,使其...
    Do While Condition
    DoEvents ' either put it at the start or at the end of your code
    ' ... your existing code ...
    Loop

    这将为系统提供一些“喘息空间”来结束未决事件。您需要尝试 DoEvents 的位置。代码。

    对于第一个问题,您可以尝试将整个循环包含在 Event Protected 中。代码区域,以确保它在任何干扰它之前完成运行。
    Application.EnableEvents = False

    'your loop and other code comes here

    Application.EnableEvents = True

    再一次,您可能需要进行一些试验和错误,以了解需要将多少代码放入无事件区域才能按预期工作。

    关于excel - 等待 CSV 文件打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24672024/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com