循环引用包含所有图纸名称的命名范围时需要VBA

循环引用包含所有图纸名称的命名范围时需要VBA,vba,excel,named-ranges,Vba,Excel,Named Ranges,我有一段“原始”代码,它将一些数据从一张工作表复制到另一张工作表,从中复制数据的工作表名称可以在单元格中找到。但是,现在图纸的数量正在增长,我已经为图纸名称创建了一个动态命名范围,并希望为动态范围内的所有图纸执行以下代码。我的代码如下所示: Calculate ' get the worksheet name from cell AA3 Worksheets(Range("AA3").Value).Activate ' Copy the data Range("A1:A1500").Sel

我有一段“原始”代码,它将一些数据从一张工作表复制到另一张工作表,从中复制数据的工作表名称可以在单元格中找到。但是,现在图纸的数量正在增长,我已经为图纸名称创建了一个动态命名范围,并希望为动态范围内的所有图纸执行以下代码。我的代码如下所示:

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
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
现在,我想有一个类似于动态范围的循环,但我无法让它工作,因为VBA真的不是我喜欢的…因此,我不想引用AA3,AA4等,而是引用包含AA3,AA4…AAx数据的命名范围。命名区域也可能包含空白单元格,因为它是AA3…AA150中数组公式的结果

谢谢大家!! /弗雷德里克

下面的示例按循环遍历命名区域中的每个单元格 为每个…下一个循环使用一个。如果该范围内任何单元格的值 超过限制值时,单元格颜色将更改为黄色

因此,您可以从以下内容开始:

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
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
您会注意到,我对命名范围的引用方式更为明确—此处的要求可能会有所不同,具体取决于您如何声明要开始的范围(其范围是什么),但我这样做的方式很可能适合您。有关命名范围范围的更多信息,请参阅链接文章

下面的示例按循环遍历命名区域中的每个单元格 为每个…下一个循环使用一个。如果该范围内任何单元格的值 超过限制值时,单元格颜色将更改为黄色

因此,您可以从以下内容开始:

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
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

您会注意到,我对命名范围的引用方式更为明确—此处的要求可能会有所不同,具体取决于您如何声明要开始的范围(其范围是什么),但我这样做的方式很可能适合您。有关命名范围范围的更多信息,请参阅链接文章。

以下代码应该适合您。我假设命名范围(我称之为副本)在活动工作簿(范围工作簿)中

子复印机()
将图纸名称设置为范围
暗拷贝范围作为范围
Dim destinationRange作为范围
对于范围内的每个图纸名称(“复印件”)
如果sheetName.Value“”和sheetName.Value为0,则
设置copyRange=纸张(sheetName.Value).Range(“A1:A1500”)
Set destinationRange=Sheets(“Artiklar”)。单元格(Rows.Count,1)。结束(xlUp)。偏移量(1,0)
复制范围,复制
destinationRange.Paste特殊XLPaste值
如果结束
下一个
端接头

以下代码应该适合您。我假设命名范围(我称之为副本)在活动工作簿(范围工作簿)中

子复印机()
将图纸名称设置为范围
暗拷贝范围作为范围
Dim destinationRange作为范围
对于范围内的每个图纸名称(“复印件”)
如果sheetName.Value“”和sheetName.Value为0,则
设置copyRange=纸张(sheetName.Value).Range(“A1:A1500”)
Set destinationRange=Sheets(“Artiklar”)。单元格(Rows.Count,1)。结束(xlUp)。偏移量(1,0)
复制范围,复制
destinationRange.Paste特殊XLPaste值
如果结束
下一个
端接头
将myNamedRng设置为范围,单元格设置为范围
'...
设置myNamedRng=工作表(“MySheet”).Range(“myRange”)”
Dim myNamedRng为范围,单元格为范围
'...
设置myNamedRng=工作表(“MySheet”).Range(“myRange”)”-=问题已解决=-

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

问候,, 弗雷德里克

-=问题已解决=-

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

问候,,
弗雷德里克

Vegard,谢谢你的快速回复!然而,我认为我不够清楚。命名范围包含我要从中复制A1:A1500并粘贴到第一行名为“Artiklar”的工作表中的工作表的名称。我想我需要这样的东西:“对于[NamedRange]中的每个sheetname,复制A1:A1500并粘贴到“Artiklar”Vegard的工作表中,感谢您的快速回复!但是,我认为我不够清楚。命名范围包含我希望复制A1:A1500并粘贴到名为“Artiklar”的工作表中的工作表的名称“在第一排。我想我需要这样的东西:“对于[NamedRange]中的每个sheetname,复制A1:A1500,然后粘贴到sheet”Artiklar“对不起,回信太晚了!我已经使用了你的代码,它的工作就像魅力!非常感谢你的帮助/FredrikSorry迟了回复!我已经使用了你的代码,它的工作就像魅力!非常感谢你的帮助/弗雷德里克