2017-08-02 25 views
0

ご迷惑をおかけして申し訳ありません。私はgoogle(私はいつも "googleは私の友人"と言っています)を試みましたが、私が試したすべてはVBAで私にエラーを与えます。PDFを保存する際に無効な文字を置き換えます。

私は無効な文字を(! "#¤%&/()=?`^*>;:@£${[]}|~\,.'¨'+置き換える機能を追加したいと思います - )、 "_" のファイル名で

これは私の)現在の(と作業マクロです:

Sub Save_to_PDF() 
    Dim v As Variant 
    Dim name, datedd As String 

    ThisWorkbook.Sheets(Array("sheet1")).Select 

    datedd = Date 
    strFilename = Worksheets("sheet1").Range("B2") 
    v = Application.GetSaveAsFilename(strFilename & " document " & datedd & " .pdf", "PDF Files (*.pdf), *.pdf") 

    On Error GoTo openfile 

    If FileExists(v) Then 
     Kill v 
    End If 

    If VarType(v) = vbString Then 
     ThisWorkbook.Sheets("sheet1").Activate 
     ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, filename:=v, _ 
      Quality:=xlQualityStandard, IncludeDocProperties:=True, _ 
      IgnorePrintAreas:=False, From:=1, To:=1, OpenAfterPublish:=True 
    End If 
    Exit Sub 

openfile: 
    MsgBox "You have one file open allready whith that name. Please try again", vbInformation, "Please close file" 
    Exit Sub 
End sub 
+0

私は「End Sub」がいつでも機能しないことに興味があり、おそらくそれはいくつかの問題につながるでしょう。最後の「Exit」を「End」に変更できますか? – Greedo

+0

申し訳ありませんが、私はそれをすべて書き留めたわけではありません。マクロにはendサブがあります。私はテキストを編集しました:)それを指摘してくれてありがとう。 –

+0

無効な文字のリストがありますか?はいの場合は、質問を更新してください。そうでない場合は、そのリストを入手してください。 –

答えて

0

次の関数は、代替と事前に選択された文字を置き換えます:

Function clean_filename(fname As String, replace_with As String) 
    Dim inv_chars As String 
    Dim cpos As Long 
    invchars = "!""#¤%&/()=?`^*>;:@£${[]}|~\,.'¨´+-" 
    For cpos = 1 To Len(invchars) 
     fname = Replace(fname, Mid(invchars, cpos, 1), replace_with) 
    Next 
    clean_filename = fname 
End Function 

。を追加してこれを使用できますあなたがvをキャプチャしたら(文字列として)。

無効な文字リストには./が含まれていますが、どちらもファイル名にとって重要ですので、削除したり、別の方法で処理したりすることを検討してください。

関連する問題