【问题标题】:Declaring a public variable across modules跨模块声明公共变量
【发布时间】:2018-02-02 20:23:24
【问题描述】:

我正在尝试在模块 1 中建立一个变量LastRow,它可以在其他子模块和模块中使用。以下是我实际工作簿中内容的简化版本。 - 一个潜艇呼叫其他人, - 一个子创建一个公共变量, - 另一个模块中的另一个子,其公式依赖于Sub CreateVariable 中的变量。

我已经在这里得到了很多帮助,从我在网上阅读的内容来看,声明一个公共变量应该非常简单......但我没有得到它。任何人都可以帮忙吗?提前致谢!

模块 1

Sub CallOthers()

Call CreateVariable
Call AddFormula

End Sub

模块 1

Public LastRow As Long

Sub CreateVariable()

Dim ws As Worksheet
Set ws = Worksheets("Variance")
LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

End Sub

模块 2

Sub AddFormula()

ws.Range("D2:D" & LastRow).FormulaR1C1 = "=RC[-2]-RC[1]"

End Sub

【问题讨论】:

  • Public LastRow As Long 一直放在模块的顶部,在任何 subs 之前
  • 如果您不打算在 AddFormula 子中重新声明和设置,您还需要将 ws 作为全局变量传递。
  • 非常糟糕的主意。如果你的意思是从一个地方LastRow,不要把它暴露为这样的全局变量(考虑一个返回它的Public Property Get成员,并保留LastRowPrivate )。学习将参数传递给您的过程。

标签: excel vba


【解决方案1】:

模块 1

Public LastRow As Long
Public ws As Worksheet

Sub CreateVariable()

Set ws = Worksheets("Variance")
LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

End Sub
Sub CallOthers()

Call CreateVariable
Call AddFormula

End Sub

或者正如@Mat'sMug 所说的作为变量传递

模块 1

Sub CallOthers()
Dim LastRow As Long
Dim ws As Worksheet
Set ws = Worksheets("Variance")
LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Call AddFormula(ws,LastRow)

End Sub

模块 2

Sub AddFormula(ws As Worksheet, LastRow As Long)

ws.Range("D2:D" & LastRow).FormulaR1C1 = "=RC[-2]-RC[1]"

End Sub

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 2015-03-27
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    • 2014-12-03
    • 2011-08-12
    • 1970-01-01
    相关资源
    最近更新 更多