VBA Excel 2010在工作簿/工作表之间复制/粘贴,提示粘贴位置
我有一个基础电子表格,需要从许多其他电子表格(试验)收集数据。 我试图写一个macros来完成以下内容:
1)提示打开文件(每个macros实例使用不同的文件)
2)将第1列从试用版复制到基本电子表格中表1中的特定列
3)将第2列从试用版复制到基本电子表格中的表2中的特定列,等等。
4)对于每个文件,被复制的列是不同的(例如,试验1可能被复制到Y2:Y102,试验3可能是A2:A102),但是每个表中的范围是相同的
所以我想要的macros是为了提示一次为一张纸的范围,然后继续将列复制到相同的范围,但在不同的工作表没有提示。
这是我到目前为止:
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
不会打开我提示的文件的窗口。
任何帮助将不胜感激!!
快速回答
MyRange
和TrialFile
是variables。
当你引用它们时,你不需要用双引号括起来。
此Range("MyRange").Paste
失败,因为Myrange
不是Named Range
,而是Range
types的variables对象。 应该是这样的:
Myrange.Paste
此Windows("TrialFile").Activate
不起作用,因为TrialFile
包含Workbook
的full path
。 您只需要使用Windows
的Workbook name
来激活它。 所以应该是这样的:
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
上面的代码只是基于你想如何构build你的过程而被修改的。
我想完全消除Activate
方法,但是我认为你需要让用户首先看到目标范围,这样就不会有帮助。