【问题标题】:Excel VBA - Close workbookExcel VBA - 关闭工作簿
【发布时间】:2021-11-29 12:31:41
【问题描述】:

我正在将另一个工作簿中的工作表导入到我当前的工作簿中。完成导入工作表后,我想关闭该其他工作簿。我使用的代码给出了错误运行时错误 9':下标超出范围

Sub ImportWorksheet(MyPath As String, wbName As String)

ControlFile = ActiveWorkbook.Name
Workbooks.Open Filename:=MyPath
Sheets(1).Copy After:=Workbooks(ControlFile).Sheets(1)
ActiveSheet.Name = wbName
Workbooks(MyPath).Close SaveChanges:=False
Windows(ControlFile).Activate

End Sub

我也尝试过使用

Windows(MyPath).Activate
ActiveWorkbook.Close SaveChanges:=False

但我得到了同样的错误。

【问题讨论】:

  • 我猜MyPath 是一个文件路径,当您通过Filename 打开工作簿时它可以正常工作,但是当使用Workbooks().Close 时,您需要列出工作簿的 name,而不是路径。尝试使用Workbooks(Dir(MyPath)).Close SaveChanges:=False

标签: vba excel


【解决方案1】:

由于 Workbooks 对象的 Open 方法返回一个 Workbook 对象,您可以引用打开的工作簿:

Sub ImportWorksheet(MyPath As String, wbName As String)
    ControlFile = ActiveWorkbook.Name
    With Workbooks.Open(Filename:=MyPath)
        .Sheets(1).Copy After:=Workbooks(ControlFile).Sheets(1)
        .Sheets(2).Name = wbName
        .Close SaveChanges:=False 
    End With 
End Sub

【讨论】:

    【解决方案2】:

    我喜欢分配变量,它消除了任何混乱。

    Sub ImportWorksheet(MyPath As String, wbName As String)
    
    
    Dim Owb As Workbook
    Dim Nwb As Workbook
    
    Set Owb = ThisWorkbook
    Set Nwb = Workbooks.Open(Filename:=MyPath)
    
    Nwb.Sheets(1).Copy after:=Owb.Sheets(1)
    Owb.Sheets(2).Name = wbName
    
    Nwb.Close False
    Owb.Activate
    
    End Sub
    

    【讨论】:

      【解决方案3】:
      Workbooks(strTargetFileName).Close SaveChanges:=False
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多