使用命令按钮将Excel工作表发布为HTML文件

时间:2015-10-23 20:18:49

标签: excel vba excel-vba

因此,我的工作簿中有大量数据需要以允许它们与工作簿交互的方式传递给我的用户......但也限制了他们实际可以执行的操作。所以我已经做到这一点,以便他们可以访问某些页面来添加所需的数据,然后我就可以访问菜单页面,以便他们可以运行报告。

我发现这份报告最好是一个html页面。 为此,我尝试了几种不同的方式,另存为...并发布。我喜欢发布版本,但我不能为我的生活得到这个工作。我看到的所有样品看起来都是一样的。以下是有问题的代码行:

ActiveWorkbook.PublishObjects.Add(xlSourceSheet, ActiveWorkbook.Path & ".htm, "Sheet1", "", xlHtmlStatic, "", "Report Title").Publish True

每次我遇到运行时错误' 1004': 方法'发布'对象' PublishObject'

失败了

我在sub中有上面的代码行,我错过了什么?我需要以不同方式设置发布吗?谢谢你的任何想法。

1 个答案:

答案 0 :(得分:0)

我有一个类似的神秘问题,有时它(。发布)有效,有时它不会,当我尝试发布时。

但是,我认为问题可能是,如果它不起作用,首先将相关区域保存为网页,以便它已经存在于服务器上。在该区域至少保存一次之后(手动或者可能使用.SaveAs ..见下文),然后发布可能有效。

以下是我如何使这一工作更加一致的示例,以传达适合我的结构:

wkb=ActiveWorkbook.Name  'save wb for later access
url="http://a.com/b.htm"  'save to Internet
sheetname="c"
Sheets(sheetname).Range("d1:e2").Select 'activating sheet may be necessary
On Error Resume Next  'anticipate error to handle it
'Now comes the publish line the first time... which may work.. or not
ActiveWorkbook.PublishObjects.Add(xlSourceRange,url,sheetname,"d1:e2",xlHtmlStatic,"blah","moreblah").Publish (True)  'may fail to create page on website if page didn't already exist
theerr=Err.Number
On Error GoTo 0  'back to default error handling (none)
If theerr <> 0 Then  'if here perhaps because page nonexistent
    'msgbox "maybe add warning here [FYI]"
    Sheets("dummysheetwithlittleornodata").Copy  'will create workbook
    On Error Resume Next
    ActiveWorkbook.SaveAs url  'may fail to create webpage first time
    ActiveWorkbook.saveAs url  'twice needed for some reason sometimes. [works for me]
    On Error GoTo 0
    'with fresh dummy html page created, now publish should hopefully work.. let's try again
    ActiveWorkbook.Close savechanges:=False  'clean up and avoid popup
    Workbooks(wkb).Activate  'get back to correct wkb
    Sheets(sheetname).Range("d1:e2").Select
    ActiveWorkbook.PublishObjects.Add(xlSourceRange,url,sheetname,"d1:e2",xlHtmlStatic,"blah","moreblah").Publish (True)  'hopefully if failed first time, now it succeeded ! good luck.
End If

上面的代码结构让我解决了我遇到的几个发布问题。到目前为止,所有这些技术已经足够允许我将工作表中的范围保存为网页(到我有写入权限的服务器),而无需手动执行任何操作(如手动保存甚至单击弹出窗口)。祝你好运。

[不同的非显而易见的技术包括在尝试范围发布之前激活范围,使用错误处理方法并预测某些点的失败,2x saveas以补偿仅在使用一个saveas时出现的神秘不一致故障,关闭和获取干净地回到原始工作簿,并使用saveas来“保证”页面以使表单更加一致的形式存在。]