对象_global的方法'范围'在什么都不做的时候失败了

时间:2013-09-23 02:38:31

标签: excel vba excel-vba excel-2003 visual-studio-macros

我有一个很大的宏,基本上处理一些列,并根据与访问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模板,并根据工作表中选择的数据填充它(因此替换文本)。这是一个不同的模块,从未被触及过。

1 个答案:

答案 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..