使用Workbook打开html文件。在新工作簿中打开

时间:2017-02-02 12:56:36

标签: excel vba excel-vba

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

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

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

4 个答案:

答案 0 :(得分:0)

您可以使用

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后新工作簿仍为空白时设置一个单独的变量 - 那么你想要关闭它。

答案 1 :(得分:0)

修改 现在,这将设置恢复为原始值。

您可以告诉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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

在打开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