没有.UsedTable范围。为了只关注表和其中的数据,应该使用
ListObject
以及
.DataBodyRange
这是从ListObject获取数据的基本思想。
Sub test()
Debug.Print ActiveSheet.ListObjects(1).DataBodyRange.Address
End Sub
以下是您的脚本更改为包含以上内容:
Sub FilterAndCopy()
Dim rng As Range, sht1 As Worksheet, sht2 As Worksheet
Set sht1 = Worksheets("SHIFT LOG")
Set sht2 = Worksheets("FAULTS RAISED")
sht2.ListObjects(1).DataBodyRange.ClearContents
With Intersect(sht1.Columns("B:BP"), sht1.ListObjects(1).DataBodyRange)
.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
Dim rngToCopy As Range
Set rngToCopy = Intersect(.SpecialCells(xlCellTypeVisible), sht1.Range("A:B, AB:AD, BO:BO"))
Debug.Print rngToCopy.Address
rngToCopy.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