需要VBA循环引用一个包含所有表名称的命名范围

我有一段粗略的代码,它把一些数据从一个表格复制到另一个表格,并且可以在单元格中find从中复制数据的表格名称。 但是,工作表的数量正在增加,并且为工作表名称创build了一个dynamic命名范围,并且希望为dynamic范围内的所有工作表执行以下代码。 我的代码如下所示:

Calculate ' get the worksheet name from cell AA3 Worksheets(Range("AA3").Value).Activate ' Copy the data Range("A1:A1500").Select Selection.Copy ' Paste the data on the next empty row in sheet "Artiklar" Sheets("Artiklar").Select Dim NextRow As Range Set NextRow = Range("A65536").End(xlUp).Offset(1, 0) NextRow.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 

现在,我想有一个像循环参考dynamic范围,但我无法得到它的工作,因为VBA真的不是我的一杯茶…所以,而不是参考AA3,AA4等我想引用包含AA3,AA4 …. AAx数据的命名范围。 指定的范围也可能包含空白单元格,因为它是AA3中的数组公式的结果…. AA150。

谢谢! /弗雷德里克

下面的代码应该适合你。 我认为命名的范围(我称之为副本)是在活动工作簿(范围工作簿)中。

 Sub copySheets() Dim sheetName As Range Dim copyRange As Range Dim destinationRange As Range For Each sheetName In Range("copysheets") If sheetName.Value <> "" And sheetName.Value <> 0 Then Set copyRange = Sheets(sheetName.Value).Range("A1:A1500") Set destinationRange = Sheets("Artiklar").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) copyRange.Copy destinationRange.PasteSpecial xlPasteValues End If Next End Sub 
 Dim myNamedRng as Range, cell as Range '... Set myNamedRng = Worksheets("MySheet").Range("myRange") '<-- set a variable referencing your named Range With Sheets("Artiklar") For Each cell In myNamedRng If cell.Value <>"" Then .Range("A" & .Rows.Count).End(xlUp).Offset(1, 0).Resize(1500).Value = Worksheets(cell.Value).Range("A1:A1500").Value Next cell End With 

以下示例通过使用For Each … Next循环遍历命名范围中的每个单元格。 如果范围内的任何单元格的值超过“限制”的值,则单元格颜色将更改为黄色。

 vba Sub ApplyColor() Const Limit As Integer = 25 For Each c In Range("MyRange") If c.Value > Limit Then c.Interior.ColorIndex = 27 End If Next c End Sub 

资源

所以你可以从这样的事情开始:

 Calculate Dim NextRow As Range ' get a range object from the named range For Each c In Range("[File.xls]Sheet1!NamedRange") ' Copy the data Worksheets(c.Value).Range("A1:A1500").Copy ' Paste the data on the next empty row in sheet "Artiklar" Sheets("Artiklar").Activate Set NextRow = Range("A65536").End(xlUp).Offset(1, 0) NextRow.PasteSpecial xlPasteValues Next c 

你会注意到我对指定的范围是如何被引用的更加明确 – 这里的要求可能会有所不同,取决于你如何声明范围(范围是什么),但是我做的方式是最有可能为你工作。 有关命名范围的范围的更多信息,请参阅链接的文章。

– =解决问题= –

谢谢大家对我的问题的贡献! 我收到的所有答案都帮助我优化了我的代码,现在它正常运行正常!

问候,弗雷德里克