如何使用间接引用在vba中选择单个单元格或区域

如何使用间接引用在vba中选择单个单元格或区域,vba,excel,reference,range,cell,Vba,Excel,Reference,Range,Cell,我只需要一个代码来选择一个单元格,但是该单元格会发生更改。我在工作簿中有一个单元格,用于标识它应该是什么单元格。单元格A1包含应选择的单元格 在本例中,单元格A1包含单词“P25”,因此我希望下面的代码引用A1作为P25的间接单元格ref,从而选择单元格P25 我分别尝试了这两行: Sub IndirectCellSelect() Sheet.Range(INDIRECT(A1)).Select Range(INDIRECT(A1)).Select End Sub 我得

我只需要一个代码来选择一个单元格,但是该单元格会发生更改。我在工作簿中有一个单元格,用于标识它应该是什么单元格。单元格A1包含应选择的单元格

在本例中,单元格A1包含单词“P25”,因此我希望下面的代码引用A1作为P25的间接单元格ref,从而选择单元格P25

我分别尝试了这两行:

Sub IndirectCellSelect()

     Sheet.Range(INDIRECT(A1)).Select
     Range(INDIRECT(A1)).Select

End Sub

我得到的错误子函数或函数未定义,当它到达单词INDIRECT时,您可以用不同的方法执行此操作,但如果您希望在VBA代码中使用本机Excel工作表函数,则需要这样做(注意,我还调整了引用A1的方式):

编辑 抱歉-我没有测试这个。在这种情况下,间接功能似乎不可用。相反,请尝试以下方法:

Dim rng as Range
Set rng = sheets(1).Range("A1")

sheets(1).Range(rng.text).Select

对张贴的代码稍加修改即可:

Range([indirect("a1")]).Select
但我建议您尝试以下两种方法:

Sheet.Range(Sheet.Range("A1").Value).Select
Range(Range("A1")).Select

第一个更明确,建议在生产代码中使用。

不幸的是,我不熟悉如何正确使用函数。我尝试了两种方法,但都没有效果,只是了解了何时使用函数之间的差异,但仍然无法实现它。我刚刚得到错误“Object Doesn support this property or method”(对象不支持此属性或方法)如果工作表名称不同或只是1=active(活动),工作表(1)是否也很重要?请参阅我的编辑-这适用于大多数函数,但似乎不支持这种方式的“间接”。这是有道理的,因为这在我看来更让人困惑。啊,太好了,是的,这看起来更安全,因为我在过去遇到过这个问题,我会让它起作用的!你有可能知道这篇文章吗?没有人回应,已经有一个月了。。。谢谢第一个和第三个成功了!我将使用第三个公式,因为您建议使用第二个公式。第二个公式需要根据您使用的工作表进行调整,这将是新工作簿的第一张工作表的
Sheet1
。在实践中经常建议这样做,因为这样代码将始终工作相同,并且不依赖于当前活动的工作表。欢迎使用堆栈溢出!您可以通过在代码示例中添加更详细的解释来澄清您的答案。
Worksheets("list").Sort.SortFields.Add Key:=Range(INDIRECT("I16" & "3" & ":" & "I16" & "5002")) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With Worksheets("list").Sort
        .SetRange Range("B2:K5002")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
Worksheets("list").Sort.SortFields.Add Key:=Range(INDIRECT("I16" & "3" & ":" & "I16" & "5002")) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With Worksheets("list").Sort
        .SetRange Range("B2:K5002")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin