Enr*_*uso 7 excel vba excel-vba
我是编码的新手,我正在尝试执行以下操作;
跟踪工作簿包含从输入工作簿中获取的项目信息.我正在尝试打开输入工作簿复制项目信息表上的所有数据,并将其过去跟踪工作簿的项目信息表.这是我在下面的编码
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
Run Code Online (Sandbox Code Playgroud)
它正在打开文件,但似乎在复制数据之前就停止了.我似乎无法查明错误.我搜索了几个类似问题的线程,但没有任何运气.我的编码有问题吗?
小智 8
代码的问题在第二行.
ActiveSheet("Project Info").Select
Run Code Online (Sandbox Code Playgroud)
这应该是,
ActiveWorkbook.Sheets("Project Info").Select
'alternative
Worksheets("Project Info").Select
Run Code Online (Sandbox Code Playgroud)
正如我的评论中所述,请参阅如何避免在Excel VBA宏中使用Select以获取更多方法,以避免依赖select和activate来实现目标.该ActiveWorkbook属性,Application.ActiveWindow财产,ActiveSheet属性和ActiveCell属性只是referrencing的不可靠的方法.
编写 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.
Run Code Online (Sandbox Code Playgroud)
我还想知道您是否真的想复制工作表的每个单元格,还是只想复制包含实际数据的单元格?
如果您只想要包含实际数据的单元格,您可以使用wsC.UsedRange.Copy wsP.Range("A1") “注释” - 这也可能有问题,但我会让您告诉我是否有问题:)