我使用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
,THISCELL
或__THISCELL
,我也希望能够在名为{{1}的工作簿中安全地执行我的代码}。
我需要的是一种评估相对于特定单元格地址的相对引用的机制 - 因为人们确实在VBA中使用了R1C1引用,我想必须存在。但是,我不知道。有人可以帮忙吗?
注意:我喜欢在可能的情况下避免摆弄__NOT__THIS_CELL__
,ActiveCell
等,因为那些气味就像是Selection
的excel - 谁知道用户在做什么时你访问它们。尽管如此,我还是不确定我会得到正确的答案,因为对于SendKeys
方法,我并没有在单元格中定位$ A $!
答案 0 :(得分:0)
如果我理解你的问题,我相信你正在寻找Range().Offset
方法。
Range().Offset(rOffset, cOffset)
指的是给定范围右侧rOffset
更低和cOffset
的范围(允许向上和向左的负值)。此外,.Offset
可以访问和设置范围的所有属性,就像使用.Range
一样。
答案 1 :(得分:-1)
我暂时采用的方法隐含在以下问题中:当检测到命名范围时,存储当前选择和工作表,选择我们用作评估上下文的那个,然后使用Evaluate。如果正在评估的单元格位于活动表格内,则此似乎可以正常工作。
我不喜欢在整个地方跳过选择 - 感觉很脏 - 但是没有更优雅的解决方案,它确实有效。