【问题标题】:Open html file with Workbooks.Open allways in new workbook使用 Workbooks 打开 html 文件。始终在新工作簿中打开
【发布时间】:2017-02-03 14:21:40
【问题描述】:

我使用 Workbooks.Open 方法在 excel 中打开本地 html 文件。此方法在新工作簿中打开文件,因此我将 UsedRange 复制到当前工作簿的 ActiveSheet 中。一切正常,除非我第一次打开 Excel,不要修改其中的任何单元格并按下按钮(在我的自定义加载项 (xlam) 中)打开此 html 文件。在这种情况下,文件会在当前工作表中打开。如何实现始终在其他工作簿或其他工作表中打开此外部文件?这是我的代码示例:

Dim tempWorkbook As Workbook
Set tempWorkbook = Workbooks.Open("file:///C:/report.html")

此代码仅在当前活动工作表被修改时才在另一个工作簿中打开 html 文件,但如果用户之前没有修改过,则在当前工作簿中打开。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    编辑 现在这会将设置恢复为原始值。

    您可以告诉 Excel 当前工作簿未保存 - 强制它在打开 HTML 文件时将其保留在原位。下面的示例在执行此操作之前检查它是否称为 Book1:

    Dim savedsetting As Boolean
    Dim tempWorkbook As Workbook
    Dim curWorkbook As Workbook
    
    Set curWorkbook = ActiveWorkbook
    savedsetting = curWorkbook.Saved
    
    If curWorkbook.Name = "Book1" Then curWorkbook.Saved = False
    Set tempWorkbook = Workbooks.Open("file:///C:/report.html")
    if curWorkbook.Saved <> savedsetting then curWorkbook.Saved = savedsetting
    

    【讨论】:

    • 然后总是提示用户保存原始工作簿。
    • 好点@Eugene - 我已经修改了代码以立即将其放回原处。
    【解决方案2】:

    你可以使用

    Dim sFile$
    Dim tempWorkbook As Workbook
    
    sFile = "file:///C:/report.html"
    Set tempWorkbook = Application.Workbooks.Add(Template:=sFile)
    

    然后工作簿将作为模板打开,但仍保留原始名称。原始文件不会被锁定并且可以移动。 最好在下一步用新名称保存它。

    如果它不适用于 html(我用 xlsx 测试过),那么您可以执行以下操作:

    Dim sFile$
    Dim tempWorkbook As Workbook
    
    sFile = "file:///C:/report.html"
    Set tempWorkbook = Application.Workbooks.Add
    tempWorkbook.Activate 'Activates new workbook
    Set tempWorkbook = Application.Workbooks.Open(sFile) 'opens a file
    

    如果新工作簿在打开 html 后仍为空白,则设置一个单独的变量 - 你会想要关闭它。

    【讨论】:

      【解决方案3】:

      您是否尝试过 Workbooks.Add 方法? 如果我将它实现到我的自定义栏并使用不同的测试文件,它就可以工作。

      Sub
         Dim tempWorkbook As Workbook
         Set tempWorkbook = Workbooks.Add("file:///C:/report.html")
      End
      

      【讨论】:

      • 我也试过了。没有为我工作。原来的“Book1”仍然关闭。
      【解决方案4】:

      我接受了@CLR 的回答,但实际上这个实现有一个缺点。如果用户最初打开 excel,他/她有名为“Book1”的空工作簿。如果他/她创建另一个空工作簿“Book2”并尝试打开 html 文件,则当它在工作簿“Book1”上打开时,而不是在新工作簿上打开。所以我修改了这样的建议代码:

      打开html文件之前:

      For i = 1 To Workbooks.Count
         ReDim Preserve savedSettings(i)
         savedSettings(i - 1) = Workbooks(i).Saved
         Workbooks(i).Saved = False
      Next
      

      打开、复制和关闭 TEMP (html) 工作簿后:

      For i = 1 To Workbooks.Count
          Workbooks(i).Saved = savedSettings(i - 1)
      Next
      
      ActiveWorkbook.Saved = False
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-24
        • 2014-09-12
        • 1970-01-01
        • 2021-01-03
        • 2017-05-26
        • 1970-01-01
        • 2016-12-07
        相关资源
        最近更新 更多