【发布时间】:2018-05-01 17:54:06
【问题描述】:
对于一个大型数据表,我有大约 236 个命名范围(列)。尝试拆分分隔命名范围的长代码行时出现此错误:
运行时错误“1004”应用程序定义或对象定义错误
例如:
Worksheets("Sheet1").Range("foo1,foo2" _
& "foo3,foo4" _
& "..." _
& "foo235,foo236")
我正在尝试根据特定条件(命名范围)过滤和取消过滤列。一切似乎都可以正常工作(对于仅跨越 1 行长度的较小字符串),直到我必须将代码拆分为多行,因为它到达窗口的末尾..
代码 -
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$3" Then
Worksheets("Sheet1").Range("Fruit," _
& "Months,Colour").EntireColumn.Hidden = Target.Value = "CustomView"
End If
If Target.Address = "$B$3" Then
Worksheets("Sheet1").Range("Colour,Number" _
& "Months").EntireColumn.Hidden = Target.Value = "Custom2View"
End If
End Sub
此代码似乎不起作用。我认为这与引号以及 excel 如何读取它有关,但我还没有找到修复方法。
根据 cmets 中的建议测试新代码会导致错误 Run-time error '1004' Application-defined or object-defined error
Private Sub Worksheet_Change(ByVal Target As Range)
Dim arr, i As Long, rng As Range
If Target.Address = "$B$3" Then
arr = Split("foo1,foo2,foo3,...,foo266,foo267", ",")
Set rng = Worksheets("Database").Range(arr(0))
For i = 1 To UBound(arr)
Set rng = Application.Union(rng, Worksheets("Database").Range(arr(i)))
Next i
rng.EntireColumn.Hidden = (Target.Value = "CustomView")
End If
End Sub
【问题讨论】:
-
运行代码时会发生什么?
-
@TimWilliams 我收到一个运行时错误“1004”应用程序定义或对象定义错误对话框,然后当我去调试时,它会突出显示从工作表开始的整个部分
-
第一个块看起来不错,但第二个块在“数字”之后缺少逗号。仅供参考,如果此代码在 Sheet1 中,那么您可以使用
Me代替 `Worksheets("Sheet1")` -
第一个块或第二个块都不起作用。我尝试了一些不同的方法,在文本之间而不是在结尾处分割线(这解决了我认为引号的位置是一个问题的问题),它适用于小数据范围,但适用于 100 多个命名范围它再次遇到错误的括号。感谢您对工作表名称的建议。
-
您不能将超过 255 个字符传递给
Range()方法。例如;见mrexcel.com/forum/excel-questions/…