在多个工作表中使用范围变量

Using range-variable in multiple worksheets

我在使用包含范围的变量时遇到问题。

我已经在工作簿模块中全局声明了变量 "rng":

Public rng As Range

现在在工作表模块中,我在单击复选框后设置变量并为其定义范围:

Sub CheckBox1_Click()
    Set rng = Range("D8:Q51")

    If Me.OLEObjects("checkbox1").Object.Value Then
        Call clear(rng)
    Else
        Call aus(rng)
    End If
End Sub

我在调用子 "aus(rng)" 时总是出错,它说:

error 438, object doesn't support this property or method

"aus(rng)" 包含以下代码:

Worksheets(5).rng.Copy Worksheets("aktuell").rng

顺便说一句:在模块连接到的同一个工作表中使用范围变量不会抛出错误。因此错误必须以某种方式与 "Worksheets(5)".

相关联

当您使用 Set 定义一个 Range 并且您没有定义 Workbook 或 Worksheet 的父对象时,它将默认为 ActiveWorkBookActiveWorkSheet。因此就像写:

Set rng = ActiveWorkbook.ActiveSheet.Range("D8:Q51")

稍后在代码中使用 rng 时,您尝试将其分配到 Sheet 下,这基本上是这样写的:

Worksheets(5).ActiveWorkbook.ActiveSheet.Range("D8:Q51").Copy

我们知道这是不正确的语法并且会出错。

作为解决方法,您可以使用以下代码:

Worksheets(5).Range(rng.Address).Copy Worksheets("aktuell").Range(rng.Address)