我是编码的新手,我正在尝试执行以下操作;
跟踪工作簿包含从输入工作簿中获取的项目信息。我正在尝试打开输入工作簿,复制项目信息表上的所有数据,并将其放在跟踪工作簿的项目信息表中。这是我的编码,如下所示
Sub GetProjectInfo()
Workbooks.Open Filename:="\\ccprd02\workgrp2\AM\SPIM Input.xlsm"
ActiveSheet("Project Info").Select
Cells.Select
Selection.Copy
Windows("SPIM Tracking Sheet.xlsm").Activate
ActiveSheet("Project Info").Select
Cells.Select
Range("A1").Activate
ActiveSheet.Paste
Range("A1").Select
Windows("SPIM Input.xlsm").Activate
ActiveWindow.Close
End Sub
它正在打开文件,但似乎在复制数据之前就停止了。我似乎无法查明错误。我搜索了几个类似问题的线程,但没有任何运气。我的编码有问题吗?
答案 0 :(得分:8)
您的代码存在问题,在第二行。
ActiveSheet("Project Info").Select
这应该是,
ActiveWorkbook.Sheets("Project Info").Select
'alternative
Worksheets("Project Info").Select
正如我的评论中所述,请参阅How to avoid using Select in Excel VBA macros了解更多依靠选择和激活以实现目标的方法。 ActiveWorkbook property,Application.ActiveWindow property,ActiveSheet property和ActiveCell property只是不可靠的推荐方法。
答案 1 :(得分:4)
编写VBA代码时,最好通过使用变量限定所有对象并直接使用对象本身来实现最佳服务。
试试这个:
Dim wbC as Workbook
Dim wbP as Workbook
Dim wsC as Worksheet
Dim wsP as Worksheet
Set wbP = Workbooks("SPIM Tracking Sheet.xlsm")
Set wsP = wbP.Sheets("Project Info")
Set wbC = Workbooks.Open (Filename:="\\ccprd02\workgrp2\AM\SPIM Input.xlsm")
Set wsC = wbC.Sheets("Project Info")
wsC.Cells.Copy wsP.Range("A1")
wbC.Close False 'assuming you want to close the workbook you opened.
我也想知道您是否真的要复制工作表的每个单元格,还是只想复制带有实际数据的单元格?
如果你只想要包含实际数据的单元格,你可以使用wsC.UsedRange.Copy wsP.Range("A1")
注意 - 这也可能有问题,但我会告诉你它是否存在:)