使用 WorkSheetFunction 运行 Excel 的 OFFSET 会导致错误 438

Dim*_*iev 1 excel vba

我的主要目标是创建一个自动调整大小的命名范围。

执行此操作的常见方法是使用OFFSETExcel 中的公式并使用 动态确定高度和/或宽度参数值CountA。我想使用 VBA 来完成此操作。为了简单起见,我后退了一步,只专注于OFFSET运行和返回一个范围。我有以下代码:

Public Function testfn()
   Dim r As Range
   On Error Resume Next
   Set r = WorksheetFunction.Offset(Worksheets("MAIN").Range("H85"), 0, 0, 1, 2)
   Debug.Print Err.Number
 End Function
Run Code Online (Sandbox Code Playgroud)

控制台中的输出是438. 我不太确定是什么原因造成的,因为我已经明确指定了起始引用,其余的值是硬编码的整数。

您能指出到底是什么导致了错误吗?难道用VBA实际上不可能调用这个函数吗?

Tim*_*ams 5

要模仿,=OFFSET(rng, offR, offC, sizeR, sizeC)您可以使用以下之一或两者:

rng.Offset(offR, offC) 
Run Code Online (Sandbox Code Playgroud)

和

rng.Resize(sizeR, sizeC) 
Run Code Online (Sandbox Code Playgroud)

或组合:

    rng.Offset(offR, offC).Resize(sizeR, sizeC)
Run Code Online (Sandbox Code Playgroud)

由于您实际上并未在这里进行抵消,因此您只需要:

Set r = Worksheets("MAIN").Range("H85").Resize(1, 2)
Run Code Online (Sandbox Code Playgroud)