VBA Excel 2010在工作簿/工作表之间复制/粘贴,提示粘贴位置

时间:2013-12-06 01:51:05

标签: excel vba excel-vba

我有一个基本电子表格,需要从许多其他电子表格(试验)中收集数据。 我试图写一个宏来完成以下任务:

1)提示打开文件(每个宏实例使用不同的文件)

2)将第1列从试用版复制到基础电子表格中第1页中的特定列

3)将第2列从试用版复制到基础电子表格中第2页的特定列,依此类推。

4)虽然对于每个文件,正在复制的列是不同的(即,试验1可能被复制到Y2:Y102,试验3可能是A2:A102),但每个工作表中的相同范围< / p>

所以我想从宏中获取它是为了提示我一次为一张纸的范围,然后继续将列复制到相同的范围但在不同的纸张中没有提示。

这是我到目前为止所做的:

Sub skymacroT1()

TrialFile = Application.GetOpenFilename
Workbooks.Open TrialFile
Range("B4:B104").Select
Selection.Copy
'
Windows("Sky Braced Pressure Combined.xlsm").Activate
Sheets("Lt Heel").Select
Dim MyRange As Range
Set MyRange = Application.InputBox("select cell", Type:=8)
MyRange.Select
Range("MyRange").Paste
Application.CutCopyMode = False
'
Windows("TrialFile").Activate
Range("C4:C104").Select
Selection.Copy
'
Windows("Sky Braced Pressure Combined.xlsm").Activate
Sheets("Lt Met").Select
MyRange.Select
Range("MyRange").PasteSpecial
Application.CutCopyMode = False

End Sub

然而,代码在两个位置失败:Range("MyRange").Paste无法粘贴,Windows("TrialFile").Activate无法打开我提示的文件窗口。

非常感谢任何帮助!!

2 个答案:

答案 0 :(得分:1)

Range("MyRange").Paste失败,因为Myrange不是Named Range,而是Range类型的变量对象。它应该是这样的:

Myrange.Paste

Windows("TrialFile").Activate不起作用,因为TrialFile包含full path的{​​{1}}。您只需Workbook即可使用Workbook name激活它。所以它应该是这样的:

Windows

我也在下面重写了你的代码:

Workbooks.Open TrialFile
TrialFilename = Activeworkbook.Name
'~~> other code goes here
Windows(TrialFilename).Activate

上述代码只是根据您希望如何构建程序进行修改 我想完全消除Option Explicit '~~> Force Variable Declaration Sub skymacroT1() '~~ Declare all variables Dim TrialFile, wbTrial as Workbook, wbSky as Workbook Dim MyRange as Range, MyRangeAdd as String TrialFile = Application.GetOpenFilename Set wbTrial = Workbooks.Open(TrialFile) Set wbSky = Workbooks("Sky Braced Pressure Combined") '~~> Can't be ommitted since you need to see the first address in the destination sheet to copy to. wbSky.Sheets("Lt Heel").Activate '~~> Identify the objects first before you work on them Set MyRange = Application.InputBox("select cell", Type:=8) MyRangeAdd = MyRange.Address '~~> set the universal address for all sheets '~~ Proceed with copying wbTrial.Sheets(1).Range("B4:B104").Copy wbSky.Sheets("Lt Heel").Range(MyRangeAdd) wbTrial.Sheets(1).Range("C4:C104").Copy wbSky.Sheets("Lt Met").Range(MyRangeAdd) End Sub 方法,但我认为你需要先让用户看到目标范围,这样才能得到帮助。

答案 1 :(得分:0)

快速回答

MyRangeTrialFile是变量。

当你引用它们时,你不需要用双引号括起来。