导出为固定格式Excel 2007

时间:2014-01-07 21:31:13

标签: excel vba pdf excel-vba

我被分配了开发整个办公室将使用的Excel文档的任务。用户将单击一个按钮,宏将文件作为PDF导出到共享文件夹。我编写了这段代码并使用excel 2010测试了这段代码。拥有excel 2007的人会收到一条错误消息“运行时错误1004文档未保存。此文档可能已打开,或者在保存时可能遇到错误”。我稍微研究了一下这个问题,发现excel 2007需要一个加载项更新,所以我把它安装在他们的计算机上。我还检查了他们的计算机上是否有adobe,他们确实这样做了。他们仍然有问题,我不知道该怎么做。任何帮助将不胜感激!

这是我的代码

' Define all variables
    Dim strFileName As String
    Dim folder As String
    Dim member As Integer
    Dim member_count As Integer
    Dim member_name As String
    Dim show As Variant
    Dim MyTime As String

'Save as new file
        Worksheets("Input data").Visible = True
        folder = Sheets("Input data").Range("location").Value
        MyTime = Time
        Sheets("Input data").Select
        Range("G2").Value = MyTime
        strFileName = folder & "Material Request - " & Sheets("Input data").Range("name").Value & "_" & Sheets("Input data").Range("date").Value & " " & Sheets("Input data").Range("time").Value & ".pdf"
        Sheets("Material Request").Select
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=strFileName 'OpenAfterPublish:=True`

2 个答案:

答案 0 :(得分:0)

您应该首先更改代码以删除.Select& .ActiveSheet个实例。

Dim oWS as Worksheet
Set oWS = ThisWorkbook.Worksheets("Input data")
'    Worksheets("Input data").Visible = True
    folder = oWS.Range("location").Value
    If Right(folder,1) <> Application.PathSeparator Then folder = folder & Application.PathSeparator
    MyTime = Time
'    Sheets("Input data").Select
    oWS.Range("G2").Value = MyTime
    strFileName = folder & "Material Request - " & oWS.Range("name").Value & "_" & oWS.Range("date").Value & " " & oWS.Range("time").Value & ".pdf"
Debug.Print "strFileName: " & strFileName
    'Sheets("Material Request").Select
    oWS.ExportAsFixedFormat Type:=xlTypePDF, Filename:=strFileName 'OpenAfterPublish:=True`
Set oWS = Nothing

请参阅此MSDN Worksheet.ExportAsFixedFormat Method,您可能需要根据工作表“输入数据”的属性填写更多参数。

我添加了一些检查,并参考立即窗口检查2007年strFileName的值。

答案 1 :(得分:0)

我有一个类似的问题(尝试导出时出现错误1004)。经过一个小时的拔毛,这是我的问题的根源。

我正在传递一个单元格值作为生成文件名的一部分。我是以

的格式做到这一点的
fileName:= ActiveWorkbook.Path & "\" & CStr(Workbooks.Cells(i,j).Value) & ".pdf"

单元格中的文本被格式化为两行(即&#34;顶行文本&#34; +( Alt + K )+& #34;底行文字&#34;)。虽然字符串在Debug.printMsgBox或值预览中看起来很正常,但我认为存在一个隐藏字符,用于对单元格的新行进行编码。我相信这个隐藏的字符会在作为fileName参数的一部分传递时导致错误。我猜测Excel并没有拿起它,但操作系统的文件名系统确实如此。

无论如何,这为我解决了这个问题。