大家好我试图遍历在特定范围内命名的特定工作表列表,然后将这些工作表中的粘贴数据复制到摘要表中。
到目前为止,我有这段代码:
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是存储工作表名称的范围。
如果您需要更多信息,请询问
答案 0 :(得分:1)
您可以阅读Range
到sheet_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
是工作表的名称,那么它应该有效。
两个想法:
_
,有些人讨厌它。