excel - 在 MS Access VBA 中选择 Excel 范围抛出 1004 错误
问题描述
我有一个接收文件名并打开文件以将一系列数据复制到 Access 数据库中的过程。
如果我一次运行一个文件,它会起作用。
当我将第二个文件传递给它时,它会抛出
对象“_Global”的方法“范围”失败。
如果我关闭并重新开始就可以了。
我已经阅读了有关此错误的其他问题并尝试了不同的方法。
我确认任何文件都没有任何不同。我一次运行至少 15 个文件,并且一个接一个地运行良好。我尝试以不同的方式调用范围,使用 Select 而不是范围等。
我在 Access 2010 和 Access 2016 中都试过了。
错误发生在下面的 >>> PROBLEM HERE 行之后。
Dim appExcel As Excel.Application
Dim myWorkbook As Excel.Workbook
Dim mysheet As Excel.Worksheet
Set appExcel = CreateObject("Excel.Application")
Set myWorkbook = appExcel.Workbooks.Open(vfilepath & "\" & vfilename)
appExcel.Visible = True
With appExcel
With appExcel.Worksheets("Sheet1").Activate
' >>> PROBLEM HERE
Worksheets("Sheet1").Range("B2", Range("N2").End(xlDown)).Select
Selection.Copy
End With
DoCmd.OpenTable "tblExcelImport_Main", acViewNormal
DoCmd.RunCommand acCmdPasteAppend
DoCmd.Close acTable, "tblExcelImport_Main", acSaveYes
myWorkbook.Close
appExcel.Quit
Set appExcel = Nothing
Set myWorkbook = Nothing
rst.Close
cnn.Close
End With
End If
我需要遍历每个文件直到完成(大约 25 个文件 - 没有一个很大)。
解决方案
这里有很多问题:
- 不必要
Select
的Activate
和 - 不合格
Worksheets
的参考。访问不知道Worksheets
,那会出错 - 不合格
Range
的参考。访问不知道Range
,那会出错 - 虽然您已经编码了
With
块,但您实际上并没有使用它们 - Excel.Application 对象没有 Worksheets 集合
- 以错误的顺序清理对象
如果此代码是用 Excel VBA 编写的,则 unqualifiedWorksheets(...
将暗示ActiveWorkbook.Worksheets(...
,而 unqualifiedRange(...
将暗示ActiveSheet.Range(...
由于此代码是用 Access VBA 编写的,因此 VBA 无法解析那些隐式引用。
因此,所有 Excel 对象和方法都必须完全限定回 Excel 应用程序对象appExcel
重构:
Set appExcel = CreateObject("Excel.Application")
Set myWorkbook = appExcel.Workbooks.Open(vfilepath & "\" & vfilename)
'...
Set mysheet = myWorkbook.Worksheets("Sheet1")
With mysheet
.Range("B2", .Range("N2").End(xlDown)).Copy
End With
'....
Set mysheet = Nothing
myWorkbook.Close
Set myWorkbook = Nothing
appExcel.Quit
Set appExcel = Nothing
推荐阅读
- html - 浏览器如何决定使用哪些数据来自动填充每个输入?
- html - rmarkdown中重叠图像的问题
- php - 语法错误,意外的“请求”(T_STRING),期望函数(T_FUNCTION)或const(T_CONST)Laravel
- java - 如何使谷歌地图 API 标记可点击并打开新活动?
- android - 在一个片段中多次向下滑动手势
- key - 如何显示我刚刚使用 gpg 生成的密钥对的实际公钥/私钥?
- javascript - JS:第一次后调用的函数导致空错误
- javascript - JQuery 元素在滚动时淡入 - 但在某个点
- dictionary - 使用元组向字典键添加值
- powershell - 如何在powershell中结合名字和姓氏?