循环,刷新导致Excel运行缓慢

jtjikinw  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(141)

我正在尝试使用Excel for Mac中的VBA来查询数据库。简单的查询效果很好,我已经使用了很多年。现在我开始使用更复杂的查询,其中一个查询的结果(约1,000条记录)来再次查询数据库(大约1,000个连续查询)。(大约5,000条记录)在大约2.5分钟内返回,但是在Excel工作表中单击大约一分钟之后没有响应。这种行为又持续了2分钟左右,然后点击变得几乎是即时的。再次运行宏会得到类似的结果,但速度更慢。第三次甚至更慢。我怀疑内存泄漏。重新启动Excel会使问题重置。下面是实际查询的代码:

With ActiveSheet.QueryTables.Add(Connection:=strURL, Destination:=Range(strStartCell))
        .PostText = "user=" & strUserName & ";password=" & strUserPassword
        .RefreshStyle = xlOverwriteCells
        .SaveData = True
        .BackgroundQuery = False
        .Refresh
    End With

我尝试只发送第一个查询(这样它就可以获取构建其他查询所需的数据)。其余的,我构建查询,但不发送它。因此,在这个实验中,上面的代码只使用了一次。这样运行它,大概8秒钟就回来了。所以另外2分20+秒是在我的电脑和数据库之间来回的。更重要的是,这样运行之后,在它运行完之后没有滞后。所以看起来如果是内存泄漏,泄漏就在查询过程中,或者可能是数据的实际写入。
我已经以编程方式在开始时关闭了所有的屏幕更新、分页符显示和计算,并在结束时将它们返回到原始设置。
我的电脑是Mac mini(2014年末)3GHz英特尔酷睿i7,装有Office 2011,但我也试过在装有最新版本Excel的较新M1上运行它。速度快得多,但结果返回后的延迟虽然较短,但仍然是个问题。我的电脑代表了不久的将来电子表格将在哪里运行。
之后的延迟真的会扼杀项目的这一部分。有人以前见过这个问题吗?我能做些什么来跟踪导致问题的原因,如果有一个解决它的方法?

jyztefdp

jyztefdp1#

ChatGPT解决了我的问题,它指出我正在为1000多个查询中的每一个创建一个单独的查询表,而这些查询表正在消耗我的内存。导致我的应用程序变慢。它说如果我在With... End With块后面添加一个.Delete行,它会清除以前的查询表,而不会耗尽所有内存。答案略有不准确。删除需要进入块内部(在最后)。无论如何,我试过了,它使我的代码有些慢,但当它完成时,应用程序并不慢。这是我书中的一个胜利。
它进一步建议ADO可能在这方面做得更好。所以我想这是其他需要学习的东西。认为这可能对其他遇到类似问题的人有用。

相关问题