我有一个很大的宏,基本上处理一些列,并根据与访问2003数据库的一些交叉检查吐出结果。它工作得非常好 - 根本没有任何障碍。
但是,我最近不得不对它进行修改。它实际上在代码的一行中将'8'改为'9'。但是下次我运行它时,它会抛出1004: Method 'Range' of object '_Global' failed
错误。 Excel 2003是一件很有意思的事情 - 我曾经在脑海中摸了好几个小时,试图找到可能导致错误的有问题的代码行,但是唉也无济于事。我做了一些我没想到的东西:
从原始宏开始(100%确认正常工作),如果我只是打开代码,然后保存它以便“最后更新”的元数据将更新以反映保存,尽管绝对没有任何改变,它会抛出打开时再次出现错误。
就像它是如此脆弱,以至于保存宏会打破它。有什么想法吗?
更新:这是我最初提出的问题
iOutputCols = 9 'this was changed to 9 from 8
ReDim Preserve sOutputCols(iOutputCols)
sOutputCols(0) = "Policy No"
sOutputCols(1) = "Client"
sOutputCols(2) = "Trans"
sOutputCols(3) = "Effective Date"
sOutputCols(4) = "ClosingRef"
sOutputCols(5) = "Gross"
sOutputCols(6) = "Comm"
sOutputCols(7) = "Net Due"
sOutputCols(8) = "Risk" 'this line was added
在这里进行更改,虽然最初导致错误,但似乎并不特别 - 我在代码和其他模块中进行了如上所述的小改动,有一次我甚至做了testval = "test"
甚至做过的事情冗余线将产生错误。最简约的方式导致它?只需将其打开,保存即可,无需更改任何内容,并在下次使用时发生错误。
错误发生在这一行,完全不同的代码部分是表单的一部分:
If strErr <> "" Then MsgBox strErr, vbInformation + vbOKOnly, "Action Error"
Application.ScreenUpdating = True 'error occurs here, message box which shows me the error right above
End Sub
更新2
删除错误处理会在此行引发错误
Case "> Send Next Period Reminder" 'error on line below
Call ReplaceText(wordApp, "[office_address]", Range("Address_" & Worksheets("UserParms").Range("F6").Value).Value) 'error this line
Call ReplaceText(wordApp, "[office_address2]", Range("Address2_" & Worksheets("UserParms").Range("F6").Value).Value)
'more of the same replacetexts below
对于上下文,这是为“Send Next Period Reminder”选择一个选项,它从静态文件夹中提取单词.dot模板,并根据工作表中选择的数据填充它(因此替换文本)。这是一个不同的模块,从未被触及过。
答案 0 :(得分:1)
尝试正确验证您的Range
方法调用。你有这样的行:
Call ReplaceText(wordApp, "[office_address]", Range("Address_" & Worksheets("UserParms").Range("F6").Value).Value) 'error this line
Call ReplaceText(wordApp, "[office_address2]", Range("Address2_" & Worksheets("UserParms").Range("F6").Value).Value)
虽然可能并不明显,但有些情况,包括环境和基于代码的,Range
的这些无条件使用可能会失败。将Range("Address...
等引用更改为yourTargetWS.Range("Address..
。