激活新打开的工作簿时出现错误91

问题描述 投票:0回答:1

我遇到了这个错误:

运行时错误 91 对象变量或 With 块变量未设置

当我尝试激活由 Set 语句打开的工作簿时。

代码可以正常打开指定的工作簿,但是当它达到我尝试激活或选择或编辑工作簿的程度时,就会出现错误。正在打开的文件之一是 csv,另一个是 xlsx,无论哪种方式,工作簿都不会激活并发送错误。我是否需要再次定义该变量?如果需要,如何定义?该名称是动态的,并且除了文件类型之外,打开的两个文件的名称相同。

Dim i As Integer
        For i = 2 To .Range.Rows.Count
            ' Retrieve current row's values
            active = Trim(.Range(i, 2).Value2)
            reportName = Trim(.Range(i, 3).Value2)
            
            If active Then
            Dim wbSource As Workbook
            Dim wbDest As Workbook
            Set wbSource = OpenwbSource(reportName)
            Set wbDest = OpenwbDest(reportName)
            
            wbSource.Activate  ' (Error 91)
            wbDest.Activate ' (Error 91) (whichever is first causes the error)
            ' The code continues... from here I would copy data from csv to xlsx file and edit...

            End If
            Next i
        End With
End Sub

Public Function OpenwbSource(reportName As String) As Workbook

    Dim wbSource As Workbook
    Set wbSource = Workbooks.Open(PathSource & reportName & ".csv")

    Exit Function

End Function

Public Function OpenwbDest(reportName As String) As Workbook
    
    
    Dim wbDest As Workbook
    Set wbDest = Workbooks.Open(ThisWorkbook.Path & "\Templates\" & reportName & ".xlsx")
    
    
    Exit Function

End Function

我尝试过使用另一个 With 语句。我尝试过重新定义工作簿。

excel vba runtime-error
1个回答
0
投票

仅关注您提出的直接问题,正如其他人指出的那样,问题是

OpenwbSource()
不返回工作簿。这是因为您将值
Set
放入变量
wbSource
中,但随后未使用该值(与
OpenwbDest()
同样的问题)。因此,该函数将返回
Nothing

请注意,

wbSource
中的
OpenwbSource()
是在本地声明的(即在函数内),因此,与您提供的代码中第一个过程中声明的
wbSource
完全分开(缺少其声明)即它与 Sub 或 Function 的行)。

要从函数返回非

Nothing
值,您必须为函数分配一个值...对于两个函数:

Public Function OpenwbSource(reportName As String) As Workbook
    Set OpenwbSource = Workbooks.Open(PathSource & reportName & ".csv")
End Function

Public Function OpenwbDest(reportName As String) As Workbook
    Set OpenwbDest = Workbooks.Open(ThisWorkbook.Path & "\Templates\" & reportName & ".xlsx")
End Function

要了解有关函数的更多信息,请参阅函数语句。有关如何从它们返回值,请参阅以“要从函数返回值,请将值分配给函数名称...”开头的部分。

我认为您的代码可能存在其他问题...如果您遇到其他问题,请提出单独的问题。

© www.soinside.com 2019 - 2024. All rights reserved.