2016-09-19 13 views
3

ExcelシートをPDFとして保存し、エグゼクティブチームに電子メールを送信するマクロを正常に実行しています。エラーランタイムエラー '1004'文書が保存されません。

私は新しいシートを作成してそれを再設計し、それに応じてコードを更新しました。

Sub NewDashboardPDF() 

' New Executive Daily Dashboard Macro 
' 
' Create and email the Executive TEAM the Daily Dashboard. 
    Dim strPath As String, strFName As String 
    Dim OutApp As Object, OutMail As Object 

' Create and email the Daily Report to Mitch/Dave/John/Jason ALL PAGES. 
    Sheets("Executive Dashboard").Select 
    strPath = Environ$("temp") & "\" 'Or any other path, but include trailing "\" 
    strFName = Worksheets("Executive Dashboard").Range("V2").Value & " " & Format(Date, "yyyymmdd") & ".pdf" 

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ 
     strPath & strFName, Quality:=xlQualityStandard, _ 
     IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False 

    'Set up outlook 
    Set OutApp = CreateObject("Outlook.Application") 
    Set OutMail = OutApp.CreateItem(0) 
    'Create message 
    On Error Resume Next 
    With OutMail 
     .to = [email protected] 
     .CC = "[email protected]" 
     .BCC = "" 
     .Subject = "Daily Dashboard" 
     .Body = "All, " & vbNewLine & vbNewLine & _ 
         "Please see the attached daily dashboard." & vbNewLine & _ 
         "If you have any questions or concerns, please do not hesitate to contact me." & vbNewLine & _ 
         "Steve" 
     .Attachments.Add strPath & strFName 
     .Display 
     .Send 
    End With 
    'Delete any temp files created 
    Kill strPath & strFName 
    On Error GoTo 0 

End Sub 

エラーメッセージは「実行時エラー '1004」ドキュメントが保存されていません。ドキュメントが開いているか、エラーが発生している可能性があります。

デバッグすると、次のセクションが最後の行の矢印で強調表示されます。

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ 
strPath & strFName, Quality:=xlQualityStandard, _ 
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False 

古いシートへのすべての参照が新しいものに更新されたので、それは問題ではないと思います。

別の言い方をすれば、私はデフォルトの電子メール署名を含めてこのメールを作成する方法を知りたいと思います。現在のところ、それはプレーンテキストの電子メールとしてフォーマットされています。

+0

Excelのオフィスを変更しても、コードに何も問題はありません。 – 0m3r

+0

'strPath'と' strFName'の値は、クラッシュ時にどのようになっていましたか?あなたが期待していたものでしたか? – YowE3K

+0

非常に基本的なソースコードコントロールでさえ助けになる状況です。あなたのコードがどのようなものだったのか記録していて、それがうまくいかないときは、推測よりも何が違うのかを正確に見ることができます。マシンにsccを持っていない場合は、github onlineまたはgistを使用して変更の差分を与えることができます。 –

答えて

1

あなたのコードに間違いはありませんが、どのExcel Officeを使用していますか?

Document not savedエラーメッセージがそれはおそらくので、PDFファイルが書き込み可能ではないことを手がかりとなる& "<br>" &

3

を試してみてください。また代わりにvbNewLineを使用するデフォルトの署名がこの

Dim Signature As String 

    With OutMail 
     .Display 
    End With 

    Signature = OutMail.HTMLBody 

    'Create message 
    On Error Resume Next 
    With OutMail 
     .To = "[email protected]" 
     .CC = "[email protected]" 
     .BCC = "" 
     .Subject = "Daily Dashboard" 
     .HTMLBody = "All, " & vbNewLine & vbNewLine & _ 
         "Please see the attached daily dashboard." & vbNewLine & _ 
         "If you have any questions or concerns, please do not hesitate to contact me." & vbNewLine & _ 
         "Steve" & vbNewLine & Signature 
     .Attachments.Add strPath & strFName 
     .Display 
'  .Send 
    End With 

を試す追加しますPDFリーダーで開きます。 VBAから文書を保存しようとしているときにPDF文書を開いていれば、エラーを繰り返すことができます。

文書を開いていないと、Windowsが誤ってファイルをロックしてしまう可能性があります。ロックを解除するには、PCを再起動する必要があります。

ファイルがまだ存在しない場合は、実際にディレクトリの場所にファイルを作成できることを確認する必要があります。

V2の値は、このような\/:*?"<>または|として最終的にファイル名が無効に文字が含まれている場合は、同様のエラーが発生します。

+0

ThunderFrame - あなたはそれを得た、私は間違ってV1を選択する必要があった日付を持ってV2を選択していた。 /は犯人だった。みなさん、お世話になりました。 – Steve

+1

聞いてよかったです - 回答としてマークするのを忘れないでください。 – ThunderFrame

関連する問題