【问题标题】:Excel VBA pass variable between functionsExcel VBA在函数之间传递变量
【发布时间】:2017-01-04 12:38:30
【问题描述】:

我正在尝试编写将解析列 B(分析师登录时间)的 excel VBA 代码,如果该列为 0(因为那天他们不在),它将更新相邻的列以说 NA。目前,以下代码错误。如果我将 Cells(rng, i) 中的 rng 变量更改为一个数字,那么代码将采用该数字(假设为 4)并将 NA 放入所有字段(3 到 23,因此,C 到 W)。我认为问题在于 rng 的值没有被传递到内部函数中,但我不知道如何解决这个问题。

Dim rng As Range
For Each rng In Range("B4:B10")
    If rng.Value = 0 Then
        For i = 3 To 23
            Cells(rng, i).Value = NA
        Next i
    End If
Next rng

【问题讨论】:

  • 也许你想要#N/A,它可以用=CVErr(2042)创建

标签: excel vba


【解决方案1】:

rng 本身(没有明确的属性名称)默认返回.Value,当0 尝试使用无效的行索引0 时,通过.Row 获取行号:

Cells(rng.Row, i).Value = "NA"

如果NA 不是变量而是字符串,请引用它。

非循环替代:

 If rng.Value = 0 Then Range(rng.Offset(0, 1), rng.Offset(0, 21)).Value = "NA"

【讨论】:

  • 是的,谢谢,那行得通。我在 NA 周围有报价,但忘记在此处复制它们。但是,rng.Row 是修复它的原因。
【解决方案2】:

问题来了:

Cells(rng, i).Value = "NA"

为什么要给 Number(行号)必须去的地方指定范围?

你需要使用

Cells(rng.Row, i).Value = "NA"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-12
    • 2017-10-25
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 2013-03-07
    相关资源
    最近更新 更多