【发布时间】:2015-12-14 19:35:28
【问题描述】:
我试图从两个不同的宏中调用一个子例程。我创建了一个名为 Store_Policy_Info_Sub_Routine(nrow) 的独立宏。
我还有另外两个以不同方式定义 nrow 的宏。一种是将数据附加到列表的末尾;另一个替换给定行中的数据。
我可以在两个宏中复制Store_Policy_Info_Sub_Routine 中的代码,但试图避免这种情况。
第一个宏 (Store_Policy_Info) 工作正常并将 nrow 传递给子例程。第二个宏在子例程的第一行代码处停止:
Range("A" & nrow).Value = Range("InsuredName")
与
运行时错误“1004”:应用程序定义或对象定义错误
它似乎不喜欢在多个地方定义 nrow。
Sub Store_Policy_Info()
'
' Store_Policy_Info Macro
Sheet10.Select
Dim nrow As Integer
nrow = Range("nrow").Value
Call Store_Policy_Info_Sub_Routine(nrow)
Sheet1.Select
Range("A1").Select
Sheet10.Visible = False
End Sub
Sub Rerun_Portfolio()
'
' Rerun the entire portfolio in the data tab and replace existing saved outputs
Sheet10.Select
Dim nrow As Integer
nrow = 2
Do While nrow <= Range("nrow")
Range("RetrievalSelection").Value = Application.WorksheetFunction.Index(Range("Stored_Inputs"), nrow)
Call Retrieve_Inputs
Call Store_Policy_Info_Sub_Routine(nrow)
nrow = nrow + 1
Loop
End Sub
【问题讨论】:
-
nrow在Store_Policy_Info_Sub_Routine(nrow)中的Data Type 是什么? -
在多个地方定义相同的名称是没有问题的,毕竟它只是一个指向内存位置的指针......但是,除非nrow是定义的名称,否则nrow = Range ("nrow").Value 会抛出错误。
-
请您验证我的理解:错误来自此行:
Range("A" & nrow).Value = Range("InsuredName")这是Store_Policy_Info_Sub_Routine(nrow)过程的一部分。这是正确的吗? -
我最好的建议是从给他们不同的变量名开始,以帮助消除你的困惑。仅仅因为 Store_Policy_Info_Sub_Routine(nrow) 采用一个名为 nrow 的参数,并不意味着在其他方法中必须调用它,就在那个方法中。它可以在另一种方法中命名为 xyz,并通过 Call Store_Policy_Info_Sub_Routine(xyz) 调用。
-
感谢大家的回复。 Scott Holtzman - nrow 是一个整数,但数据类型未在 Store_Policy_Info_Sub_Routine(nrow) 中定义。