首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >子函数VBA

子函数VBA
EN

Stack Overflow用户
提问于 2016-06-08 10:22:04
回答 3查看 126关注 0票数 1

我有一个基于A组的过滤器,它看起来像这样

代码语言:javascript
运行
复制
Sheets("Data").Range("A:X").copy  Destination:=Sheets("Team A").Range("A1")

Columns("R:R").Select
Selection.AutoFilter
ActiveSheet.Range("$R$1:$R$1048576").AutoFilter Field:=1, Criteria1:= _
"Team A"

我想过滤其他8个团队的数据,并将数据粘贴到每个工作表中。

这是否有可能使用带有参数的子例程,所以我可以不把团队A放在一个变量名上,比如R,它会循环遍历我可以引用的团队名称吗?

谢谢你的帮助

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-08 11:01:02

与Gary的答案类似--这将处理除“数据”之外的所有工作表,并且不需要单独的过程:

代码语言:javascript
运行
复制
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工作表更多的数据,可以使用:

代码语言:javascript
运行
复制
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
票数 1
EN

Stack Overflow用户

发布于 2016-06-08 10:56:04

是的,可以像您提到的那样创建一个子例程,我可能还没有正确理解,但是就像您的代码没有将正确的团队数据复制到工作表一样,下面的示例会说明这一点,但是您可以始终将您的代码放回原处。

代码语言:javascript
运行
复制
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
票数 1
EN

Stack Overflow用户

发布于 2016-06-08 11:31:26

尝尝这个

选项显式

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37699786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档