【问题标题】:selecting multiple worksheet with prefix选择多个带前缀的工作表
【发布时间】:2018-08-08 16:48:12
【问题描述】:

尽管我需要从仅以“2018 和 2017”开头的工作表中复制数据,但我正在处理具有多个选项卡的工作表。

我想从这些工作表中复制 range -example (A13:L40) 并将它们全部粘贴到另一个选项卡“摘要”中。

非常感谢任何帮助或建议

下面是我到目前为止创建的宏,但我仍然不确定如何添加 2017。

Sub Macroif()
    Dim sheet As Worksheet

    Sheets("Summary").Activate

    For Each sheet In Worksheets
        If (sheet.Name Like "2018*") Then
            sheet.Select
            sheet.Range("A13:L40").Copy
            Worksheets("Summary").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial (xlPasteValues)

        End If
    Next sheet

End Sub

【问题讨论】:

    标签: excel vba copy-paste worksheet-function


    【解决方案1】:

    您也可以循环浏览工作表,而无需选择工作表。

    Sub Macroif()
        Dim sh As Worksheet
    
        For Each sh In Worksheets
            If sh.Name <> "Summary" Then
                If sh.Name Like "2017*" Or sh.Name Like "2018*" Then
                    With sh
                        .Range("A13:L40").Copy
                        With Worksheets("Summary")
                            .Range("A" & .Cells(.Rows.Count, "A").End(xlUp).Row + 1).PasteSpecial (xlPasteValues)
                        End With
                    End With
                End If
    
            End If
        Next sh
    
    End Sub
    

    【讨论】:

    • 请注意,我在行数中添加了“+1”
    【解决方案2】:

    Sheet 对象有一个属性“name”,有很多方法可以检查字符串中的子字符串。因此,只需遍历所有工作表并检查标题是否以您的子字符串开头,然后将范围对象设置为您要复制和复制/粘贴的任何列。

    编辑:在 OP 的编辑之后,这里是缺少的代码:

    If (sheet.Name Like "2018*") Then
    

    将其更改为:

    If (Left(sheet.Name,4)="2018") or (Left(sheet.name,4)="2017") Then
    

    【讨论】:

    • @ComradeMicha 非常感谢,它工作正常。非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多