我使用Workbooks.Open方法在excel中打开本地html文件。此方法在新工作簿中打开文件,因此我将UsedRange复制到我当前的工作簿的ActiveSheet中。一切正常,除非我第一次打开Excel,不要修改其中的任何单元格并按下按钮(在我的自定义加载项(xlam)中)打开此html文件。在这种情况下,文件将在当前工作表中打开。如何在其他工作簿或其他工作表中始终打开此外部文件?这是我的代码示例:
Dim tempWorkbook As Workbook
Set tempWorkbook = Workbooks.Open("file:///C:/report.html")
此代码仅在当前活动工作表被修改时才在另一个工作簿中打开html文件,但如果以前未被用户修改,则在当前工作簿中打开。
答案 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