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

问题描述 投票:1回答:2

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

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

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是存储工作表名称的范围。

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

excel vba excel-vba
2个回答
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

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是工作表的名称,那么它应该工作。


两个想法:

© www.soinside.com 2019 - 2024. All rights reserved.