Vba “将Word文档另存为PDF”的问题;这不是有效的文件名";

Vba “将Word文档另存为PDF”的问题;这不是有效的文件名";,vba,ms-word,Vba,Ms Word,我试图将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:\" equip

我试图将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的代码是我从录制为“另存为”的宏中获取的。实际的文件路径要长得多,但为了简单起见,我将其命名为“C:\”(这也不起作用)。

在Cell1,2和2,2中的ActiveDocument中的文本可能有特殊字符。如果没有看到任何windows保留字符,如\/:*?“<>|那么您可能有一个奇怪的隐藏字符或白色字符

此外,如果DATE中有:则不会保存。您必须删除所有保留字符,因为windows文件名不能包含以下任何字符:
\/:*?“<>|

这将去除不需要的字符:

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
函数CleanFilename(CurrentFilename作为字符串)作为字符串
Dim MyArray()
作为整数的Dim x
MyArray=数组(“,“|”,“/”,“*”,“\”,“?”,“:”)
对于x=LBound(MyArray)到UBound(MyArray)
CurrentFilename=Replace(CurrentFilename,MyArray(x),“\u1”)
下一个x
CleanFilename=CurrentFilename
端函数

我不建议在完全限定的路径名上运行它,但是在
pdfName
上,否则
C:\test.pdf
会变成
C\uu test.pdf

好吧,我基本上解决了这个问题。我不知道它为什么/在哪里这样做,但它正在添加一个“下一行”字符(Chr(13))。因此,在告诉它保存文件之前,我插入了一行:

pdfName = Replace(pdfName, Chr(13),"")
现在它省钱没有问题。我的同事正在帮助我解决这个问题,他发现如果你:

pdfNameLen = Len(pdfName)
它返回的长度比计算可见字符的长度多2个(因为有2个单元格条目)。他使用:

Left(*cell text*, Len(*cell text*) - 2)
对于收集两个单元格值的情况,唯一的区别是在最末尾(-2而不是-1),以消除单元格格式和字符(13)。就在同一时间,我们说“明白了!”

谢谢大家的帮助!最终代码:

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

在任何Strig中都没有Windows保留字符(在逐步运行时将鼠标放在变量上时不可见)。如何消除隐藏/白色字符?请尝试对equipname=“yourcellvalue1”和equiperror=“yourcellvalue2”的硬编码值进行比较,然后查看它们是否等于从ActiveDocument.Tables(1)、Cell(1、2)和ActiveDocument.Tables(1)、Cell(2、2)返回的值。如果它们不等于/匹配,那么可能会尝试更多的清理,比如替换回车符、空格和空字符,就像您已经做过的那样?这是有效的文件路径/名称吗?路径不是问题所在;只要我手动输入文件名而不是使用编译后的文件名,使用filePath就可以工作。至于pdfName,我在上面回答了,首先看到了这个问题。请告诉我们变量的结果值
pdfName
,否则我们将进行随机猜测…现在我只是在equipName和equipError的单元格中有随机字母/数字;它们是:equipName=FTIR和equipError=1234abc,因此pdfNamem(如鼠标所示)=“FTIR_1234abc_08302012”根据需要,该命令似乎有一些额外的参数。这是我记录文件保存时得到的结果:
ActiveSheet.ExportAsFixedFormat类型:=xlTypePDF,文件名:=C:\Book1.pdf,质量:=xlQualityStandard,IncludeDocProperties:=True,IgnorePrintAreas:=False,OpenAfterPublish:=False
,看起来像是Excel,而不是Word。也许这两个参数是不同的?我在Word中为保存部分录制了一个宏,您在Excel中录制了吗?我运行了此函数,但它仍然返回相同的错误。谢谢你的建议,但是,我从来没有想过这一点!