子函数 VBA
Sub Function VBA
我有一个基于团队 A 的过滤器,看起来像这样
Sheets("Data").Range("A:X").copy Destination:=Sheets("Team A").Range("A1")
Columns("R:R").Select
Selection.AutoFilter
ActiveSheet.Range("$R:$R48576").AutoFilter Field:=1, Criteria1:= _
"Team A"
我想按其他8个队过滤数据,然后分别粘贴到一个sheet中。
这是否可以使用带参数的子例程,而不是放置团队 A,我可以放置一个像 R 这样的变量名,它将遍历我可以引用的团队名称?
感谢帮助
是的,可以像你提到的那样创建一个子程序,我可能没有正确理解,但就像你的代码没有将正确的团队数据复制到工作表中一样,下面的例子反驳了这一点,但你总是可以把你的放回去.
Public Sub Sample()
Sample2 "Team A"
Sample2 "Team B"
Sample2 "Team C"
Sample2 "Team D"
Sample2 "Team E"
Sample2 "Team F"
Sample2 "Team G"
Sample2 "Team H"
End Sub
Private Sub Sample2(ByVal StrTeam As String)
Sheets("Data").Range("R:R").AutoFilter Field:=1, Criteria1:=StrTeam
Sheets("Data").Range("A:X").Copy Destination:=Sheets(StrTeam).Range("A1")
End Sub
与 Gary 类似的答案 - 这将执行除 'Data' 之外的所有 sheets,并且不需要单独的程序:
Sub Test()
Dim wrkSht As Worksheet
For Each wrkSht In ThisWorkbook.Worksheets
If wrkSht.Name <> "Data" Then
With ThisWorkbook.Worksheets("Data")
.Columns("R:R").AutoFilter Field:=1, Criteria1:=wrkSht.Name
.Range("A:X").Copy Destination:=wrkSht.Range("A1")
End With
End If
Next wrkSht
End Sub
要排除 Data
sheet 之外的内容,您可以使用:
Sub Test()
Dim wrkSht As Worksheet
For Each wrkSht In ThisWorkbook.Worksheets
Select Case wrkSht.Name
Case "Data", "SomeOtherSheet"
'Do nothing.
Case Else
With ThisWorkbook.Worksheets("Data")
.Columns("R:R").AutoFilter Field:=1, Criteria1:=wrkSht.Name
.Range("A:X").Copy Destination:=wrkSht.Range("A1")
End With
End Select
Next wrkSht
End Sub
试试这个
选项显式
Sub Test()
Dim ws As Worksheet
With ThisWorkbook.Worksheets("Data").Range("A:X")
For Each ws In ThisWorkbook.Worksheets
If InStr(ws.Name, "Team") > 0 Then
.AutoFilter
.Columns("R:R").AutoFilter Field:=18, Criteria1:=ws.Name
If Application.WorksheetFunction.Subtotal(103, .Cells.Resize(, 1)) > 1 Then .SpecialCells(xlCellTypeVisible).Copy Destination:=ws.Range("A1")
.AutoFilter
End If
Next ws
End With
End Sub
我有一个基于团队 A 的过滤器,看起来像这样
Sheets("Data").Range("A:X").copy Destination:=Sheets("Team A").Range("A1")
Columns("R:R").Select
Selection.AutoFilter
ActiveSheet.Range("$R:$R48576").AutoFilter Field:=1, Criteria1:= _
"Team A"
我想按其他8个队过滤数据,然后分别粘贴到一个sheet中。
这是否可以使用带参数的子例程,而不是放置团队 A,我可以放置一个像 R 这样的变量名,它将遍历我可以引用的团队名称?
感谢帮助
是的,可以像你提到的那样创建一个子程序,我可能没有正确理解,但就像你的代码没有将正确的团队数据复制到工作表中一样,下面的例子反驳了这一点,但你总是可以把你的放回去.
Public Sub Sample()
Sample2 "Team A"
Sample2 "Team B"
Sample2 "Team C"
Sample2 "Team D"
Sample2 "Team E"
Sample2 "Team F"
Sample2 "Team G"
Sample2 "Team H"
End Sub
Private Sub Sample2(ByVal StrTeam As String)
Sheets("Data").Range("R:R").AutoFilter Field:=1, Criteria1:=StrTeam
Sheets("Data").Range("A:X").Copy Destination:=Sheets(StrTeam).Range("A1")
End Sub
与 Gary 类似的答案 - 这将执行除 'Data' 之外的所有 sheets,并且不需要单独的程序:
Sub Test()
Dim wrkSht As Worksheet
For Each wrkSht In ThisWorkbook.Worksheets
If wrkSht.Name <> "Data" Then
With ThisWorkbook.Worksheets("Data")
.Columns("R:R").AutoFilter Field:=1, Criteria1:=wrkSht.Name
.Range("A:X").Copy Destination:=wrkSht.Range("A1")
End With
End If
Next wrkSht
End Sub
要排除 Data
sheet 之外的内容,您可以使用:
Sub Test()
Dim wrkSht As Worksheet
For Each wrkSht In ThisWorkbook.Worksheets
Select Case wrkSht.Name
Case "Data", "SomeOtherSheet"
'Do nothing.
Case Else
With ThisWorkbook.Worksheets("Data")
.Columns("R:R").AutoFilter Field:=1, Criteria1:=wrkSht.Name
.Range("A:X").Copy Destination:=wrkSht.Range("A1")
End With
End Select
Next wrkSht
End Sub
试试这个
选项显式
Sub Test()
Dim ws As Worksheet
With ThisWorkbook.Worksheets("Data").Range("A:X")
For Each ws In ThisWorkbook.Worksheets
If InStr(ws.Name, "Team") > 0 Then
.AutoFilter
.Columns("R:R").AutoFilter Field:=18, Criteria1:=ws.Name
If Application.WorksheetFunction.Subtotal(103, .Cells.Resize(, 1)) > 1 Then .SpecialCells(xlCellTypeVisible).Copy Destination:=ws.Range("A1")
.AutoFilter
End If
Next ws
End With
End Sub