0

令我惊讶的是,我意识到我无法在代码的某个点设置范围。而且我没有发现任何地方提到这个问题。

所以我(用暗淡)声明了一个 Range 变量。

然后我做 Set Myvar = Worksheets("blabla").Range("A1:C3")

Excel 给我一个错误代码 9,超出范围...

当我将同一行放在代码的顶部时,它可以工作(我有其他集合)。

这是已知的 VBA 规范还是对我有什么问题?

编辑:

显然,问题不是“设置”,而是我只能在激活工作簿时选择一个范围。

我的代码: Transform_file.Worksheets("general balance").Range(Cells(startline, 1), Cells(LastCellNumber, 1)).Value = "cool"

仅当我之前有 Transform_file.activate 时才有效

因此,我的问题不是 Set,显然可以在任何地方使用。

4

1 回答 1

2

我认为问题在于您不知道 VBA 如何使用一些常见的默认值和假设。当您使用:

 Worksheets("blabla") 

Excel 假设您的意思是:

 ActiveWorkbook.Worksheets("blabla") 

我事实上它假设更多:

 Application.ActiveWorkbook.Worksheets("blabla")

避免此类问题的最佳方法是在打开工作簿时创建工作簿对象,从而在代码中明确。像这样:

Dim wkb As Workbook
Set wkb = Workbooks.Open("blah.xls")
wkb.Worksheets("blabla")

或者,如果您的代码引用了与您的代码位于同一工作簿中的工作表,那么您可以使用:

ThisWorkbook.Worksheets("blabla")

这些假设也适用于对象的属性,这就是语言具有 SET 命令的原因。例如,当您编写代码时:

Range("A1")

Excel 将实际返回的是:

Range("A1").Value

这是因为 Value 是 Range 对象的默认属性。我假设以这种方式构建语言是为了节省编码——大多数时候你会得到范围的值。问题是当你想将对象分配给一个变量而不是它是你需要使用 SET 的默认属性时。SET 只是说返回整个对象。

于 2013-06-25T09:12:24.650 回答