在范围函数中引用命名范围(Excel - VBA)

时间:2017-06-19 20:39:37

标签: excel vba excel-vba syntax named-ranges

我试图编写一个将字符串变量作为输入的宏,其中字符串变量引用命名范围。

目前我所拥有的是:

Sub SubItems()

Dim M As String
    M = "=R[-1]C"
    'where M refers to row above, currently it is Manufacturers

Dim g As Range

Set g = Range(" & M & ")

ActiveCell.Value = g(2)
'For Example

End Sub

问题在于设置g =范围("& M&")语法

我希望Range函数的输入参数是M是什么,而不是文字字母M.与C中的方式类似,例如你可以使用printf('%s',M)。

修改

目前我如何设置Excel工作表,是您从下拉菜单中选择主要项目。然后我想选择主项下面的单元格并自动用子项填充行。子项存储在以主项命名的命名范围内。

因此我希望我的宏自动读取它上面的行(主项),因此为什么我有M =" = R [-1] C"。然后我想将其输入到范围函数中,这就是我目前面临的问题。

我希望这能更清楚地澄清我的问题。

3 个答案:

答案 0 :(得分:0)

字符串文字包含在双引号中,因此您实际上引用了一个名为&的名为Range的范围。 M&

如果您使用字符串变量,请记住它的值也被引号括起来。因此它应该只是Range(M)Range("=R[-1]C"),两者是相同的。

注意:= R [-1] C是一个非常奇怪的名字,你确定你的意思吗?确保您了解命名范围与范围内的差异(看起来像公式)!也许关于什么= R [-1] C的描述是什么,我可以帮助你更多?

答案 1 :(得分:0)

问题是你的变量M描述了一个相对引用,我不相信你可以用你描述的方式对Range对象应用相对引用。也许你想从不同的角度来解决你的问题?例如:

您可以使用您的方法,而是设置绝对引用,例如

M = "A5"
Debug.Print Range(M).Value

或者您可以使用以下代码指定相对引用:

debug.print activecell.Offset(-1,0).Value

答案 2 :(得分:0)

到目前为止我已经理解了 - 您有一个名为M的命名区域,并且您希望将其分配给VBA范围。如果是这种情况,这是实现它的代码:

Sub TestMe()

    Dim g As Range
    Set g = ActiveSheet.[M]
    Debug.Print g.Address

End Sub