【问题标题】:Run-time error'1004': Method 'Open' of object 'Workbooks' failed运行时错误“1004”:对象“工作簿”的方法“打开”失败
【发布时间】:2016-07-01 17:37:10
【问题描述】:

使用 Microsoft Excel 2010; Visual Basic for Applications (VBA)

试图编写一个程序来打开一个工作簿并将电子表格从一个工作簿复制到活动工作簿中。

运行时错误“1004”:对象“工作簿”的“打开”方法失败

下面是我正在使用的代码:

'Declares variables
Dim ToBook As Workbook
Dim FromBook As String
Dim FromSheet As Worksheet
Dim diaTitle As String
Dim FilterName As String
'-----------------------------------------------------------------------------------------------
Set ToBook = ActiveWorkbook
diaTitle = "Select Systems List"
FromBook = Application.GetOpenFilename( _
    FileFilter:=FilterName, _
    FilterIndex:=2, _
    Title:=diaTitle)
If FromBook = "False" Then
    Exit Sub
End If
Workbooks.Open _
    Filename:=FromBook, _
    UpdateLinks:=xlUpdateLinksNever, _
    ReadOnly:=False, _
    Format:=5, _
    Password:="", _
    WriteResPassword:="", _
    IgnoreReadOnlyRecommended:="", _
    Origin:="", _
    Delimiter:="", _
    Editable:="", _
    Notify:="", _
    Converter:="", _
    AddToMru:="", _
    Local:="", _
    CorruptLoad:=xlNormalLoad
Set FromSheet = Workbooks(FromBook).Worksheets("Sheet1")
'-----------------------------------------------------------------------------------------------
FromSheet.Copy _
    After:=ToBook.Worksheets(6)
Workbooks(FromBook).Close _
    SaveChanges:=False, _
    Filename:=FromBook, _
    RouteWorkbook:=""

【问题讨论】:

  • 错误出现在哪一行?
  • Workbooks.Open 行发生错误
  • 开行的FromBook是什么?

标签: vba excel excel-2010


【解决方案1】:

User3598756 是对的,你需要使用Variant 类型。我还简化了您的代码并在if statement 中打开并设置了工作簿,并为用户添加了msgbox

'Declares variables
Dim ToBook As Workbook: Set ToBook = ActiveWorkbook
Dim FromSheet As Worksheet
Dim FromWB As Workbook

Dim FromBook As Variant
Dim diaTitle As String
Dim FilterName As String

'-----------------------------------------------------------------------------------------------
diaTitle = "Select Systems List"

FromBook = Application.GetOpenFilename( _
    FileFilter:=FilterName, _
    FilterIndex:=2, _
    Title:=diaTitle)

If FromBook = "False" Then
    MsgBox "You did not open any file so the macro could not proceed"
    Exit Sub
Else
    Set FromWB = Workbooks.Open(FromBook, xlUpdateLinksNever, False, 5, , , , , , , , , , , xlNormalLoad)
    Set FromSheet = FromWB.Worksheets("Sheet1")
End If

'-----------------------------------------------------------------------------------------------
FromSheet.Copy _
    After:=ToBook.Worksheets(6)

FromWB.Close savechanges:=False

【讨论】:

    【解决方案2】:

    试试下面的代码,我修改了你的 Open 行,因为你并没有使用大部分参数...

    Dim FromBook As String
    Dim FromSheet As Excel.Worksheet
    Dim diaTitle As String
    Dim FilterName As String
    '-----------------------------------------------------------------------------------------------
    Set ToBook = ActiveWorkbook
    diaTitle = "Select Systems List"
    FromBook = Application.GetOpenFilename(FileFilter:=FilterName, _
        FilterIndex:=2, _
        Title:=diaTitle)
    
    If FromBook = "False" Then
        Exit Sub
    End If
    ' minimized your open file parameters, since you are puting blanks anyway
    Workbooks.Open FromBook, xlUpdateLinksNever, False, 5
    
    Set FromSheet = ActiveWorkbook.Worksheets("Sheet1")
    

    【讨论】:

      【解决方案3】:

      如下尝试

      • 对返回的结果使用Variant 类型:

        Dim FromBook As Variant
        
      • 使用布尔值将返回的结果与:

        If FromBook = False Then Exit Sub
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-15
        • 2015-11-04
        • 2019-01-05
        相关资源
        最近更新 更多