错误 - VBA对象不支持此属性或方法

时间:2015-12-24 17:54:00

标签: excel excel-vba 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

它正在打开文件,但似乎在复制数据之前就停止了。我似乎无法查明错误。我搜索了几个类似问题的线程,但没有任何运气。我的编码有问题吗?

2 个答案:

答案 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 propertyApplication.ActiveWindow propertyActiveSheet propertyActiveCell 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") 注意 - 这也可能有问题,但我会告诉你它是否存在:)