Vba 方法';范围';不执行任何操作时,对象_全局的操作失败

Vba 方法';范围';不执行任何操作时,对象_全局的操作失败,vba,excel,excel-2003,visual-studio-macros,Vba,Excel,Excel 2003,Visual Studio Macros,我有一个大的宏,它基本上处理一些列,并根据与access 2003数据库的交叉检查结果吐出结果。它工作非常好-没有任何故障 然而,我最近不得不对它进行修改。它实际上是在一行代码中将“8”改为“9”。但下一次我运行它时,它抛出了1004:object'\u Global'的方法'Range'失败错误。Excel2003是一件有趣的事情——我曾经为此挠头好几个小时,试图找到可能导致错误的令人不快的代码行,但可惜没有成功。我做了一些我没想到会触发任何事情的事情: 从原始宏开始(100%确认工作),如果

我有一个大的宏,它基本上处理一些列,并根据与access 2003数据库的交叉检查结果吐出结果。它工作非常好-没有任何故障

然而,我最近不得不对它进行修改。它实际上是在一行代码中将“8”改为“9”。但下一次我运行它时,它抛出了
1004:object'\u Global'的方法'Range'失败
错误。Excel2003是一件有趣的事情——我曾经为此挠头好几个小时,试图找到可能导致错误的令人不快的代码行,但可惜没有成功。我做了一些我没想到会触发任何事情的事情:

从原始宏开始(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

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

请尝试正确地限定
范围
方法调用。你有这样的台词:

    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(“Address…
”之类的引用更改为类似于
yourTargetWS.Range(“Address…

)之类的引用,尝试正确地限定
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(“地址…”
之类的引用更改为
yourTargetWS.Range(“地址..

如果没有大量的代码发布,在关闭之前不太可能回答为“太宽、太模糊”。还有什么变化吗?库、版本……软件更新?您尝试过“清理”吗通过导出、删除然后重新导入所有代码来创建项目?Rob Bovey提供的这个非常好的插件将为您提供帮助!删除您的错误处理,然后告诉我们哪一行给了您错误…任何“更改”都会破坏项目,这一事实表明“重新编译”是问题所在。您能看到是否打开、编译(而不是保存)了吗,并且运行也会导致问题?我想知道是否有
选项库0
选项库1
类型的东西潜入…或者你正在循环
sOutputCols
的所有元素,这会导致查找不存在的东西。我喜欢@SiddharthRout的建议:删除(注释掉)所有关于错误的
语句,以查看哪一行(对什么对象的引用)导致了问题。如果没有大量的代码发布,则不太可能在关闭之前得到回答,因为“太宽,太模糊”。还有什么变化吗?库、版本,…软件更新?您尝试过“清理”吗通过导出、删除然后重新导入所有代码来创建项目?Rob Bovey提供的这个非常好的插件将为您提供帮助!删除您的错误处理,然后告诉我们哪一行给了您错误…任何“更改”都会破坏项目,这一事实表明“重新编译”是问题所在。您能看到是否打开、编译(而不是保存)了吗,并且运行也会导致问题?我想知道是否有
选项库0
选项库1
类型的东西潜入…或者你正在循环
sOutputCols
的所有元素,这会导致查找不存在的东西。我喜欢@SiddharthRout的建议:删除(注释掉)所有关于错误的
语句,以查看哪一行(什么引用了什么对象)是导致问题的原因。噢,天哪……问题已经解决了!限定范围本身并没有解决问题,但您的解决方案确实让我调查了底层工作表引用是否为空的原因。我不知道为什么,但当我保存它时,该工作表的元素会永久移动(3列)。将F6的所有实例更改为I6解决了此问题。我仍然不知道保存后元素为何会移动,但目前我很高兴它已被修复。不再撕裂头发!感谢您为答案提供了催化剂!哦,我的天哪……问题已被修复!确定范围本身并不能解决此问题,但您的解决方案已被修改d实际上让我调查底层工作表引用是否为空。我不知道为什么,但当我保存它时,该工作表的元素会永久移动(3列).将F6的所有实例更改为I6解决了此问题。我仍然不知道保存后元素为何会移动,但目前我很高兴它已被修复。不再有头发撕裂现象!感谢您为答案提供催化剂!