Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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
Vba 代码未在所有打开的工作簿上运行_Vba_Excel_Excel 2010 - Fatal编程技术网

Vba 代码未在所有打开的工作簿上运行

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:="

这是一个贯穿所有打开的工作簿的代码,但有一个问题,它运行了10到12次,然后停止。谁能告诉我一些想法

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