gpt4 book ai didi

vba - 停止密集的文件处理?

转载 作者:行者123 更新时间:2023-12-04 22:01:40 25 4
gpt4 key购买 nike

我正在使用以下函数将文件读入电子表格。我正在考虑添加一个停止按钮( something like this ),但问题是,当它运行时,它完全锁定了 Excel,我无法以任何方式与之交互。有没有办法优雅地停止这样的事情?请注意,这些是巨大的文件(超过 500,000 行)

Function LoadFile(m)
Dim WrdArray() As String
Dim txtstrm As TextStream
Dim line As String
Dim clm As Long
Dim Rw As Long
Dim Dash As Worksheet
Set Dash = Sheets("Dashboard")
Set cellStatus = Dash.Range("E3")
Set txtstrm = FSO.OpenTextFile("s:\views_" & m & ".txt")
Rw = 1
Do Until txtstrm.AtEndOfStream
If Rw Mod 4 = 0 Then cellStatus.Value = "Loading " & m & "... /"
If Rw Mod 4 = 1 Then cellStatus.Value = "Loading " & m & "... |"
If Rw Mod 4 = 2 Then cellStatus.Value = "Loading " & m & "... \"
If Rw Mod 4 = 3 Then cellStatus.Value = "Loading " & m & "... -"
line = txtstrm.ReadLine
clm = 1
WrdArray() = Split(line, "|!|")
For Each wrd In WrdArray()
Sheets(m).Cells(Rw, clm) = wrd
clm = clm + 1
Next wrd
Rw = Rw + 1
Loop
txtstrm.Close
LoadFile = Rw
End Function

最佳答案

首先,关闭屏幕刷新和计算。

Application.ScreenUpdating = False
Application.Calculation = xlManual

然后在最后,重新打开
Application.ScreenUpdating = True
Application.Calculation = XlCalculationAutomatic

此外,如果您添加某种类型的计数器,在 X 次迭代后提示用户是否继续,例如
Dim myCount as Long
...your loop starts here
myCount = myCount + 1
If myCount mod 1000 = 0 then
toContinue = msgBox("Continue with macro?",vbYesNo)
If toContinue = vbNo then exit sub
End if
...continue loop

编辑:呸,我得调整一下 If myCount mod 1000 = 0更好的东西......基本上是1000或其他东西的偶数。

另外,是否需要加载“动画”?我敢打赌,这会导致在运行这么多细胞时需要很长时间。而且,想想看,当你关闭屏幕更新时,你不会看到那个动画,所以也许把它注释掉,看看它是如何运行的。

关于vba - 停止密集的文件处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33640065/

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