Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4281 / 13644 ツリー ←次へ | 前へ→

【57502】PDFファイルの閉じ方 たつ 08/8/28(木) 11:05 質問[未読]
【57503】Re:PDFファイルの閉じ方 ハチ 08/8/28(木) 11:19 発言[未読]
【57515】Re:PDFファイルの閉じ方 たつ 08/8/28(木) 16:20 質問[未読]
【57516】Re:PDFファイルの閉じ方 ハチ 08/8/28(木) 17:16 発言[未読]
【57528】Re:PDFファイルの閉じ方 たつ 08/8/29(金) 8:41 お礼[未読]
【57520】Re:PDFファイルの閉じ方 neptune 08/8/28(木) 22:03 回答[未読]

【57502】PDFファイルの閉じ方
質問  たつ  - 08/8/28(木) 11:05 -

引用なし
パスワード
   はじめまして・・・

VBA初心者です。

”PDFファイル”(変数)と" EXCELファイル "(変数) を開いて、必要な入力等が終わったら、VBAで処理して閉じたいのですが、
EXCELファイルは、そのままCloseで閉じることができますが、PDFはどうしたら、閉じることができるのでしょうか?

教えていただけないでしょうか?

いろいろ試してみたんですが、どうしてもうまくいきません

よろしくお願いします

【57503】Re:PDFファイルの閉じ方
発言  ハチ  - 08/8/28(木) 11:19 -

引用なし
パスワード
   ▼たつ さん:
>”PDFファイル”(変数)と" EXCELファイル "(変数) を開いて、必要な入力等が終わったら、VBAで処理して閉じたいのですが、
>EXCELファイルは、そのままCloseで閉じることができますが、PDFはどうしたら、閉じることができるのでしょうか?

まず、どうやって開いているのですか?
閉じ方は、開き方によって変わってくると思いますよ。

【57515】Re:PDFファイルの閉じ方
質問  たつ  - 08/8/28(木) 16:20 -

引用なし
パスワード
   ▼ハチ さん:

>まず、どうやって開いているのですか?
>閉じ方は、開き方によって変わってくると思いますよ。

すみません・・・
説明不足で・・・

Private Sub worksheet_change(Byval C as Range)
Dim 番号 As String
Dim PDFFile As String
Dim エクセルFile As String
Dim File As Variant

番号=Worksheets("sheet1").range("C65536").End(xlup).Offset(0,5)

If Not Intersect(C,Range(C3:C65536")) Is Nothing Then

PDFFile="保存ファイル場所"\" & 番号 & ".pdf"
エクセルFile="保存ファイル場所"|" & 番号 & ".xls"

If Dir(PDFFile)<>"" Then

File=Shell("C:\Program Files\Adobe\Acrobat 7.0\Acrobat.exe " & PDFFile)
Workbooks.Open エクセルFile

End If
End If

End Sub

↑上記のようなコードを書いてファイルを呼び出しています。
開いたエクセルをデータ更新したら、
VBAでエクセルの集計を行い、そのままエクセルもPDFも自動で閉じて終了!
という形にしたいのですが・・・

どうしたらよいのでしょうか?

【57516】Re:PDFファイルの閉じ方
発言  ハチ  - 08/8/28(木) 17:16 -

引用なし
パスワード
   ▼たつ さん:

>File=Shell("C:\Program Files\Adobe\Acrobat 7.0\Acrobat.exe " & PDFFile)

このやり方で開くのなら、変数Fileに格納されるのは、
プロセスID(タスクIDかも)ですよね?

アプリケーションをアクティブにして、
Alt+F4 を送り込めば、閉じないですかね?

AppActivate (File)
SendKeys "%{F4}"

試してないので、動かなかったらゴメンナサイ。
あと所詮はSendKeysで送り込むだけですから、
100%の精度で閉じるというのは出来ないと思います。

【57520】Re:PDFファイルの閉じ方
回答  neptune  - 08/8/28(木) 22:03 -

引用なし
パスワード
   ▼たつ さん:
こんにちは

横から失礼

Windows APIを使えば出来ますが、保障はしません。
(WindowsプログラムはWM_CLOSEで終了の為の色んな処理を行う作りが多いと
思うのでたぶん問題はないとは思いますが、念の為)
一応Acrobatreaderでは動きました。

ちなみに他にも方法はありますが、いずれにせよAPIでWindowハンドルを
取得してWM_CLOSEを送るのが比較的安全と思います。

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
            (ByVal lpClassName As String, _
            ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _
            (ByVal hWnd As Long, ByVal MSG As Long, _
            ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const WM_CLOSE = &H10

Sub t()
Dim hWnd As Long
Const sClassName As String = "AdobeAcrobat"     ''アクロバット(多分持ってないので検証できない)
Const sReaderClassName As String = "AcrobatSDIWindow"  'アクロバットリーダー8
  hWnd = FindWindow(sReaderClassName, vbNullString)
  SendMessage hWnd, WM_CLOSE, 0&, 0&
End Sub

もし何がなんだか全く判らないのなら使用をお勧めしません。

【57528】Re:PDFファイルの閉じ方
お礼  たつ  - 08/8/29(金) 8:41 -

引用なし
パスワード
   ハチさん、neptune さん

アドバイスありがとうございます。
ハチさんのアドバイス通りやってみましたが、うまくいきませんでした。
neputune さんのアドバイスは私には高度すぎて、コードの意味を理解するのに一苦労かかりそうです。
でも、一度、試してみます。

アドバイスありがとうございました

4281 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free