通过多个excel工作簿在Access循环中进行访问的VBA下标输出或范围错误

时间:2018-08-10 21:28:01

标签: excel vba excel-vba ms-access access-vba

我已经解决这个问题好几天了。我尝试了多种不同的方式。我试图将多个文件附加到Access链接表甚至临时表中,甚至附加到单个excel文件中。第一次尝试时,每次“单次启动”时,程序都会完美运行,然后停止运行一段时间,然后再次开始运行。当它停止运行时,出现下标超出范围的运行时错误9.我打开了正确的excel文件,但由于某种原因,它不允许我对其进行设置...如何打开文件,但在下一行可以'找到它吗???它使我发疯,它起作用了,它停止工作了,然后又起作用了...任何建议或提示将不胜感激。

这只是我尝试执行此操作的一种方法,但是它们都以相同的方式结束。

i = 2 'i is created through another loop previously.
j = 0
With MyXL
    .Visible = True
    .DisplayAlerts = True
End With

Do
    Set MyXL = CreateObject("Excel.Application")
    MyXL.Workbooks.Open Directory & fileArray(j), Notify:=False, ReadOnly:=False 'Tried True previously but changed since i was making changes to the file.
    Set wb = Workbooks(fileArray(j)) 'DING DING DING!!! WHY??? You WORKED before!!!
    If wb.Sheets("Sheet1").Range("A1") = "System Status" Then
        wb.Sheets("Sheet1").Range("A1") = "PO System Status"
        wb.Save
    End If
    wb.Close True
    Set wb = Nothing
    MyXL.Quit
    Set MyXL = Nothing
    Set wb = Nothing
    j = j + 1
Loop Until j = i

以前,我认为我没有正确关闭工作簿,但是我已经关闭了MyXL和以前的wb,但是仍然遇到错误。我想知道这是否是Access / vba不能连续做的事情。我将ReadOnly更改为true,但仍然以相同的方式结束。

1 个答案:

答案 0 :(得分:0)

将工作簿设置为Open方法的返回值:

Set wb = MyXL.Workbooks.Open(Directory & fileArray(j), Notify:=False, ReadOnly:=False) 
If wb.Sheets("Sheet1").Range("A1") = "System Status" Then
    wb.Sheets("Sheet1").Range("A1") = "PO System Status"
    wb.Save
End If

您不需要/不应该为每个文件创建一个新的Excel应用程序实例-在进入循环之前进行设置,并在完成文件更新后将其关闭。检查任务管理器,确保没有很多Excel实例挂起。