【发布时间】:2015-06-19 03:17:26
【问题描述】:
我正在使用here - !A1 描述的技巧来获取单元格范围,包括当前单元格(通常用于 Rows() 函数)。这非常适合日常使用,并且消除了我在以前必须使用相邻的一组行时移动范围时遇到的许多错误。
不幸的是,我的公式需要通过 VBA 进行评估。将__THISCELL__ 作为我的!A1 单元格,并将包含公式的单元格作为$Z$100,以下计算结果为错误:
Application.Evaluate(rngCell.formula)
以下计算结果为$A$1:$Z$50
rngCell.Worksheet.Evaluate(rngCell.formula)
显然,一种方法是在评估之前将__THISCELL__ 替换为rngCell.Address(External:=True),但关键在于:我希望能够在使用THIS_CELL、@987654332 的工作簿中执行我的公式解析器@ 或 __THISCELL 安全,我还希望能够安全地在名称为 __NOT__THIS_CELL__ 的工作簿中执行我的代码。
为此,我只需要一种机制来评估相对于特定单元格地址的相对引用 - 因为人们确实在 VBA 中使用 R1C1 引用,所以我想它一定存在。不过,我不知道。有人可以帮忙吗?
注意:我喜欢尽可能避免摆弄ActiveCell、Selection 等,因为这些闻起来就像SendKeys 的 excel 等价物——当你访问它们时谁知道用户在做什么。不过,即便如此,我也不确定我会得到正确的答案,因为对于 Worksheet.Evaluate 方法,我没有定位在 $A$1 单元格中!
【问题讨论】:
-
AFAIK
Evaluate始终解析相对于A1的相对命名范围,因此您将无法计算其他单元格的正确值。为什么需要手动解析公式? -
我们经常使用
CUBEVALUE,我需要能够从 MDX 传递的任意公式中提取 n,以生成我们传入的成分CUBEMEMBERS和CUBESETs 以执行询问。CUBEMEMBERS并不太邪恶 - 有一个.mdx属性按索引显示成员(尽管例如,如果你通过FILTER()到达那里,那么它会丢失),但CUBESETs 没有工作.mdx属性,所以需要找到传递给函数的参数。由于可以通过任意数量的INDEX、VLOOKUP或命名范围过程找到它,因此基本上意味着公式解析! -
能否提供更详细的示例,说明您所做的工作以及预期结果。还要解释
THIS_CELL、THISCELL、__THISCELL和__NOT__THIS_CELL__之间的区别。假设rngCell指的是与开头提到的问题中描述的THIS_CELL等效的名称是正确的吗? -
嗯,这个想法是用户可以定义任何具有
!A1(或!RC)内容的名称。这些名称只是他们可以使用的一些名称。他们可以很容易地将其定义为Scotland、Dragons或FooBar,而且我不希望我的代码在上面中断!