Vba 代码未在所有打开的工作簿上运行
这是一个贯穿所有打开的工作簿的代码,但有一个问题,它运行了10到12次,然后停止。谁能告诉我一些想法Vba 代码未在所有打开的工作簿上运行,vba,excel,excel-2010,Vba,Excel,Excel 2010,这是一个贯穿所有打开的工作簿的代码,但有一个问题,它运行了10到12次,然后停止。谁能告诉我一些想法 Sub OpenAllWorkbooks() Set destWB = ActiveWorkbook Dim DestCell As Range FileNames = Application.GetOpenFilename( _ filefilter:="Excel Files (*.csv*),*.csv*", _ Title:="
Sub OpenAllWorkbooks()
Set destWB = ActiveWorkbook
Dim DestCell As Range
FileNames = Application.GetOpenFilename( _
filefilter:="Excel Files (*.csv*),*.csv*", _
Title:="Select the workbooks to load.", MultiSelect:=True)
If IsArray(FileNames) = False Then
If FileNames = False Then
Exit Sub
End If
End If
For n = LBound(FileNames) To UBound(FileNames)
Set wb = Workbooks.Open(Filename:=FileNames(n), ReadOnly:=True)
Next n
Dim cwb As Workbook
For Each cwb In Workbooks
'With Application
'cwb.AcceptAllChanges
'End With
Call donemovementReport
ActiveWorkbook.Close True
ActiveWorkbook.Close False
Next cwb
End Sub
为什么要一次打开所有工作簿?一个接一个地打开它们,然后在工作完成时关闭它们。例如(未经测试)
我用于在95%的情况下循环使用许多文件的解决方案-可能会有所帮助:
Sub CSV_Cycling()
InputFolder = "D:\DOCUMENTS\"
LoopFileNameExt = Dir(InputFolder & "*.csv")
Do While LoopFileNameExt <> ""
'Application.DisplayAlerts = False
Application.Workbooks.Open (InputFolder & LoopFileNameExt)
'Application.DisplayAlerts = True
[..........YOUR CODE..........]
LoopFileNameExt = Dir
Loop 'Input Folder Files Cycling
End Sub
Sub-CSV_循环()
InputFolder=“D:\DOCUMENTS\”
LoopFileNameExt=Dir(InputFolder&“*.csv”)
执行LoopFileNameExt“”
'Application.DisplayAlerts=False
Application.Workbooks.Open(InputFolder和LoopFileNameExt)
'Application.DisplayAlerts=True
[…….您的代码………]
LoopFileNameExt=Dir
循环“输入文件夹文件”
端接头
取消注释
Application.DisplayAlerts=
字符串以避免任何警告-如果需要(但要小心-文件将使用“默认”选项打开)并更改源路径。为什么ActiveWorkbook.Close True ActiveWorkbook.Close False
?我认为您可以将这两行更改为cwb.Close True
这是一种很好的做法,可以避免在使用对每个循环时修改或更改集合的成员。您可以尝试修改循环以使用计数器和(例如)工作簿(x)
谢谢Larry。这可能是问题之一。可能还有两个其他原因<代码>1
我不知道“donemovementReport Sub”是做什么的。调用ActiveWorkbook时可能会出现2
错误。关闭两次也可能会在关闭该集合中最后一个工作簿后关闭运行代码的工作簿。伙计们,别找我!我通常一次打开多个工作簿,donemovementReport会拾取数据并将其粘贴到donemovementReport打开的另一个工作簿(模板)上。我想保存粘贴数据的模板,但不保存源文件。我的代码做得很好,但不是在每个打开的文件上运行代码。怎么可能是内存问题?我有8gbs内存&这是一个i5。@user1960257:上面的代码将帮助您做到这一点。只需将其更改为保存相关文件,然后关闭另一个文件而不保存…@user1960257如何一次打开多个工作簿?如果它位于创建多个Excel实例的线程中,则为“是”。否则,您将在Excel的一个实例中逐个打开多个工作簿。=)从逻辑上讲,如果您查看文件->打开菜单
,它没有一次打开10个文件的选项,而是选择要打开的文件。。所以Siddarth代码就是这样做的。
Sub CSV_Cycling()
InputFolder = "D:\DOCUMENTS\"
LoopFileNameExt = Dir(InputFolder & "*.csv")
Do While LoopFileNameExt <> ""
'Application.DisplayAlerts = False
Application.Workbooks.Open (InputFolder & LoopFileNameExt)
'Application.DisplayAlerts = True
[..........YOUR CODE..........]
LoopFileNameExt = Dir
Loop 'Input Folder Files Cycling
End Sub