VBA工作表。选择“不工作”
我正在尝试编写一些代码,将工作表从工作簿复制到其他工作簿中的工作表。将工作表加载到新工作簿后,我希望锁定工作表的第一行,并向其添加筛选器。我可以很好地锁定行,但由于某些原因,我无法向第一行添加筛选器。无论我一直在尝试什么,我总是会出错。以下是我到目前为止得到的结果:VBA工作表。选择“不工作”,vba,excel,Vba,Excel,我正在尝试编写一些代码,将工作表从工作簿复制到其他工作簿中的工作表。将工作表加载到新工作簿后,我希望锁定工作表的第一行,并向其添加筛选器。我可以很好地锁定行,但由于某些原因,我无法向第一行添加筛选器。无论我一直在尝试什么,我总是会出错。以下是我到目前为止得到的结果: Private Sub CommandButton3_Click() 'IMPORT DATA Sheets("Raw Data").Unprotect Application.DisplayAlerts = False Sh
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
通过一些调试,我发现其中一个问题是“原始数据”表从未在FilterReport sub中被选中。出于某种原因,它只是选择了“主”表,我不知道为什么
修订分条款:
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
我现在在
语句中得到了错误,但是lastRow
和lastColumn
现在是正确的。我不知道为什么它会在lastColumn
和With
语句之间切换工作表 以下是正确使用和完成的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
创建对象,然后使用它们,而不是使用。选择。请参见“确定”,我创建了一个工作表对象,并将其设置为“原始数据”工作表。这修复了未为“lastRow”和“lastColumn”选择原始数据的问题。但是,当我尝试应用自动筛选时,它仍然希望默认返回“主”工作表。我将发布上面的代码。您尚未完全限定对象;)例如,将RD.Range(单元格(1,1),单元格(1,lastColumn))
更改为RD.Range(RD.Cells(1,1),RD.Cells(1,lastColumn))
非常感谢,这很有效。很高兴您能成功:)