我有一个基本电子表格,需要从许多其他电子表格(试验)中收集数据。 我试图写一个宏来完成以下任务:
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
无法打开我提示的文件窗口。
非常感谢任何帮助!!
答案 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)
快速回答
MyRange
和TrialFile
是变量。
当你引用它们时,你不需要用双引号括起来。