打开Excel工作簿时反复弹出Run Time Error 1004,求修复
修复Run Time Error 1004的方案
常见原因及对应修复
1. 确认工作表存在且名称完全匹配
检查工作簿中是否存在名为SAQ Profile的工作表,注意名称的大小写、空格、特殊字符必须和代码里的完全一致(比如不能是Saq Profile或SAQ_Profile)。若名称不匹配,要么修改代码里的工作表名称,要么重命名工作表。
2. 避免无限循环导致行号超出Excel限制
当前循环依赖于找到单元格值为finished才会终止,如果SAQ Profile的B列从第20行开始一直没有这个值,StartRow会持续递增,直到超过Excel最大行号(2007及以后版本为1048576行),此时创建Range就会触发1004错误。
修复方法:给循环添加最大行限制:
While IsQuestion.Value <> "finished" And StartRow <= 1048576 ' 原循环内代码 StartRow = StartRow + 1 If StartRow > 1048576 Then Exit While ' 提前退出避免报错 Set IsQuestion = Range("'SAQ Profile'!$B$" & StartRow) Wend
3. 改用更可靠的工作表引用方式
直接在Range中写工作表名称容易因环境问题出错,建议先获取工作表对象再引用单元格,修改后的完整代码如下:
Private Sub Workbook_Open() Dim saqSheet As Worksheet ' 先获取工作表对象,提前排查不存在的情况 On Error Resume Next Set saqSheet = ThisWorkbook.Worksheets("SAQ Profile") On Error GoTo 0 If saqSheet Is Nothing Then MsgBox "找不到工作表'SAQ Profile',请检查工作表名称" GoTo Exitsub End If Dim StartRow As Long ' 改用Long避免行号超出Integer的32767上限 StartRow = 20 Dim IsQuestion As Range Set IsQuestion = saqSheet.Range("$B$" & StartRow) While IsQuestion.Value <> "finished" And StartRow <= 1048576 If IsQuestion.Value = True Then Dim QuestionId As Range Set QuestionId = saqSheet.Range("G" & StartRow) If QuestionId.Value <> "" Then Call CreateSingleSelect(QuestionId, StartRow) End If End If StartRow = StartRow + 1 If StartRow > 1048576 Then Exit While Set IsQuestion = saqSheet.Range("$B$" & StartRow) Wend ' 去掉不必要的Select操作,或指定具体工作表 ' ThisWorkbook.Worksheets("目标表名").Range("C7").Select Exitsub: Application.EnableEvents = True Dim wSheetName As Worksheet For Each wSheetName In ThisWorkbook.Worksheets wSheetName.Protect UserInterfaceOnly:=True Next wSheetName End Sub
4. 处理工作表保护状态
如果SAQ Profile打开时已处于保护状态(且未设置UserInterfaceOnly:=True),代码无法访问单元格会触发错误。可在代码开头临时解除保护,处理完成后再重新保护:
' 获取saqSheet后添加 saqSheet.Unprotect Password:="你的密码" ' 无密码则去掉Password参数 ' 在Exitsub标签前添加 saqSheet.Protect UserInterfaceOnly:=True, Password:="你的密码"
额外优化建议
- 尽量避免使用
Select操作,VBA中直接操作对象比选择单元格更高效且不易出错; StartRow改用Long类型,避免因行号超过Integer的32767上限导致溢出错误。
内容的提问来源于stack exchange,提问作者Nicanor Ng
相关产品推荐
相关产品推荐

