1

我有一个大宏,它基本上处理一些列并根据与 access 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

结束子

更新 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

对于上下文,这是为“发送下一个期间提醒”选择一个选项时,它从静态文件夹中提取一个单词 .dot 模板并根据工作表中选择的数据填充它(因此替换文本)。这是在不同的模块中,以前从未接触过。

4

1 回答 1

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

于 2013-09-24T00:16:32.420 回答