Vba 对象在打开工作簿时不支持此属性错误

Vba 对象在打开工作簿时不支持此属性错误,vba,excel,Vba,Excel,我有两本作业本。工作簿1是我的目标工作簿(DWB),工作簿2是我的原始工作簿(OWB)。我的OWB在网络文件夹中 我正在尝试将OWB的所有内容复制到DWB 下面是我迄今为止尝试过的代码。但在下面的一行中,我得到了一个错误 对象不支持此属性 设置OWB=Workbooks.Open(文件名:=filepath) 当你遇到这样的问题时,尽量减少代码并隔离问题。因此,在您的情况下,最小问题如下所示: Option Explicit Public Sub TestMe() Dim owb As

我有两本作业本。工作簿1是我的目标工作簿(DWB),工作簿2是我的原始工作簿(OWB)。我的OWB在网络文件夹中

我正在尝试将OWB的所有内容复制到DWB

下面是我迄今为止尝试过的代码。但在下面的一行中,我得到了一个错误

对象不支持此属性

设置OWB=Workbooks.Open(文件名:=filepath)


当你遇到这样的问题时,尽量减少代码并隔离问题。因此,在您的情况下,最小问题如下所示:

Option Explicit

Public Sub TestMe()
    Dim owb As Workbook
    Set owb = Workbooks.Open("C:\Users\Something\Desktop\MyFile.xlsm")
End Sub

试着使这个最小的2班轮工作,那么你的问题将得到解决。这就是。

当您遇到这样的问题时,尽量减少代码并隔离问题。因此,在您的情况下,最小问题如下所示:

Option Explicit

Public Sub TestMe()
    Dim owb As Workbook
    Set owb = Workbooks.Open("C:\Users\Something\Desktop\MyFile.xlsm")
End Sub

试着使这个最小的2班轮工作,那么你的问题将得到解决。这就是错误背后的想法。

错误已被追踪并解决

不过,我相信您可以充分利用对
Range
引用的透彻理解和使用,既确保正确引用了正确的引用,又减少了键入

例如,您可以编写以下代码:

With Workbooks.Open(Filename:=filepath) 'reference wanted workbook
    With .Worksheets(1) 'reference wanted worksheet of referenced workbook
        LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row 
        Lastcol = .Cells(1, .Columns.Count).End(xlToLeft).Column
        For i = 1 To Lastcol
            header = .Cells(1, i).value

            Set cell = DWB.Worksheets("T").Range("A4:Y4").Find(header, LookIn:=xlValues, lookat:=xlWhole)
            If Not cell Is Nothing Then
                .Range(.Cells(2, i), .Cells(LastRow, i)).Copy Destination:=cell.Offset(1)
            Else
                'handle error
            End If
        Next i
    End With
    .Close savechanges:=False
End With

在这里,您还可以看到
Find()
方法的建议最小参数显式设置,否则将使用其上次调用(甚至从UI!)中的设置。

错误已被跟踪并解决

不过,我相信您可以充分利用对
Range
引用的透彻理解和使用,既确保正确引用了正确的引用,又减少了键入

例如,您可以编写以下代码:

With Workbooks.Open(Filename:=filepath) 'reference wanted workbook
    With .Worksheets(1) 'reference wanted worksheet of referenced workbook
        LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row 
        Lastcol = .Cells(1, .Columns.Count).End(xlToLeft).Column
        For i = 1 To Lastcol
            header = .Cells(1, i).value

            Set cell = DWB.Worksheets("T").Range("A4:Y4").Find(header, LookIn:=xlValues, lookat:=xlWhole)
            If Not cell Is Nothing Then
                .Range(.Cells(2, i), .Cells(LastRow, i)).Copy Destination:=cell.Offset(1)
            Else
                'handle error
            End If
        Next i
    End With
    .Close savechanges:=False
End With

您还可以看到
Find()
方法的建议最小参数显式设置,否则将使用上次调用(甚至从UI!)

如果您在错误发生之前写入
MsgBox filepath
,请将所看到的内容准确复制到Windows资源管理器中,然后按Enter键,会发生什么情况?这将出现错误:
header=OWB.Worksheets(1).cell(1,i).Value
按原样
Cells
而不是
cell
@Rory谢谢你,它起作用了:)如果你在错误之前写
MsgBox filepath
,请将你看到的内容准确复制到Windows资源管理器中,然后按Enter键,会发生什么情况?这将出现错误:
header=OWB.Worksheets(1).单元格(1,i).Value
应为
单元格
,而非
单元格
@Rory谢谢你它起作用了:)