运行时错误'1004':对象'_Global'的方法'Range'失败。为什么我不能访问存储在变量中的命名范围?

时间:2019-10-22 11:10:11

标签: excel vba range

我是VBA的新手,正在尝试做一些基本的事情,但是vba似乎没有让我为变量分配一个命名范围,然后再引用它。

该命名范围的作用域是整个工作簿,因此我不必事先参考该表。这是代码:

Sub my_function()

    Sheets("TEST").Select
    numRange = Range("num")

    Range(numRange).Select
    Selection.Copy
    Selection.Insert shift:=xlToRight

End Sub

有人知道我在做什么错吗?

2 个答案:

答案 0 :(得分:2)

您通常应该Avoid Using Select。请尝试以下代码:

module.min.css

您当然也可以跳过将其分配给单独的范围对象,并在Dim numRange As Range Set numRange = Sheets("TEST").Range("num") numRange.Copy numRange.Offset(, numRange.Columns.Count).Insert xlShiftToRight 块内使用它的方法,如下所示:

With

答案 1 :(得分:1)

在不使变量变暗的情况下,VBA会尝试分配自己的变量。根据您命名的范围Num所赋予的权利(单个单元格或(终止)范围),行为将有所不同。

我的猜测是您正在尝试使用位于num中的单个单元格的间接单元格引用。在这种情况下,基本的VBA将如下所示:

Dim numRange As Range
With Sheets("TEST")
    Set numRange = .Range(.Range("num"))
End With

因此,假设num指向B1,并且B1中的值是对A1:A5的书面引用,那么numRange现在将保留地址为$A$1:$A$5

的范围对象

如果我的猜测是错误的,并且您只想将命名范围作为范围对象,则无需再次Set,它已经是范围对象。只需将其称为(例如):

With Sheets("TEST")
    .Range("num").Select
End With

但是,您应该避免使用.Select