运行时错误1004设置范围

我试图做一个范围数组,但我得到“应用程序定义或对象定义的错误”。 错误出现在Set Rng的行上。 格式应该没问题 ,即使线路有点长。 我已经指定了工作表,我正在尝试从中获取范围,而子目前在模块1中。它可能只是一个错误的地方,但重新检查了六次后,我会失望如果就是这样。

 Sub TableRange(ByVal Target As Range) Dim Rng As Range Dim Area As Range Set Rng = Worksheets("Tables").Range("A3:D23,A28:C39,A44:E61,A66:C102,A107:E121,A126:C135,A140:C149,A153:C162,A167:C192,A197:F215,A220:C269,A274:D282,A287:D295,A300:D304") Set Rng = Union(Rng, Worksheets("Tables").Range("A309:C358,A363:C389,A394:C412,A417:C437,A442:C462,A467:D475,A480:D487,A492:C531,A536:D544,A549:D557,A562:C574,A579:D598,A603:D622")) For Each Area In Rng.Areas If Not Intersect(Target, Worksheets("Tables").Range(Area)) Is Nothing Then 'do stuff End If Next Area End Sub 

如果还有什么我应该提及的,或者我可以改善我的问题,请告诉我,我会相应地编辑我的post。


更新 :范围数组已被修复,感谢@ user3964075,但现在我似乎被卡住了相同的错误, If Not Intersect - Is Nothing Then

代码很好,但string常量超出了Range属性允许的最大长度(255个字符)。 你可以很容易地解决它:

 Set Rng = Worksheets("Tables").Range("A3:D23,A28:C39,A44:E61,A66:C102,A107:E121,A126:C135,A140:C149,A153:C162,A167:C192,A197:F215,A220:C269,A274:D282,A287:D295,A300:D304") Set Rng = Union(Rng, Worksheets("Tables").Range("A309:C358,A363:C389,A394:C412,A417:C437,A442:C462,A467:D475,A480:D487,A492:C531,A536:D544,A549:D557,A562:C574,A579:D598,A603:D622")) 

也许考虑使用命名范围而不是这个长列表。

编辑:要解决第二个问题,将其更改为:

 If Not Intersect(Target, Area) Is Nothing Then 'do stuff End If 

你没有正确处理Range.Areas属性 。 尝试通过索引循环。

 dim a as long For a =1 to Rng.Areas.count If Not Intersect(Target, Rng.Areas(a)) Is Nothing Then 'do stuff End If Next a 

我复制了Set Rng线,并有相同的错误。 当我删除一个范围,即A28:C39它的作品。 哪个范围将被删除并不重要。 也许有最大范围?

尝试:

 Set Rng = Worksheets("Tabelle1").Range("A3:D23,A44:E61,A66:C102,A107:E121,A126:C135,A140:C149,A153:C162,A167:C192,A197:F215,A220:C269,A274:D282,A287:D295,A300:D304,A309:C358,A363:C389,A394:C412,A417:C437,A442:C462,A467:D475,A480:D487,A492:C531,A536:D544,A549:D557,A562:C574,A579:D598,A603:D622")