【发布时间】:2018-11-02 00:45:10
【问题描述】:
我有一个工作 script 那个 auto-copies 特定的 cells 从主 Sheet 到辅助 Sheet。如果将 Master 设置为 range,则此 script 工作正常,但在转换为 table 时返回错误。
脚本:
Option Explicit
Sub FilterAndCopy()
Dim rng As Range, sht1 As Worksheet, sht2 As Worksheet
Set sht1 = Worksheets("SHIFT LOG")
Set sht2 = Worksheets("FAULTS RAISED")
sht2.UsedRange.ClearContents
With Intersect(sht1.Columns("B:BP"), sht1.UsedRange)
.Cells.EntireColumn.Hidden = False ' unhide columns
If .Parent.AutoFilterMode Then .Parent.AutoFilterMode = False
'within B:BP, column B is the first column
.AutoFilter field:=1, Criteria1:="Faults Raised"
'within B:BP, Columns B:C, AC:AE, BP are referenced as .Columns A:B, AB:AD, BO
.Range("A:B, AB:AD, BO:BO").Copy Destination:=sht2.Cells(4, "B")
.Parent.AutoFilterMode = False
'no need to delete what was never there
'within B:BP, Columns C:AA, AE:BN, BP are referenced as .Columns B:Z, AD:BM
.Range("B:Z").EntireColumn.Hidden = True ' hide columns
.Range("AD:BM").EntireColumn.Hidden = True ' hide columns
End With
End Sub
我尝试在整个script 中将Range 更改为Table(见下文)。但它会在下一行返回错误。
Option Explicit
Sub FilterAndCopy()
Dim rng As Table, sht1 As Worksheet, sht2 As Worksheet
Set sht1 = Worksheets("SHIFT LOG")
Set sht2 = Worksheets("FAULTS RAISED")
sht2.UsedTable.ClearContents
With Intersect(sht1.Columns("B:BP"), sht1.UsedTable)
.Cells.EntireColumn.Hidden = False ' unhide columns
If .Parent.AutoFilterMode Then .Parent.AutoFilterMode = False
'within B:BP, column B is the first column
.AutoFilter field:=1, Criteria1:="Faults Raised"
'within B:BP, Columns B:C, AC:AE, BP are referenced as .Columns A:B, AB:AD, BO
.Table("A:B, AB:AD, BO:BO").Copy Destination:=sht2.Cells(4, "B")
.Parent.AutoFilterMode = False
'no need to delete what was never there
'within B:BP, Columns C:AA, AE:BN, BP are referenced as .Columns B:Z, AD:BM
.Table("B:Z").EntireColumn.Hidden = True ' hide columns
.Table("AD:BM").EntireColumn.Hidden = True ' hide columns
End With
End Sub
.AutoFilter field:=1, Criteria1:="Faults Raised"
错误是:运行时错误'1004':对象'Range'的方法'Autofilter'失败
【问题讨论】:
-
一个表是一个
ListObject。您能否更具体地说明您是如何尝试修改此代码的?也许它的一个小sn-p,以及抛出的错误。 -
@BigBen,我刚刚将所有标有 Range 的东西都换成了 Table。错误出现在 FilterandCopy 行
-
对象模型中没有
Table对象 - 使用ListObject及其属性。 -
是否必须将范围更改为表格?
-
您想对表使用结构化引用而不是相同列的范围引用?