Excel VBA質問箱 IV

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

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


3828 / 13645 ツリー ←次へ | 前へ→

【59860】PDFのウィンドウサイズ変更 KAO 09/1/14(水) 11:55 質問[未読]
【59867】Re:PDFのウィンドウサイズ変更 Yuki 09/1/14(水) 17:24 発言[未読]
【59884】Re:PDFのウィンドウサイズ変更 KAO 09/1/15(木) 14:24 発言[未読]
【59885】Re:PDFのウィンドウサイズ変更 Yuki 09/1/15(木) 15:22 発言[未読]
【59897】Re:PDFのウィンドウサイズ変更 KAO 09/1/16(金) 13:10 お礼[未読]
【59898】Re:PDFのウィンドウサイズ変更 KAO 09/1/16(金) 13:22 質問[未読]
【59899】Re:PDFのウィンドウサイズ変更 Yuki 09/1/16(金) 14:22 発言[未読]
【59932】Re:PDFのウィンドウサイズ変更 KAO 09/1/20(火) 10:54 質問[未読]
【59935】Re:PDFのウィンドウサイズ変更 neptune 09/1/20(火) 11:37 回答[未読]
【59942】Re:PDFのウィンドウサイズ変更 KAO 09/1/20(火) 13:50 質問[未読]
【59943】Re:PDFのウィンドウサイズ変更 KAO 09/1/20(火) 13:51 質問[未読]
【59946】Re:PDFのウィンドウサイズ変更 neptune 09/1/20(火) 17:25 発言[未読]
【59980】Re:PDFのウィンドウサイズ変更 Yuki 09/1/22(木) 11:49 発言[未読]
【59936】Re:PDFのウィンドウサイズ変更 neptune 09/1/20(火) 11:40 発言[未読]

【59860】PDFのウィンドウサイズ変更
質問  KAO  - 09/1/14(水) 11:55 -

引用なし
パスワード
   エクセルのファイルとPDFのファイルを並べてウインドウに表示させたいのですが、うまくいきません。
アドバイスをいただけないでしょうか?

下記のVBAコードが組んであります

Dim strPartsNumber As String  '部品番号
  Dim strfileName As String   'PDFFileの変数
  Dim strfileName2 As String  'ExcelFileの変数
  Dim Name As Variant     'PDFを呼び出す為の変数
’---------------------------------------
’ブック1.のエクセルファイルがあります
’ユーザーフォーム上のテキストボックスの名は”BuhinBox です
’---------------------------------------
strPartsNumber = BuhinBox.Value

strfileName = "C:\PDFフォルダ" & "\" & strPartsNumber & ".pdf"
strfileName2 = "C:\エクセルフォルダ" & "\" & strPartsNumber & ".xls"

If Dir(strfileName2) <> "" Then
 
Name = Shell("C:\Program Files\Adobe\Reader 8.0\Reader\AcroRd32.exe " & strfileName, vbNormalFocus)

Workbooks.Open strfileName2, vbNormalFocus
’---------------------------------------------------------------
’Buhinboxに入力された名前と一致したファイルを開き、シート1とシート2を
 コピーして、ブック1.へ移動させます
’----------------------------------------------------------------
 Sheets("Sheet1").Select
 Sheets(Array("Sheet1", "Sheet2",)).Copy before:=Workbooks("ブック1..xls").Sheets(1)
’---------------------------------------
呼び出した、ファイルを閉じます
’---------------------------------------          
 Workbooks(strPartsNumber & ".xls").Close False


こんな感じにコードを書いたのですが、ブック1.と呼び出したPDFを並べて表示させるには、どうしたらよいのでしょうか?
エクセルとPDFは並べて表示できないのでしょうか?

どうかアドバイスをお願いします。
また、開いたPDFは、事務処理が終了したら、閉じたいのですが、なかなかうまく閉じれません。現在は、×をクリックして閉じていますが、自動的に閉じる方法もアドバイスいただけるとありがたいです

よろしくお願いします

【59867】Re:PDFのウィンドウサイズ変更
発言  Yuki  - 09/1/14(水) 17:24 -

引用なし
パスワード
   ▼KAO さん:
>エクセルのファイルとPDFのファイルを並べてウインドウに表示させたいのですが、うまくいきません。
>アドバイスをいただけないでしょうか?

下記のコードはPDFファイルを開いて画面半分表示、
エクセルも画面半分表示してPDFを閉じるものです。
エクセルのツールー>マクロから実行してみてください。
エクセルは自ブックが対象です。

Option Explicit
Private Declare Function SetWindowPos Lib "user32.dll" _
              (ByVal hwnd As Long, _
              ByVal hWndInsertAfter As Long, _
              ByVal x As Long, _
              ByVal y As Long, _
              ByVal cx As Long, _
              ByVal cy As Long, _
              ByVal uFlags As Long) As Long
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOZORDER = &H4
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_NOMOVE = &H2

Public Declare Function FindWindow Lib "user32" _
              Alias "FindWindowA" _
              (ByVal lpClassName As String, _
              ByVal lpWindowName As String) As Long

Private Declare Function GetSystemMetrics Lib "user32" _
              (ByVal nIndex As Long) As Long

Private Const SM_CXSCREEN = 0
Private Const SM_CYSCREEN = 1
Private Const SM_CXFULLSCREEN = 16
Private Const SM_CYFULLSCREEN = 17

Private Declare Function OpenProcess Lib "kernel32" _
              (ByVal dwDesiredAccess As Long, _
              ByVal bInheritHandle As Long, _
              ByVal dwProcessId As Long) As Long

Private Declare Function GetExitCodeProcess Lib "kernel32" _
              (ByVal hProcess As Long, _
              lpExitCode As Long) As Long

Private Declare Function TerminateProcess Lib "kernel32" _
              (ByVal hProcess As Long, _
              ByVal uExitCode As Long) As Long

Private Declare Function CloseHandle Lib "kernel32" _
              (ByVal hObject As Long) As Long

Private Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
Private Const PROCESS_TERMINATE = &H1
Private Const PROCESS_QUERY_INFORMATION = &H400

Public Declare Function PostMessage Lib "user32" _
              Alias "PostMessageA" _
              (ByVal hwnd As Long, _
              ByVal Msg As Long, _
              ByVal wParam As Long, _
              ByVal lParam As Long) As Long
Private Const WM_CLOSE = &H10

Private Declare Function GetWindowRect Lib "user32.dll" _
              (ByVal hwnd As Long, _
              lpRect As RECT) As Long
' 座標
Private Type RECT
  left  As Long
  top  As Long
  right As Long
  bottom As Long
End Type

Dim lnghWnd   As Long
Dim lngTaskId  As Long

' ウィンドウ(アプリケーション)の終了
Sub AppExit()
  Dim lngRtn As Long
  lngRtn = PostMessage(lnghWnd, WM_CLOSE, ByVal 0&, ByVal 0&)
End Sub

' 強制終了
Sub TerminateExit()
  Dim lngHdl   As Long
  Dim lngExitCode As Long
  Dim lngRtn   As Long

  lngHdl = OpenProcess(PROCESS_QUERY_INFORMATION Or _
             PROCESS_TERMINATE, 0, lngTaskId)
  lngRtn = GetExitCodeProcess(lngHdl, lngExitCode)
  lngRtn = TerminateProcess(lngHdl, lngExitCode)
  lngRtn = CloseHandle(lngHdl)
End Sub
              
Sub WindowSizeChg()
  Dim strClass  As String
  Dim pdfRECT   As RECT
  Dim xlsRECT   As RECT
  Dim lngRtn   As Long
  Dim lngX    As Long
  Dim lngY    As Long
  Dim strEXE   As String
  Dim strPDF   As String
  
  strPDF = "D:\hogehoge.pdf"
  strEXE = "C:\Program Files\Adobe\Reader 8.0\Reader\AcroRd32.exe "
  
  lngTaskId = Shell(strEXE & strPDF, 3)
  '  ' 起動待ち
  On Error Resume Next
  Do
    DoEvents
    Err.Clear
    AppActivate lngTaskId
  Loop Until Err.Number = 0
  On Error GoTo 0
  
  ' PDF を画面右半分
  strClass = "AcrobatSDIWindow"
  lnghWnd = FindWindow(strClass, vbNullString)
  If lnghWnd = 0 Then Exit Sub
  GetWindowRect lnghWnd, pdfRECT
  With pdfRECT
    lngY = (.bottom - .top)
    lngX = (GetSystemMetrics(16) / 2)
    'x 幅 y 高さ
    lngRtn = SetWindowPos(lnghWnd, _
               0, _
               lngX, _
               0, _
               lngX, _
               lngY, _
               SWP_NOZORDER Or _
               SWP_NOACTIVATE)
  End With
  ' Excelを画面左半分
  GetWindowRect Application.hwnd, xlsRECT
  With xlsRECT
    lngY = (.bottom - .top)
    lngX = (GetSystemMetrics(16) / 2)
    'x 幅 y 高さ
    lngRtn = SetWindowPos(Application.hwnd, _
               0, _
               0, _
               0, _
               lngX, _
               lngY, _
               SWP_NOZORDER Or _
               SWP_NOACTIVATE)
  End With
  ' 待ち時間
  Application.Wait Now + TimeValue("0:00:03")
  ' PDF 終了 下記2行のうちどちらかを実行
'  Call TerminateExit
  Call AppExit
  ' エクセルを最大表示
  Application.WindowState = xlMaximized
End Sub

【59884】Re:PDFのウィンドウサイズ変更
発言  KAO  - 09/1/15(木) 14:24 -

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

ありがとうございます。

初心者の私には、まだまだ解読できないコードがたくさんあり、苦戦しております…

お聞きしたいのですが、
このコードをすべて記述するということでしょうか?
例えば、Sub WindowSizeChg() の部分のVBAコードだけを記述しても、OKなのでしょうか?
すべてのコードを記述しないと、動かないのでしょうか?

すみません…初歩的な質問をして…

教えてください。

【59885】Re:PDFのウィンドウサイズ変更
発言  Yuki  - 09/1/15(木) 15:22 -

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

>お聞きしたいのですが、
>このコードをすべて記述するということでしょうか?
>例えば、Sub WindowSizeChg() の部分のVBAコードだけを記述しても、OKなのでしょうか?
>すべてのコードを記述しないと、動かないのでしょうか?

全て必要だから書いてあります。

新しいブックにVBEで Standard Moduleを追加して
そこに私の書いたコードをコピーして貼り付けてください。
出来れば保存をしてから
WindowSizeChg を実行してみて下さい。

PDFファイルの名前は変えて下さいね。
頑張って下さい。

【59897】Re:PDFのウィンドウサイズ変更
お礼  KAO  - 09/1/16(金) 13:10 -

引用なし
パスワード
   ▼Yuki さん:
ありがとうございます
なんとか、がんばってみます…

【59898】Re:PDFのウィンドウサイズ変更
質問  KAO  - 09/1/16(金) 13:22 -

引用なし
パスワード
   >▼Yuki さん:

早速、コードをそのままコピーして試してみましたところ、
下記のLoopのところで、ずーっとLoopしている状態になってしまい、処理がうまくできません。
何か原因がわかりません。
下記のコードは、何の処理をしているコードでしょうか?
すみません…
アドバイスお願いします

>lngTaskId = Shell(strEXE & strPDF, 3)
>  '  ' 起動待ち
>  On Error Resume Next
>  Do
>    DoEvents
>    Err.Clear
>    AppActivate lngTaskId
>  Loop Until Err.Number = 0

【59899】Re:PDFのウィンドウサイズ変更
発言  Yuki  - 09/1/16(金) 14:22 -

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

>下記のLoopのところで、ずーっとLoopしている状態になってしまい、処理がうまくできません。
>何か原因がわかりません。
>下記のコードは、何の処理をしているコードでしょうか?
>
>>lngTaskId = Shell(strEXE & strPDF, 3)
>>  '  ' 起動待ち
>>  On Error Resume Next
>>  Do
>>    DoEvents
>>    Err.Clear
>>    AppActivate lngTaskId
>>  Loop Until Err.Number = 0

このところはPDFファイルがきちんと表示されるまで待つというところです。
この部分をコメントにして (行頭に'を付ける)

Application.Wait Now + TimeValue("0:00:03")
この一行を入れてみて下さい。強制的に3秒待ちます。
しかし、何でそうなるのかな

【59932】Re:PDFのウィンドウサイズ変更
質問  KAO  - 09/1/20(火) 10:54 -

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

何度もすみません。
あれから、
>Application.Wait Now + TimeValue("0:00:03")
 ↑コードをいれてみたところ、loopからは開放されましたが、
 次は、下記のところで止まってしまい、悩んでます

lngTaskId = Shell(strEXE & strPDF, 3)
  
  Application.Wait Now + TimeValue("0:00:03")

  '  ' 起動待ち
  On Error Resume Next
  Do
    DoEvents
    Err.Clear
    AppActivate lngTaskId
  Loop Until Err.Number = 0
  On Error GoTo 0
 
  ' PDF を画面右半分
  strClass = "AcrobatSDIWindow"
  lnghWnd = FindWindow(strClass, vbNullString)
  If lnghWnd = 0 Then Exit Sub

上記のコードの最後部で、Exit Subまで進んでマクロの実行が終了してしまいます

なぜなんでしょうか?
なかなか、前に進めず苦しんでおります

PDFを下記のコードから変更したのが、原因でしょうか?
strEXE = "C:\Program Files\Adobe\Reader 8.0\Reader\AcroRd32.exe "
↓下記へ変更しました。
strEXE = "C:\Program Files\Adobe\Acrobat 7.0\Acrobat\Acrobat.exe "

どうか、よろしくお願いします

【59935】Re:PDFのウィンドウサイズ変更
回答  neptune  - 09/1/20(火) 11:37 -

引用なし
パスワード
   ▼KAO さん:
Yuki さんではありませんが、
>PDFを下記のコードから変更したのが、原因でしょうか?
>strEXE = "C:\Program Files\Adobe\Reader 8.0\Reader\AcroRd32.exe "
>↓下記へ変更しました。
>strEXE = "C:\Program Files\Adobe\Acrobat 7.0\Acrobat\Acrobat.exe "
が、原因で、立ち上げるソフトが変わってきますからクラス名も変わります。
従って、

>  ' PDF を画面右半分
>  strClass = "AcrobatSDIWindow"  
↑が変わって、
>  lnghWnd = FindWindow(strClass, vbNullString)
↑でうまくlnghWndが取得できないからです。

Shell関数はプロセスIDが返ってきたと思いますから、EnumWindowsで、
プロセスIDを検索して、lnghWnd を取得する方法が・・・・
思い浮かびはします。ググルとサンプルがあるかも????
キーワード「Shell関数 EnumWindows」

【59936】Re:PDFのウィンドウサイズ変更
発言  neptune  - 09/1/20(火) 11:40 -

引用なし
パスワード
   ▼KAO さん:
あった。
VB6.0 SHELLで起動したプログラムを終了さしたいのですが - 教えて!goo
ht tp://oshiete1.goo.ne.jp/qa157242.html?ans_count_asc=2

【59942】Re:PDFのウィンドウサイズ変更
質問  KAO  - 09/1/20(火) 13:50 -

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

アドバイスありがとうございます
今、教えてもらったサイトなど、いろいろ見ているのですが、いまいち理解ができず困難です


>>  strClass = "AcrobatSDIWindow"  
>↑が変わって、
>>  lnghWnd = FindWindow(strClass, vbNullString)
>↑でうまくlnghWndが取得できないからです。
>
>Shell関数はプロセスIDが返ってきたと思いますから、EnumWindowsで、
>プロセスIDを検索して、lnghWnd を取得する方法が・・・・

と、教えていただきましたが、
  strClass = ???? ←ここの?部分を変更すればよいということですよね??

EnumWindowsでプロセスIDを検索する…ということですが、
どのようにすればよいのか???状態です。

申し訳ありませんが、教えて頂けると嬉しいです

【59943】Re:PDFのウィンドウサイズ変更
質問  KAO  - 09/1/20(火) 13:51 -

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

アドバイスありがとうございます
今、教えてもらったサイトなど、いろいろ見ているのですが、いまいち理解ができず困難です


>  strClass = "AcrobatSDIWindow"  
>↑が変わって、
>  lnghWnd = FindWindow(strClass, vbNullString)
>↑でうまくlnghWndが取得できないからです。
>
>Shell関数はプロセスIDが返ってきたと思いますから、EnumWindowsで、
>プロセスIDを検索して、lnghWnd を取得する方法が・・・・

と、教えていただきましたが、
  strClass = ???? ←ここの?部分を変更すればよいということですよね??

EnumWindowsでプロセスIDを検索する…ということですが、
どのようにすればよいのか???状態です。

申し訳ありませんが、教えて頂けると嬉しいです

【59946】Re:PDFのウィンドウサイズ変更
発言  neptune  - 09/1/20(火) 17:25 -

引用なし
パスワード
   ▼KAO さん:
>▼neptune さん:
>
>アドバイスありがとうございます
>今、教えてもらったサイトなど、いろいろ見ているのですが、いまいち理解ができず困難です
いまいちとは基本的な所はわかるがあと少しの所で判らんという
意味と思いますが、具体的に判らない事を書いてください。

あのサンプルは実行しても恐らく害は無いので試して理解して下さい。
電卓は表示して置いてください。

※但し、EnumWinProcの内容をいじったり、その中で止めたりしてはいけません。
多分大丈夫とは思いますが、万一Excelがこけたりするかも????
一応APIですから、用心に越した事は無いです。

>申し訳ありませんが、教えて頂けると嬉しいです
私は基本的にサンプル程度しか書きません。
既に紹介のサイトに判り易いサンプルはあります。

【59980】Re:PDFのウィンドウサイズ変更
発言  Yuki  - 09/1/22(木) 11:49 -

引用なし
パスワード
   ▼KAO さん:
>▼neptune さんの
>>Shell関数はプロセスIDが返ってきたと思いますから、EnumWindowsで、
>>プロセスIDを検索して、lnghWnd を取得する方法が・・・・

第二弾です。
Option Explicit

Private Declare Function EnumWindows Lib "user32.dll" _
              (ByVal lpEnumFunc As Long, _
              ByVal lParam As Long) As Long
            
Private Declare Function GetWindowThreadProcessId Lib "user32" _
              (ByVal hWnd As Long, _
              lpdwProcessId As Long) As Long

Private Declare Function GetParent Lib "user32" _
              (ByVal hWnd As Long) As Long
    
' ウィンドウの表示状態
Private Declare Function IsWindowVisible Lib "user32" _
              (ByVal hWnd As Long) As Long

' ウィンドウのクラス名
Private Declare Function GetClassName Lib "user32.dll" _
              Alias "GetClassNameA" _
              (ByVal hWnd As Long, _
              ByVal lpClassName As String, _
              ByVal nMaxCount As Long) As Long

' ウィンドウテキスト
Private Declare Function GetWindowText Lib "user32.dll" _
              Alias "GetWindowTextA" _
              (ByVal hWnd As Long, _
              ByVal lpString As String, _
              ByVal nMaxCount As Long) As Long

'ウインドウ文字列の長さ
Private Declare Function GetWindowTextLength Lib "user32" _
              Alias "GetWindowTextLengthA" _
              (ByVal hWnd As Long) As Long

'ウインドウ設定値
Private Declare Function GetWindowLong Lib "user32" _
              Alias "GetWindowLongA" _
              (ByVal hWnd As Long, _
              ByVal nIndex As Long) As Long

Private Const GWL_STYLE = (-16)
Private Const WS_SYSMENU = &H80000
Private Const WS_BORDER = &H800000

Private Declare Function SetWindowPos Lib "user32.dll" _
              (ByVal hWnd As Long, _
              ByVal hWndInsertAfter As Long, _
              ByVal x As Long, _
              ByVal y As Long, _
              ByVal cx As Long, _
              ByVal cy As Long, _
              ByVal uFlags As Long) As Long
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOZORDER = &H4
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_NOMOVE = &H2

Private Declare Function FindWindow Lib "user32" _
              Alias "FindWindowA" _
              (ByVal lpClassName As String, _
              ByVal lpWindowName As String) As Long

Private Declare Function GetSystemMetrics Lib "user32" _
              (ByVal nIndex As Long) As Long

Private Const SM_CXSCREEN = 0
Private Const SM_CYSCREEN = 1
Private Const SM_CXFULLSCREEN = 16
Private Const SM_CYFULLSCREEN = 17

Private Declare Function OpenProcess Lib "kernel32" _
              (ByVal dwDesiredAccess As Long, _
              ByVal bInheritHandle As Long, _
              ByVal dwProcessId As Long) As Long

Private Declare Function GetExitCodeProcess Lib "kernel32" _
              (ByVal hProcess As Long, _
              lpExitCode As Long) As Long

Private Declare Function TerminateProcess Lib "kernel32" _
              (ByVal hProcess As Long, _
              ByVal uExitCode As Long) As Long

Private Declare Function CloseHandle Lib "kernel32" _
              (ByVal hObject As Long) As Long

Private Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
Private Const PROCESS_TERMINATE = &H1
Private Const PROCESS_QUERY_INFORMATION = &H400

Private Declare Function PostMessage Lib "user32" _
              Alias "PostMessageA" _
              (ByVal hWnd As Long, _
              ByVal Msg As Long, _
              ByVal wParam As Long, _
              ByVal lParam As Long) As Long
Private Const WM_CLOSE = &H10

Private Declare Function GetWindowRect Lib "user32.dll" _
              (ByVal hWnd As Long, _
              lpRect As RECT) As Long
' 座標
Private Type RECT
  left  As Long
  top  As Long
  right As Long
  bottom As Long
End Type

Dim lnghWnd   As Long
Dim lngTaskId  As Long

' ウィンドウ(アプリケーション)の終了
Sub AppExit()
  Dim lngRtn As Long
  lngRtn = PostMessage(lnghWnd, WM_CLOSE, ByVal 0&, ByVal 0&)
End Sub

' 強制終了
Sub TerminateExit()
  Dim lngHdl   As Long
  Dim lngExitCode As Long
  Dim lngRtn   As Long

  lngHdl = OpenProcess(PROCESS_QUERY_INFORMATION Or _
             PROCESS_TERMINATE, 0, lngTaskId)
  lngRtn = GetExitCodeProcess(lngHdl, lngExitCode)
  lngRtn = TerminateProcess(lngHdl, lngExitCode)
  lngRtn = CloseHandle(lngHdl)
End Sub
              
' コールバック関数
Function EnumWindowsProc(ByVal hWnd As Long, _
             ByVal lParam As Long) As Long
  
  Dim strWindowClassNameBuff As String * 128
  Dim strWindowTextBuff    As String * 516
  Dim lngRtnCode       As Long
  Dim lngThreadId       As Long
  Dim lngProcesID       As Long
  Dim lngStyle        As Long
  Dim lngRow         As Long
  Dim strClass        As String
  Dim strText         As String

  '表示状態
  If IsWindowVisible(hWnd) = 0 Then GoTo EnumPass
  '親ウインドウ
  If GetParent(hWnd) <> 0 Then GoTo EnumPass
  'タイトルバー文字長さ
  If GetWindowTextLength(hWnd) = 0 Then GoTo EnumPass
  lngStyle = GetWindowLong(hWnd, GWL_STYLE)
  'システムメニュー
  If Not lngStyle And WS_SYSMENU Then GoTo EnumPass
  '境界線
  If Not lngStyle And WS_BORDER Then GoTo EnumPass

  lngThreadId = GetWindowThreadProcessId(hWnd, lngProcesID)
  If lParam = lngProcesID Then
    ' クラス名をバッファに
    lngRtnCode = GetClassName(hWnd, _
                 strWindowClassNameBuff, _
                 Len(strWindowClassNameBuff))
    ' クラス名取得
    strClass = left(strWindowClassNameBuff, _
                   InStr(strWindowClassNameBuff, _
                      vbNullChar) - 1)
    ' タイトルバーテキストをバッファに
    lngRtnCode = GetWindowText(hWnd, _
                strWindowTextBuff, _
                Len(strWindowTextBuff))
    ' タイトルバーテキスト表示
    strText = left(strWindowTextBuff, _
                  InStr(strWindowTextBuff, _
                  vbNullChar) - 1)
    lnghWnd = hWnd
' 此処のコメントを外すと 下記のデータがイミディエイトウィンドウに表示
'    Debug.Print "Window Handle = " & hWnd, "ClassName = " & strClass, "Window Text = " & strText
    EnumWindowsProc = False
    Exit Function
  End If
  ' 列挙を継続
EnumPass:
  EnumWindowsProc = True
End Function

Sub WindowSizeChg()
  Dim strClass  As String
  Dim pdfRECT   As RECT
  Dim xlsRECT   As RECT
  Dim lngRtn   As Long
  Dim lngX    As Long
  Dim lngY    As Long
  Dim strEXE   As String
  Dim strPDF   As String
  
  strPDF = "D:\hogehoge.pdf"    ' ←ここは実際のファイル名を
  strEXE = "C:\Program Files\Adobe\Acrobat 7.0\Acrobat\Acrobat.exe "
  
  lngTaskId = Shell(strEXE & strPDF, 3)
'  起動待ち
  On Error Resume Next
  Do
    DoEvents
    Err.Clear
    AppActivate lngTaskId
  Loop Until Err.Number = 0
  On Error GoTo 0
'  Application.Wait Now + TimeValue("0:00:03")

  lnghWnd = 0
  lngRtn = EnumWindows(AddressOf EnumWindowsProc, ByVal lngTaskId)
 
'  EnumWindowのコールバックで表示した時 ClassName = AcrobatSDIWindow ← に表示されたものを
'           ↓ に入れれば EnumWindows のコールは要らなくなります。
'  strClass = "AcrobatSDIWindow"
'  Debug.Print Hex(FindWindow(strClass, vbNullString)), Hex(lnghWnd)
  If lnghWnd = 0 Then Exit Sub
'  PDF を画面右半分
  GetWindowRect lnghWnd, pdfRECT
  With pdfRECT
    lngY = (.bottom - .top)
    lngX = (GetSystemMetrics(16) / 2)
    'x 幅 y 高さ
    lngRtn = SetWindowPos(lnghWnd, _
               0, _
               lngX, _
               0, _
               lngX, _
               lngY, _
               SWP_NOZORDER Or _
               SWP_NOACTIVATE)
  End With
  ' Excelを画面左半分
  GetWindowRect Application.hWnd, xlsRECT
  With xlsRECT
    lngY = (.bottom - .top)
    lngX = (GetSystemMetrics(16) / 2)
    'x 幅 y 高さ
    lngRtn = SetWindowPos(Application.hWnd, _
               0, _
               0, _
               0, _
               lngX, _
               lngY, _
               SWP_NOZORDER Or _
               SWP_NOACTIVATE)
  End With
  ' 待ち時間
  Application.Wait Now + TimeValue("0:00:03")
  ' PDF 終了 下記2行のうちどちらかを実行
'  Call TerminateExit
  Call AppExit
  ' エクセルを最大表示
  lngRtn = SetWindowPos(Application.hWnd, _
             0, _
             0, _
             0, _
             lngX * 2, _
             lngY, _
             SWP_NOZORDER Or _
             SWP_NOACTIVATE)
'  Application.WindowState = xlMaximized
'  Application.WindowState = xlNormal
End Sub

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