Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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
Excel自动化错误仅在由于关闭工作簿而运行循环时发生_Excel_Vba_Loops - Fatal编程技术网

Excel自动化错误仅在由于关闭工作簿而运行循环时发生

Excel自动化错误仅在由于关闭工作簿而运行循环时发生,excel,vba,loops,Excel,Vba,Loops,下面是我的一个sub的一个片段,它可能会在3/4的时间内工作,每个用户都会有所不同。有一个触发它的主工作表(WBMaster),一个打开以创建合并文件(WBSum)的模板,以及14个单独的工作簿,其中包含复制并粘贴到合并文件中的范围(WBMar) 如果我在每个Mar文件之后停止运行代码,那么子文件将毫无问题地完成(因此我在每个Mar文件之后添加了一个等待,以查看这是否有帮助)。当我正常运行它时,它通常会给我一个“运行时错误”-2147221080(80040188)“:自动错误”,原因是所讨论的

下面是我的一个sub的一个片段,它可能会在3/4的时间内工作,每个用户都会有所不同。有一个触发它的主工作表(WBMaster),一个打开以创建合并文件(WBSum)的模板,以及14个单独的工作簿,其中包含复制并粘贴到合并文件中的范围(WBMar

如果我在每个Mar文件之后停止运行代码,那么子文件将毫无问题地完成(因此我在每个Mar文件之后添加了一个等待,以查看这是否有帮助)。当我正常运行它时,它通常会给我一个“运行时错误”-2147221080(80040188)“:自动错误”,原因是所讨论的WBMar未能打开或WBSum无明显原因关闭。如果有2/3的工作簿打开了,这不是崩溃,对吗?我想知道是不是因为腐败

当它是有问题的WBMar时,该文件无法打开,并显示一条消息,其中说明了这一点-我已仔细检查了文件位置/名称,正如我所说的,如果一步一步地执行,该文件将起作用。提前谢谢

Consolidate:

Application.StatusBar = "Preparing MAR files for import..."
On Error Resume Next
month_yr_rng = WBMaster.Sheets("Dashboard").Range("Month").Value & "_" & WBMaster.Sheets("Dashboard").Range("Year").Value
MarRepDir = WBMaster.Sheets("Dashboard").Range("marreportdir").Value

'open clean WB and save as consolidated
Application.StatusBar = "Opening blank template..."
Set WBSum = Workbooks("Consolidated MAR_" & month_yr_rng & ".xlsx")
WBSum.Close False
On Error GoTo 0
Set WBSum = Workbooks.Open(WBMaster.Sheets("Dashboard").Range("marblankfile").Value, , False)
    With WBSum
        .SaveAs Filename:=MarRepDir & "\Consolidated MAR_" & month_yr_rng & ".xlsx", FileFormat:=xlOpenXMLWorkbook
    End With
Set WBSum = Workbooks("Consolidated MAR_" & month_yr_rng & ".xlsx")

'Open each MAR, consolidating data

Set MarRange = WBMaster.Sheets("Dashboard").Range("marcirc,mar8a")

For Each MarCell In MarRange
On Error Resume Next
'open mar file
    marfile = WBMaster.Sheets("Dashboard").Range("mardir").Value & "\" & MarCell.Value
    
    Workbook.Close marfile
    Application.StatusBar = "Importing data from " & marfile
    Workbooks.Open marfile, True, True
    Set WBMar = ActiveWorkbook
    
    On Error GoTo 0
这是它通常失败的地方(见下文)


我会推荐一些
应用程序。在
之后等待
s。复制
行,甚至可能是
事件
。我打赌这个问题与复制和粘贴有关。谢谢!希望这有帮助…不知道为什么我的问题被否决了。。。
With WBSum
    .Sheets("Staffing Summary").Range("B3").Value = "All Circuits"
    .Sheets("Staffing Summary").Range("L3").Value = WBSum.Sheets("Staffing Summary").Range("L3").Value
    .Sheets("Staffing Summary").Range("M3").Value = WBSum.Sheets("Staffing Summary").Range("M3").Value
    .Sheets("Staffing Details").Range("U3").Value = WBSum.Sheets("Staffing Details").Range("U3").Value
    .Sheets("Staffing Details").Range("V3").Value = WBSum.Sheets("Staffing Details").Range("V3").Value
    .Sheets("Invoice Summary").Range("B3").Value = "All Circuits"
    .Sheets("Invoice Summary").Range("J3").Value = WBSum.Sheets("Invoice Summary").Range("J3").Value
    .Sheets("Invoice Summary").Range("K3").Value = WBSum.Sheets("Invoice Summary").Range("k3").Value
    .Sheets("Invoice Details").Range("B3").Value = "All Circuits"
    .Sheets("Invoice Details").Range("I3").Value = WBSum.Sheets("Invoice Details").Range("I3").Value
    .Sheets("Invoice Details").Range("J3").Value = WBSum.Sheets("Invoice Details").Range("I3").Value
    End With
    
'Staffing details
    Set oLastRow = WBSum.Sheets(sht_staffing).ListObjects(1).ListRows.Add
    WBMar.Sheets(sht_staffing).ListObjects(1).AutoFilter.ShowAllData
    WBMar.Sheets(sht_staffing).ListObjects(1).DataBodyRange.Copy
    oLastRow.Range.PasteSpecial xlPasteValuesAndNumberFormats
           
'Wage details
    Set oLastRow = WBSum.Sheets(sht_wages).ListObjects(1).ListRows.Add
    WBMar.Sheets(sht_wages).ListObjects(1).DataBodyRange.Copy
    oLastRow.Range.PasteSpecial xlPasteValuesAndNumberFormats

'Staffing Summary
    Set oLastRow = WBSum.Sheets(sht_stafftotals).ListObjects(1).ListRows.Add
    WBMar.Sheets(sht_stafftotals).ListObjects(1).ListColumns(1).DataBodyRange.Resize(, 4).Copy
    oLastRow.Range(, 1).PasteSpecial xlPasteValuesAndNumberFormats
    WBMar.Sheets(sht_stafftotals).ListObjects(1).ListColumns(11).DataBodyRange.Copy
    oLastRow.Range(, 11).PasteSpecial xlPasteValuesAndNumberFormats
    
    
'Wage/Inv Summary
    Set oLastRow = WBSum.Sheets(sht_wagetotal).ListObjects(1).ListRows.Add
    WBMar.Sheets(sht_wagetotal).ListObjects(1).ListColumns(1).DataBodyRange.Resize(, 2).Copy
    oLastRow.Range(, 1).PasteSpecial xlPasteValuesAndNumberFormats
    
    WBMar.Close False
    
    Set oLastRow = Nothing
    Set WBMar = Nothing

Application.Wait (Now + TimeValue("0:00:02"))

   Next MarCell