【问题标题】:Passing variables within vba macros在 vba 宏中传递变量
【发布时间】: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

【问题讨论】:

  • nrowStore_Policy_Info_Sub_Routine(nrow) 中的Data Type 是什么?
  • 在多个地方定义相同的名称是没有问题的,毕竟它只是一个指向内存位置的指针......但是,除非nrow是定义的名称,否则nrow = Range ("nrow").Value 会抛出错误。
  • 请您验证我的理解:错误来自此行:Range("A" &amp; 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) 中定义。

标签: vba excel


【解决方案1】:

我想通了。我不得不在 rerun_portfolio 宏的两个调用语句之间移动 sheet10.select 语句。感谢您的帮助,如有任何不便,我们深表歉意。

【讨论】:

    猜你喜欢
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多