Excel VBA質問箱 IV

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

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


14036 / 76733 ←次へ | 前へ→

【68197】Re:InputBoxメソッドのD.Box位置について
発言  grok  - 11/2/13(日) 14:49 -

引用なし
パスワード
   みなさんこんにちは。

SendKeysは、NumLockが解除されるといった不具合が多数報告されています。

ユーザーから「数字の入力が出来ないんだけど」といった声があちこちから
聞こえてくるのが想像できます。

私は不具合を体験してからSendKeysの使用をやめました。NumLock解除の回避
方法はありません。sendkeysをやめるか替わりにAPIのkeybd_eventを使用する
方法がよく紹介されていますが、ちょっと違うアプローチで、

タイマーを使ってInputBox表示後に位置を移動する方法を紹介したいと思います。


Public Declare Function SetTimer Lib "user32" _
           (ByVal hwnd As Long, _
            ByVal nIDEvent As Long, _
            ByVal uElapse As Long, _
            ByVal lpTimerFunc As Long) As Long
                       
Public Declare Function KillTimer Lib "user32" _
           (ByVal hwnd As Long, _
            ByVal nIDEvent As Long) As Long

Public Declare Function MoveWindow Lib "user32" _
           (ByVal hwnd As Long, _
            ByVal X As Long, _
            ByVal Y As Long, _
            ByVal nWidth As Long, _
            ByVal nHight As Long, _
            ByVal bRepain As Long) As Long
                        
Public Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
           (ByVal lpClassName As String, _
            ByVal lpWindowName As String) As Long
Public Declare Function GetForegroundWindow Lib "user32.dll" () As Long
Public Declare Function GetWindowRect Lib "user32.dll" _
           (ByVal hwnd As Long, lpRect As RECT) As Long

Public Type RECT
  Left  As Long
  Top  As Long
  Right As Long
  Bottom As Long
End Type

Sub Test()

  Dim obj
  '0.3秒後にTimerを発動してInputBoxの位置を移動します。
  SetTimer 0&, 0&, 300, AddressOf myTimer
  Set obj = Application.InputBox _
        (prompt:="該当のdataを選んでちょうだい!", Type:=8)
  
End Sub


Private Function myTimer(ByVal hwnd As Long, _
             ByVal uMsg As Long, _
             ByVal idEvent As Long, _
             ByVal SysTime As Long) As Long

  
  Dim Targethwnd&
  Dim myRect As RECT
  Dim ret&
  
  '※このFunction内にブレークポイントを設置しない事!!ecxelが落ちます。
  '値を確認するにはDebug.Printの使用


  'Timer中のエラーは、無視をするか正しくエラーをハンドルしなければ
  'Excelが落ちます。要注意です。
  On Error Resume Next
  
  'フォアグランドにあるウインドウハンドルを取得します。
  Targethwnd = GetForegroundWindow()
  
  'InputBoxのウインドウハンドルが取得できたら
  If Targethwnd <> 0 Then
    
    'myRectにInputBoxのサイズと位置を格納します。
    ret = GetWindowRect(Targethwnd, myRect)
    
     If ret <> 0 Then 'Rectが取得できたら
    
      With myRect
         'InputBoxの動かす前の位置を取りあえず書き出してみます。
         Debug.Print "Left=" & .Left, "top=" & .Top, _
               "right=" & .Right, "bottom=" & .Bottom

         'API movewindowでInputBoxを移動します。

         MoveWindow Targethwnd, -(.Right - .Left), .Top, _
              .Right - .Left, .Bottom - .Top, 1&

         '-(.Right - .Left)の値だと画面によっては、
         'InputBoxのおしりが見えるはずです。
         '-(.Right - .Left)の部分を直接-10000など大きい数字でも
         'OKです。
      End With
     End If
      
  End If
  
  KillTimer 0&, idEvent '必ずTimerを解除します。
  

End Function

4 hits

【68181】InputBoxメソッドのD.Box位置について あまがえる 11/2/10(木) 10:33 質問
【68184】Re:InputBoxメソッドのD.Box位置について Yuki 11/2/11(金) 11:06 発言
【68185】Re:InputBoxメソッドのD.Box位置について Yuki 11/2/11(金) 11:10 発言
【68187】Re:InputBoxメソッドのD.Box位置について あまがえる 11/2/11(金) 18:20 お礼
【68188】Re:InputBoxメソッドのD.Box位置について kanabun 11/2/11(金) 19:29 発言
【68192】Re:InputBoxメソッドのD.Box位置について あまがえる 11/2/12(土) 4:55 お礼
【68193】Re:InputBoxメソッドのD.Box位置について kanabun 11/2/12(土) 10:45 発言
【68194】Re:InputBoxメソッドのD.Box位置について とおりすがり 11/2/12(土) 10:47 回答
【68195】Re:InputBoxメソッドのD.Box位置について あまがえる 11/2/13(日) 8:40 お礼
【68196】Re:InputBoxメソッドのD.Box位置について UO3 11/2/13(日) 12:19 発言
【68197】Re:InputBoxメソッドのD.Box位置について grok 11/2/13(日) 14:49 発言
【68200】Re:InputBoxメソッドのD.Box位置について grok 11/2/13(日) 17:18 発言
【68201】Re:InputBoxメソッドのD.Box位置について ichinose 11/2/13(日) 23:28 発言
【68202】Re:InputBoxメソッドのD.Box位置について UO3 11/2/14(月) 9:16 発言
【68206】Re:InputBoxメソッドのD.Box位置について ichinose 11/2/14(月) 21:17 発言
【68207】Re:InputBoxメソッドのD.Box位置について grok 11/2/14(月) 22:10 発言
【68208】Re:InputBoxメソッドのD.Box位置について UO3 11/2/15(火) 0:46 発言
【68210】Re:InputBoxメソッドのD.Box位置について ichinose 11/2/15(火) 6:11 発言
【68211】Re:InputBoxメソッドのD.Box位置について UO3 11/2/15(火) 6:34 発言
【68212】Re:InputBoxメソッドのD.Box位置について よろずや 11/2/15(火) 6:48 発言
【68213】Re:InputBoxメソッドのD.Box位置について UO3 11/2/15(火) 9:27 発言
【68225】Re:InputBoxメソッドのD.Box位置について ichinose 11/2/15(火) 23:57 発言
【68249】Re:InputBoxメソッドのD.Box位置について あまがえる 11/2/17(木) 14:15 お礼

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