我正在尝试将Word文档另存为PDF,但我收到错误框
“运行时错误”-214747259(80004005) 这不是有效的文件名。“
这是我的代码:
Option Explicit
Private Sub cmdSave_Click()
Dim equipName As String, equipError As String, fileDate As String, pdfName As String, filePath As String
filePath = "C:\"
equipName = Replace(Left(ActiveDocument.Tables(1).Cell(1, 2).Range.Text, _
Len(ActiveDocument.Tables(1).Cell(1, 2).Range.Text) - 1), "/", "-")
equipError = Left(ActiveDocument.Tables(1).Cell(2, 2).Range.Text, Len(ActiveDocument.Tables(1).Cell(2, 2).Range.Text) - 1)
fileDate = Replace(Date, "/", "")
pdfName = equipName & "_" & equipError & "_" & fileDate
ActiveDocument.ExportAsFixedFormat OutputFileName:=filePath & pdfName & ".pdf", _
ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
BitmapMissingFonts:=True, UseISO19005_1:=False
End Sub
将文件保存为PDF的代码是我从录制的SaveAs-ing录制的宏中获取的代码。实际的文件路径要长得多,但为了简单起见,我把它作为“C:\”(它也不起作用)。
答案 0 :(得分:3)
Cell1,2和2,2中ActiveDocument中的文本可能包含特殊字符。如果你没有看到任何窗口保留字符,如\ /:*? “<> |那么你可能有一个奇怪的隐藏或白色字符。
如果DATE有:在其中,那么它将不会保存。您必须删除所有保留的字符,因为Windows文件名不能包含以下任何字符: \ /:*? “<> |
答案 1 :(得分:3)
这将删除不需要的字符:
Function CleanFilename(CurrentFilename As String) As String
Dim MyArray()
Dim x As Integer
MyArray = Array("<", ">", "|", "/", "*", "\", "?", """", ":")
For x = LBound(MyArray) To UBound(MyArray)
CurrentFilename = Replace(CurrentFilename, MyArray(x), "_", 1)
Next x
CleanFilename = CurrentFilename
End Function
我不建议在完全限定的路径名上运行它,但在pdfName
上,否则C:\test.pdf
将成为C__test.pdf
答案 2 :(得分:2)
好吧,我主要是想出了这个问题。我不知道为什么/在哪里这样做,但它正在添加一个“下一行”&#39;人物(Chr(13))。所以,在告诉它保存文件之前,我插入了一行:
pdfName = Replace(pdfName, Chr(13),"")
现在它正在保存,没有任何问题。我的同事正在帮助我解决这个问题,他发现如果你采取了这个问题:
pdfNameLen = Len(pdfName)
它返回的长度比计算可见字符的数量多2(因为2个单元格条目)。他用过:
Left(*cell text*, Len(*cell text*) - 2)
用于收集两个单元格值的位置,其中唯一的区别在于最后(-2而不是-1,以消除单元格格式和Char(13))。在同一时间我们说&#34;得到了它!&#34;。
谢谢,所有人,帮助!最终代码:
Option Explicit
Private Sub cmdSave_Click()
Dim equipName As String, equipError As String, fileDate As String, pdfName As String, filePath As String, pdfLen As Integer
filePath = "C:\"
equipName = Replace(Left(ActiveDocument.Tables(1).Cell(1, 2).Range.Text, _
Len(ActiveDocument.Tables(1).Cell(1, 2).Range.Text) - 1), "/", "-")
equipError = Left(ActiveDocument.Tables(1).Cell(2, 2).Range.Text, Len(ActiveDocument.Tables(1).Cell(2, 2).Range.Text) - 1)
fileDate = Replace(Date, "/", "")
pdfName = equipName & "_" & equipError & "_" & fileDate
pdfName = Replace(pdfName, Chr(13), "")
ActiveDocument.ExportAsFixedFormat OutputFileName:=filePath & pdfName, _
ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
BitmapMissingFonts:=True, UseISO19005_1:=False
End Sub