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不会打开我提示的文件的窗口。

任何帮助将不胜感激!!

快速回答

MyRangeTrialFile是variables。

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

Range("MyRange").Paste失败,因为Myrange不是Named Range ,而是Rangetypes的variables对象。 应该是这样的:

 Myrange.Paste 

Windows("TrialFile").Activate不起作用,因为TrialFile包含Workbookfull path 。 您只需要使用WindowsWorkbook 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方法,但是我认为你需要让用户首先看到目标范围,这样就不会有帮助。