大家好,我正试图循环浏览以一定范围命名的特定工作表列表,然后将这些纸的粘贴数据复制到摘要表中。
到目前为止,我有此代码:
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是存储工作表名称的范围。
如果您需要更多信息,请询问
您可以读取从 Range
到 sheet_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中使用
_
,有些人讨厌它。 - 为什么要使用整数而不是长?