ファイルの閉じるコマンドについて教えてください。

現在自動でPDFファイルを作成し、そのファイルを、メールソフトに添付して送信する
プログラムをVBで作成しています。

一連の流れは出来たのですが、メールの送り先で添付されたPDFファイルを開くと
"この文書を開く時にエラーが発生しました。ファイルを修復できません"

というエラーメッセージがでて、ファイルを見ることが出来ません。

メールに添付しないでPDFファイルを作成する処理だけを実行させ、ファイルを開くと
ちゃんと開きます。

また、あらかじめ作成されたPDFファイルをメールソフトに添付し、送り先でファイルを
開いてもエラーは表示はありません。

すなわち、この2つの処理をつなげると不具合が生じるのです。

例えば、プログラム実行直後に、作成されたファイルを開こうとすると
共有違反となってしまいます。

メールにPDFファイルを取り込む時にそのような理由で不具合が生じるので
はないかと思っています。

したがって、作成したファイルを閉じる(あるいは名前をつけて保存)コマンド
を教えてもらえないでしょうか?宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

PDFファイルが完全に出来上がる前にメール添付を


始めているとか
印刷ジョブが終了するまで待ってみては?
    • good
    • 0

自動でメールソフトに添付というのは、どうやっているのですか?


その部分に問題があるのかもしれませんよ。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QPDFファイルを開き、印刷し、閉じるマクロ

Excel 2003 VBAにて、
PDFファイルを開き、印刷し、閉じるマクロを作りたいと思っています。

Dim AA, AAA

AA = "C:\Program Files\Adobe\Reader 11.0\Reader\AcroRd32.exe C:\Scan\20131101160734050_001.pdf"
AAA = Shell(AA, vbNormalFocus)

にて、PDFファイルを開くことは出来ました。
このPDFファイルを、「印刷し、閉じる」ためには、
このPDFファイルを指定する必要があると思いますが、
その構文が判りません。
知っている方、教えて下さい。

Aベストアンサー

#3です。
WShell.Execを使うと閉じる事ができる様ですが、色々と気難しくて苦労しました。
まず、なぜかAdobe Reader/Acrobatのフルパスを与えないと、ファイルがみつからないとゴネます。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub test()
printPdf2 GetDesktopPath & "\test.pdf", "DocuWorks Printer", "DocuWorks Printer Driver"
' printPdf2 GetDesktopPath & "\test.pdf"
End Sub

Sub printPdf2(pdfDocument As String, Optional printerName As Variant, Optional printerDriver As Variant)
Dim cmdLine As String
Dim WShell As Object
Dim oExec As Object
'ここは調整の必要がありそう
Const waitTime As Long = 1000
'Windows7 Home 64bitの場合です
Const pgmFullPath As String = "C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe"

Set WShell = CreateObject("WScript.Shell")
If IsMissing(printerName) Or IsMissing(printerDriver) Then
cmdLine = "pgmFullPath /n /s /o /h /t ""pdfFullPath"""
cmdLine = Replace(cmdLine, "pgmFullPath", pgmFullPath)
cmdLine = Replace(cmdLine, "pdfFullPath", pdfDocument)
Else
cmdLine = "pgmFullPath /n /s /o /h /t ""pdfFullPath"" ""printerName"" ""printerDriver"""
cmdLine = Replace(cmdLine, "pgmFullPath", pgmFullPath)
cmdLine = Replace(cmdLine, "pdfFullPath", pdfDocument)
cmdLine = Replace(cmdLine, "printerName", printerName)
cmdLine = Replace(cmdLine, "printeDriver", printerDriver)
End If
Debug.Print cmdLine
Set oExec = WShell.exec(cmdLine)
Sleep waitTime
'Windows7Home/64bit環境ではここで実行時エラーが出るので無理矢理先に進めていますが
'Adobe Readerは閉じられる様です
On Error Resume Next
oExec.Terminate
Set WShell = Nothing
End Sub

Private Function GetDesktopPath() As String
Dim wScriptHost As Object, strInitDir As String
Set wScriptHost = CreateObject("Wscript.Shell")
GetDesktopPath = wScriptHost.SpecialFolders("Desktop")
Set wScriptHost = Nothing
End Function

Terminateで原因不明のエラーが出るのでWebを漁っいて下記をみつけました。64bit環境でエラーが出るのはこれも関係しているのでしょうか?少々無理をしている様なので、ご使用時はご注意下さい。
Terminate メソッドは最後の手段としてのみ使用します。これは、アプリケーションによっては適切にクリーンアップできない場合があるためです。通常は、プロセスを途中で中断せず、プロセス自身で実行を終了させるようにします。Terminate メソッドは WM_CLOSE メッセージを使ってプロセスを終了しようとします。これで終了できない場合は、通常のシャットダウン手順を実行せずに、プロセスを強制終了します。
http://msdn.microsoft.com/ja-jp/library/cc364387.aspx

#3です。
WShell.Execを使うと閉じる事ができる様ですが、色々と気難しくて苦労しました。
まず、なぜかAdobe Reader/Acrobatのフルパスを与えないと、ファイルがみつからないとゴネます。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub test()
printPdf2 GetDesktopPath & "\test.pdf", "DocuWorks Printer", "DocuWorks Printer Driver"
' printPdf2 GetDesktopPath & "\test.pdf"
End Sub

Sub printPdf2(pdfDocument As String, Optional printerName As Variant, Optional prin...続きを読む

Qファイルサイズを指定してファイルを作成したいのですが…(fsutilコマンド?)

はじめまして。
VB.NET 2003で、ファイルサイズを指定してファイルを作成したいのですが、実現に四苦八苦しております。

現在、コマンドプロンプトのfsutil file createnewコマンドをVBからshell関数で呼び出すことで実現はできたのですが、
(1)Windows XP以上のOSにしかfsutilコマンドが対応していない。
⇒2000などで実現する方法を教えていただけないでしょうか?(fsutil.exeを2000にコピーする以外でお願いします。)
(2)fsutilコマンドでデスクトップ上のフォルダにファイルが作成できない。
⇒Dドライブには作成できるため、フォルダパスの権限の問題だと思うのですが、回避する方法が思いうかびません。
(デスクトップ上のフォルダは現行ログインユーザのDocument and Settings上のデスクトップなので、フォルダの権限を見ると書き込み可能になっているのですが、fsutilが独自の権限で動作しているもしくは、個人フォルダは他から参照できない設定にしていることが原因でしょうか?)

ご回答いただけると助かります。
よろしくお願いいたします。

はじめまして。
VB.NET 2003で、ファイルサイズを指定してファイルを作成したいのですが、実現に四苦八苦しております。

現在、コマンドプロンプトのfsutil file createnewコマンドをVBからshell関数で呼び出すことで実現はできたのですが、
(1)Windows XP以上のOSにしかfsutilコマンドが対応していない。
⇒2000などで実現する方法を教えていただけないでしょうか?(fsutil.exeを2000にコピーする以外でお願いします。)
(2)fsutilコマンドでデスクトップ上のフォルダにファイルが作成できない。
⇒Dドライ...続きを読む

Aベストアンサー

FileStreamとBinaryWriterでってことではダメでしょうか?

Dim fs as new FileStream( "ファイルパス", IO.FileMode.CreateNew Or IO.FileMode.Truncate)
Dim bw As New IO.BinaryWriter(fs)
Dim arByte() As Byte
' 10,000個の要素準備
ReDim arByte(9999)
bw.Write(arByte)
bw.Close()
fs.Close()
といった具合です

上書きされるのを防止するなら
先頭で
dim fsinfo = new IO.FileInfo("ファイルパス")
if fsinfo.Exists = false then Return
などの処理を追加しましょう

QPDFファイルを開かずに印刷したい

幾つものPDFファイルを印刷したいのですが、
できればAdobeReaderを起動させずに印刷したいです。

ファイルのアイコン上で右クリック→印刷でも可能ですが、
数が多くなると、この作業も大変です。
そこでVisualBasic2008ExpressEditionを使って、
簡単なシステムを作りたいと考えています。

しかし、PDFを開かずに印刷する方法が、どうしてもわかりません。
ネット検索、教えてgoo内の検索でもヒットせず途方に暮れています。
参考になるホームページや書籍がありましたら教えてください。
「こんな手法があるよ」というものでも構いません。

宜しくお願いします。

Aベストアンサー

PDFを開く際にACRORD32.exeに対して以下のコマンドラインを指定してください。

ACRORD32.EXE /s /l /p /h [PDFのパス]

コマンドラインの解説は参照URLを。

参考URL:http://scripting.cocolog-nifty.com/blog/2007/07/adobe_reader_81_e41e.html

QPDFファイルの作成

カタログを作成するのにPDFで納品することになりました。1000ページを軽く超えてしまいます。印刷屋の都合で16ページごとにファイルを区切ってほしいといわれました。今PrimoPDFというフリーソフトを用いています。プリンタ出力のプログラムにしています。極力プログラムの変更なしで、カタログ1-16.pdfのようにファイル名をプログラムから指定できるようなソフトはないでしょうか。ほかにも何かよい方法があればお願いします。当初PostScriptだったんですが、さすがに手に負えないのでPDFにしていただきました。

Aベストアンサー

PrimoPDFは使ったことがないのでわからないのですが、Acrobatのように、「出力先の確認をしない」という項目がえらべるようになっていれば、ドキュメント名を「カタログ1-16」のようにしておいて、ページ区切りごとにendDocすれば良さそうにおもえますね。

お役にたてず、すみません。

QVBとAdobe Acrobat SDKを使用してPDFファイルを作成したい

VBとAdobe Acrobat SDKを使用してPDFファイルを作成
したいと考えています.
SDKとVBの連携についての情報が見つからないため,
試行錯誤でプログラム作業をおこなっています.
VBとAdobe Acrobat SDKを使用したサンプルが掲載されているサイトまたは書籍はないのでしょうか?

OS:Windows2000+SP4
Visual Basic 6.0+SP6
Adobe Acrobat 5 +SDK

Aベストアンサー

サンプルはgoogleで探せばよいでしょう。
planetpdfが情報多いです。

参考URL:http://www.google.co.jp/search?q=CreateObject+AcroExch.APP


人気Q&Aランキング

おすすめ情報