Excel VBA質問箱 IV

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

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


22250 / 76734 ←次へ | 前へ→

【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

2 hits

【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 発言

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