【问题标题】:Invalid Qualifier VBA无效的限定符 VBA
【发布时间】:2017-07-10 14:57:00
【问题描述】:

我想为一个单元格设置一个变量,以便以后能够引用该单元格。

所以我将单元格 D2 设置为一个字符串,其值为“medium”一词。我目前正在这样做并且它有效:

ActiveCell.Offset(0, 1).Value = Round(Application.Max(Range([D2].Offset(1, 0), [D2].Offset(2, 0))) / 1000, 2)

但不是使用 [D2],因为我想在我的代码中运行 For 循环多次执行此操作,我想说:

LoadCase = [D2]
LoadCaseNeg = [D2].offset(8,0)
ActiveCell.Offset(0, 1).Value = Round(Application.Max(Range(LoadCase.Offset(1, 0), LoadCaseNeg.Offset(1, 0))) / 1000, 2)

但是这不起作用并给我一个 invalid qualifier 错误, 我是 VBA 新手,有没有更好的方法来做到这一点?

【问题讨论】:

  • 应该是range("a1:a100").offset LoadCaseNeg 是什么?

标签: vba excel variables offset qualifiers


【解决方案1】:

使用Range 变量:

Dim LoadCase As Range
Set LoadCase = Range("D2")

您同样需要将Set 用于LoadCaseNeg(也应声明为范围变量):

Set LoadCaseNeg = LoadCase.offset(8,0)

[D2] 是一种引用单元格中包含的 的方法,而不是单元格本身。您也可以将该值称为Range("D2").ValueLoadCase.Value(一旦设置了变量)。方括号符号在 VBA 代码中并不经常使用,因为它不是很灵活。

任何有关 Excel VBA 的基本书籍/教程都应说明如何使用范围变量。它们是 Excel VBA 编程的主力。

【讨论】:

  • 实际上[D2] 只是通过隐式默认成员 访问来引用;如果 OP 在分配前添加了 Set[D2] 将引用 Range 对象。方括号实际上只不过是Application.Evaluate 的(有问题的)语法糖。您可以在直接窗格中验证这一点:?TypeName([D2]) prints Range ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
相关资源
最近更新 更多