2

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:\」として使用しています(これも機能しません)。

4

3 に答える 3

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

于 2012-08-29T20:08:55.473 に答える
3

Cell1,2 および 2,2 の ActiveDocument にあるテキストには、特殊文字が含まれている場合があります。\ / のような Windows の予約文字が表示されない場合: * ? " < > | その後、奇妙な隠し文字または白い文字が表示される場合があります。

また、DATE に : が含まれている場合、保存されません。Windows ファイル名には次の文字を含めることはできないため、予約済みの文字をすべて削除する必要があります: \ / : * ? " < > |

于 2012-08-29T18:44:29.587 に答える
2

さて、私は問題をほとんど理解しました。なぜ/どこでこれを行っているのかわかりませんが、「次の行」の文字 (Chr(13)) を追加しています。そのため、ファイルを保存するように指示する直前に、次の行を挿入しました。

pdfName = Replace(pdfName, Chr(13),"")

今は問題なく保存されています。私の同僚がこの問題について私を助けてくれました。

pdfNameLen = Len(pdfName)

表示される文字を数えた場合よりも 2 長い長さを返します (2 つのセル エントリのため)。彼は使用しました:

Left(*cell text*, Len(*cell text*) - 2)

両方のセル値を収集する場所で、唯一の違いは最後にあります (セルの書式設定と Char(13) を取り除くため、-1 ではなく -2)。同時に私たちは「わかった!」と言いました。

助けてくれてありがとう!最終的なコード:

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
于 2012-08-30T13:28:18.673 に答える