VBA工作表。select不工作

我试图编写一些代码,将工作簿中的工作表复制到不同工作簿中的工作表中。 一旦工作表被加载到新的工作簿中,我想locking工作表的第一行,并添加一个filter。 我可以locking行很好,但由于某种原因,我不能添加到第一行的filter。 无论我一直在尝试什么,我都会收到错误。 以下是我到目前为止的结果:

Private Sub CommandButton3_Click() 'IMPORT DATA Sheets("Raw Data").Unprotect Application.DisplayAlerts = False Sheets("Raw Data").Delete Sheets.Add After:=Worksheets(1) Worksheets(2).Name = "Raw Data" Application.DisplayAlerts = True Dim basebook As Workbook Dim mybook As Workbook Dim sourceRange As Range Dim destrange As Range Dim SourceRcount As Long Dim lastRow As Long Dim lastColumn As Long Dim n As Long Dim MyPath As String Dim SaveDriveDir As String Dim FName As Variant Dim Path As String Dim FileName As String Dim FileType As String Dim strFName As String Dim FSO As Scripting.FileSystemObject Set FSO = New FileSystemObject SaveDriveDir = CurDir MyPath = "H:" ChDrive MyPath ChDir MyPath FName = Application.GetOpenFilename(filefilter:="Excel Files (*.xls), *.xls", MultiSelect:=True) If IsArray(FName) Then Application.ScreenUpdating = False Set basebook = ThisWorkbook For n = LBound(FName) To UBound(FName) Set mybook = Workbooks.Open(FName(n)) Set sourceRange = mybook.Worksheets(1).Cells SourceRcount = sourceRange.Rows.count Set destrange = basebook.Sheets("Raw Data").Cells sourceRange.Copy destrange mybook.Close True Next n End If ChDrive SaveDriveDir ChDir SaveDriveDir 'Locks first row of sheet With ActiveWindow .SplitColumn = 0 .SplitRow = 1 End With ActiveWindow.FreezePanes = True FilterReport Sheets("Main").Select Cells(5, 4).Value = FName strFName = Cells(5, 4).Value FileName = FSO.GetFileName(strFName) Cells(5, 4).Value = FileName Application.CutCopyMode = False Application.ScreenUpdating = True Sheets("Raw Data").Protect End Sub Private Sub FilterReport() Dim lastRow As Long Dim lastColumn As Long Worksheets("Raw Data").Activate Worksheets("Raw Data").Select lastRow = Range("A" & Rows.count).End(xlUp).row lastColumn = Cells(1, Columns.count).End(xlToLeft).Column Range(Cells(1, 1), Cells(1, lastColumn)).Select Selection.AutoFilter End Sub 

通过一些debugging,我发现其中一个问题是“原始数据”工作表永远不会在FilterReport子项中被选中。 出于某种原因,它只是select“主”表,我不知道为什么。

修订子:

 Private Sub FilterReport() Dim RD As Worksheet Dim lastRow As Long Dim lastColumn As Long Set RD = Sheets("CS-CRM Raw Data") lastRow = RD.Range("A" & Rows.count).End(xlUp).row lastColumn = RD.Cells(1, Columns.count).End(xlToLeft).Column With RD.Range(Cells(1, 1), Cells(1, lastColumn)) .AutoFilter End With End Sub 

现在我在With语句上得到错误,但是lastRowlastColumn现在是正确的。 我不知道为什么它会切换lastColumnWith语句之间的lastColumn表。

这里是正确使用完成的cose:

 Private Sub FilterReport() Dim RD As Worksheet Dim lastRow As Long Dim lastColumn As Long Set RD = Sheets("CS-CRM Raw Data") with RD lastRow = .Range("A" & .Rows.count).End(xlUp).row 'i guess you forgot the first dot at .rows.count lastColumn = .Cells(1, .Columns.count).End(xlToLeft).Column With .Range(.Cells(1, 1), .Cells(lastrow, lastColumn)) 'here some dots forgotten from you AGAIN (before .cells) 'sorry i replaced a 1 by lastrow wiwh makes more sense to me .AutoFilter End With end with Set RD = Nothing End Sub