循环浏览工作表列表,然后将粘贴数据复制到摘要表中



大家好,我正试图循环浏览以一定范围命名的特定工作表列表,然后将这些纸的粘贴数据复制到摘要表中。

到目前为止,我有此代码:

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

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

您可以读取从 Rangesheet_names array的所有表格名称。

稍后,当通过ThisWorkbook中的所有Sheets循环时,您可以使用Match函数检查循环中的当前表是否匹配数组中的名称之一。

Note :如果您尝试以另一种方式进行操作,请浏览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

我完全不明白您的问题,但是我想如果您这样尝试,它将是解决的:

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是工作表的名称,则应起作用。


两个想法:

  • 避免在VBA中使用_,有些人讨厌它。
  • 为什么要使用整数而不是长?

最新更新