评估VBA相对于已知细胞的相对参考

时间:2015-06-07 10:15:51

标签: excel vba excel-vba

我使用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_CELLTHISCELL__THISCELL,我也希望能够在名为{{1}的工作簿中安全地执行我的代码}。

我需要的是一种评估相对于特定单元格地址的相对引用的机制 - 因为人们确实在VBA中使用了R1C1引用,我想必须存在。但是,我不知道。有人可以帮忙吗?

注意:我喜欢在可能的情况下避免摆弄__NOT__THIS_CELL__ActiveCell等,因为那些气味就像是Selection的excel - 谁知道用户在做什么时你访问它们。尽管如此,我还是不确定我会得到正确的答案,因为对于SendKeys方法,我并没有在单元格中定位$ A $!

2 个答案:

答案 0 :(得分:0)

如果我理解你的问题,我相信你正在寻找Range().Offset方法。

Range().Offset(rOffset, cOffset)指的是给定范围右侧rOffset更低和cOffset的范围(允许向上和向左的负值)。此外,.Offset可以访问和设置范围的所有属性,就像使用.Range一样。

答案 1 :(得分:-1)

我暂时采用的方法隐含在以下问题中:当检测到命名范围时,存储当前选择和工作表,选择我们用作评估上下文的那个,然后使用Evaluate。如果正在评估的单元格位于活动表格内,则此似乎可以正常工作。

我不喜欢在整个地方跳过选择 - 感觉很脏 - 但是没有更优雅的解决方案,它确实有效。