访问外部工作簿时VBA触发Run-time error '1004'错误求助
解决VBA读取Excel文件时的Run-time error '1004'问题
核心错误原因
代码存在变量初始化笔误:定义了fRow作为循环变量,但错误地给未声明的lRow赋值为4,导致fRow初始值为0。而Excel单元格的列号最小为1,Cells(1, 0)会直接触发1004对象定义错误。
修复方案
1. 修正变量初始化
将lRow = 4改为fRow = 4,确保循环变量从正确的起始列(第4列)开始。
2. 额外优化(避免其他潜在问题)
- 增加工作表存在性检查,防止因工作表名称错误导致报错
- 限制循环范围,避免找不到"PROJECT"时进入无限循环
- 优化代码结构,减少重复的工作表对象调用
修复后的完整代码
Private Sub ReadDataFromFile(filePath As String, Optional importSheetName As String, Optional exportSheetName As String) On Error GoTo ErrHandler Application.ScreenUpdating = False Dim src As Workbook Dim srcSheet As Worksheet Dim fRow As Long ' 打开源工作簿(只读模式) Set src = Workbooks.Open(filePath, True, True) ' 检查目标工作表是否存在 On Error Resume Next Set srcSheet = src.Worksheets("Stock_List") On Error GoTo ErrHandler If srcSheet Is Nothing Then MsgBox "错误:源文件中未找到名为Stock_List的工作表" GoTo Cleanup End If ' 初始化起始列(目标值在第1行,fRow代表列号) fRow = 4 ' 循环查找"PROJECT",限制循环范围避免无限循环 While fRow <= srcSheet.UsedRange.Columns.Count And srcSheet.Cells(1, fRow).Value <> "PROJECT" fRow = fRow + 1 Wend ' 处理查找结果 If fRow <= srcSheet.UsedRange.Columns.Count Then fRow = fRow - 1 ' 此处可添加数据读取/导出的后续逻辑 Else MsgBox "未找到标记文本PROJECT" End If Cleanup: ' 关闭源文件并释放对象 If Not src Is Nothing Then src.Close False Set src = Nothing End If Set srcSheet = Nothing ErrHandler: Application.EnableEvents = True Application.ScreenUpdating = True If Err.Number <> 0 Then MsgBox "运行错误:" & Err.Number & vbCrLf & Err.Description End If End Sub
内容的提问来源于stack exchange,提问作者IWM
相关产品推荐
相关产品推荐

