2012-08-31 180 views
0

我想将模板中的命名范围复制到我当前的工作簿中,该工作簿为空。问题是我没有任何现有的范围内这个新的工作簿。所以,我无法复制粘贴其他书籍的范围。这是我曾尝试,但似乎并不奏效:复制将命名范围从一个工作簿粘贴到另一个

Sub cpyRange() 

Dim rng1 As Range, rng2 As Range 

Set rng2 = Workbooks.Open("C:\SVN\Template.xls").Sheets("Report").Range("REPORT") 

rng2.Copy 

ThisWorkbook.Sheets(1).Select 

Selection.PasteSpecial Paste:=xlPasteValues 


ActiveWorkbook.Save 
ActiveWorkbook.Close 

MsgBox ("done") 

End Sub 

我想用它的范围名一起复制范围之内的所有数据粘贴到我的当前工作簿。

回答

3

您的代码中至少有两个特定问题: 1. PasteSpecial是Range而不是工作表的一种方法。 2.粘贴不会复制范围名称。

下面的代码并复制到细胞中的靶纸的A1,然后创建一个指向目标表中选择一个名称:

Sub cpyRange() 
Dim SourceWorkbook As Excel.Workbook 
Dim RangeName As String 
Dim TargetWorkbook As Excel.Workbook 
Dim TargetSheet As Excel.Worksheet 

RangeName = "REPORT" 
Set SourceWorkbook = Workbooks.Open("C:\SVN\Template.xls") 
SourceWorkbook.Sheets("Report").Range(RangeName).Copy 
Set TargetWorkbook = ThisWorkbook 
Set TargetSheet = TargetWorkbook.Sheets(1) 
TargetSheet.Range("A1").PasteSpecial Paste:=xlPasteValues 
TargetWorkbook.Names.Add RangeName, "='" & TargetSheet.Name & "'!" & Selection.Address 
SourceWorkbook.Close savechanges:=True 
MsgBox ("done") 
End Sub 

我增加了一些变数,尝试让它更灵活一点。

+0

这似乎是一种选择,但我希望我的新范围创建时不需要任何手动干预就可以创建“myRange”而不是“A1”。我想知道是否有任何实用程序来重命名范围或不是?现在我想在此之后追加一个范围;我相信在这种情况下我不能使用“A1”。 – Him

+0

+ 1 :) @Him:要附加到现有的范围,您可能想使用'UNION'或重新定义范围? –

+0

谢谢它的作品:) – Him

相关问题