循环遍历工作表列表并将粘贴数据复制到摘要表中

时间:2017-12-19 09:51:51

标签: excel vba excel-vba

大家好我试图遍历在特定范围内命名的特定工作表列表,然后将这些工作表中的粘贴数据复制到摘要表中。

到目前为止,我有这段代码:

Sub MacroToDoTheWork()

Dim ws As Worksheet
Dim ZeileUntersucht As Integer
Dim ZeileEintragen As Integer
Dim sheet_name As Range


ZeileUntersucht = 17  
ZeileEintragen = 2

For each sheet_name in Sheets("Frontend").Range("L21:L49")

 For ZeileUntersucht = 20 To 515
    If ws.Cells(ZeileUntersucht, 238).Value = "yes" Then
        Worksheets("Market Place Output").Cells(ZeileEintragen, 1) = ws.Cells(ZeileUntersucht, 1)
        ZeileEintragen = ZeileEintragen + 1

    End If
Next ZeileUntersucht

Next sheet_name

End Sub

For循环正在运行并浏览选定的工作表范围以检查条件并将值粘贴到另一个工作表中。我遇到的问题是每个循环。让这个循环适用于工作表列表。前端范围L21:L49是存储工作表名称的范围。

如果您需要更多信息,请询问

2 个答案:

答案 0 :(得分:1)

您可以阅读Rangesheet_names数组中的所有工作表名称。

稍后,当循环遍历Sheets中的所有ThisWorkbook时,您可以使用Match函数检查循环中的当前工作表是否与数组中的某个名称匹配。

注意:如果您尝试以另一种方式执行此操作,循环浏览Sheets("Frontend").Range("L21:L49")中的工作表名称,然后使用该工作表的名称,您可以获得运行 - 时间错误,如果工作表名称赢了;可以在工作簿中的任何工作表中找到。

修改后的代码

Dim Sht As Worksheet
Dim sheet_names As Variant

' getting the sheet names inside an array
sheet_names = Application.Transpose(Sheets("Frontend").Range("L21:L49").Value)

' loop through worksheets
For Each Sht In ThisWorkbook.Sheets
    ' use Macth function to check if current sheet's name matches one of the sheets in your Range
    If Not IsError(Application.Match(Sht.Name, sheet_names, 0)) Then
        ' do here your copy Paste


    End If

Next Sht

答案 1 :(得分:0)

我并不完全理解你的问题,但我认为如果你这样尝试就会修复它:

For Each sheet_name In Sheets("Frontend").Range("L21:L49")
    Set ws = Worksheets(sheet_name.Text)
    For ZeileUntersucht = 20 To 515
        If ws.Cells(ZeileUntersucht, 238).Value = "yes" Then
            Worksheets("Market Place Output").Cells(ZeileEintragen, 1) = ws.Cells(ZeileUntersucht, 1)
            ZeileEintragen = ZeileEintragen + 1
        End If
    Next ZeileUntersucht
Next sheet_name

如果你的想法是sheet_name是工作表的名称,那么它应该有效。

两个想法: