在多个工作表中使用范围variables

使用包含范围variables时遇到问题。

我在工作簿模块中全局声明了variables“rng”:

Public rng As Range 

现在在工作表模块中,我点击checkbox后设置variables,并为其定义一个范围:

 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)”时总是会出现错误:

错误438,对象不支持这个属性或方法

“aus(rng)”包含以下代码:

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

顺便说一句:在模块连接到同一工作表使用范围variables不会抛出一个错误。 所以错误不得不与“工作表(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)