Excel VBA質問箱 IV

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

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


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

【72618】マクロが止まる理由? たつ 12/8/29(水) 9:56 質問[未読]
【72620】Re:マクロが止まる理由? ウッシ 12/8/29(水) 12:03 回答[未読]
【72637】Re:マクロが止まる理由? たつ 12/8/30(木) 10:54 質問[未読]
【72638】Re:マクロが止まる理由? ウッシ 12/8/30(木) 11:26 回答[未読]
【72639】Re:マクロが止まる理由? たつ 12/8/30(木) 12:57 質問[未読]
【72640】Re:マクロが止まる理由? ウッシ 12/8/30(木) 13:15 回答[未読]
【72641】Re:マクロが止まる理由? たつ 12/8/30(木) 14:31 発言[未読]
【72643】Re:マクロが止まる理由? ウッシ 12/8/30(木) 15:03 回答[未読]
【72646】Re:マクロが止まる理由? とおりすぎ 12/8/30(木) 15:42 回答[未読]

【72618】マクロが止まる理由?
質問  たつ  - 12/8/29(水) 9:56 -

引用なし
パスワード
   起動しているexeファイルのアプリケーションが、最小化となっているため、
一度、最大化に戻して、AppActivate で アプリケーションをアクティブにさせて、SendKey送信を行うマクロを作成してますが、

どうしても、途中で止まる?のです。

理由が分からず困ってます
どうかアドバイスお願いします。

If MyName Like "*シテイアプリ*" Then
      ’シテイのファイルを最大化にする
      Set Wshshell = CreateObject("Wscript.Shell")
        Wshshell.AppActivate "シテイアプリ"
         Wshshell.SendKeys "%( )"
         Wshshell.SendKeys "R"
      '*********
      'ここでマクロ操作が一旦止まってしまうけど、
      'マウスでマクロの入っているエクセルファイルををクリックすると、 
      ’また、再開して進みます。
      'このプログラムをどのように改訂すれば、
      ’正常に動作してくれるのでしょうか?
      '*********
       'シテイのファイルをアクティブにする   
       AppActivate "シテイアプリ", True
       SCreenFlg = True '画面あり
       
       SendKeys "01", True
        Sleep (200)
  
        Send_RCtrl '右Ctrl
        Sleep (200)
        
    End If

【72620】Re:マクロが止まる理由?
回答  ウッシ  - 12/8/29(水) 12:03 -

引用なし
パスワード
   APIにしてみてもダメでしょうか?

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
    ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" ( _
    ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
    ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_SETTEXT = &HC

Sub test()
  Dim hExe As Long
  Dim hEnt As Long

  hExe = FindWindow("シテイアプリ", vbNullString)
  hEnt = FindWindowEx(hExe, 0, "Edit", vbNullString)
  Call SendMessage(hEnt, WM_SETTEXT, 0, ByVal "%( )")
  Call SendMessage(hEnt, WM_SETTEXT, 0, ByVal "R")
End Sub

【72637】Re:マクロが止まる理由?
質問  たつ  - 12/8/30(木) 10:54 -

引用なし
パスワード
   ▼ウッシ さん:

アドバイスありがとうございます。
ウッシさんのコードをそのまま使用してみましたが、
何も起こらない現象に陥ってます。

指定する名前は、ウインドウの名前(上部青色のところの名前)でいいのですよね?

【72638】Re:マクロが止まる理由?
回答  ウッシ  - 12/8/30(木) 11:26 -

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

ウインドウ名が"シテイアプリ"というアプリが起動されていますでしょうか?

>▼ウッシ さん:
>
>アドバイスありがとうございます。
>ウッシさんのコードをそのまま使用してみましたが、
>何も起こらない現象に陥ってます。
>
>指定する名前は、ウインドウの名前(上部青色のところの名前)でいいのですよね?

【72639】Re:マクロが止まる理由?
質問  たつ  - 12/8/30(木) 12:57 -

引用なし
パスワード
   ▼ウッシ さん:
>▼たつ さん:
>
>ウインドウ名が"シテイアプリ"というアプリが起動されていますでしょうか?
>
はい、起動しています。
アプリは
"C:\Program Files\COMNET Series Emulator\hlexpl32.exe"
です。
何か、環境がよくないのでしょうか?
何度もすみません・・・

【72640】Re:マクロが止まる理由?
回答  ウッシ  - 12/8/30(木) 13:15 -

引用なし
パスワード
   こうするとどうでしょうか?

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
    ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" ( _
    ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
    ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_SETTEXT = &HC

Sub test1()
  Dim hExe As Long
  Dim hEnt As Long

  hExe = FindWindow("hlexpl32", vbNullString)
  hEnt = FindWindowEx(hExe, 0, "Edit", vbNullString)
  Call SendMessage(hEnt, WM_SETTEXT, 0, ByVal "%( )")
  Call SendMessage(hEnt, WM_SETTEXT, 0, ByVal "R")
End Sub

▼たつ さん:
>▼ウッシ さん:
>>▼たつ さん:
>>
>>ウインドウ名が"シテイアプリ"というアプリが起動されていますでしょうか?
>>
>はい、起動しています。
>アプリは
>"C:\Program Files\COMNET Series Emulator\hlexpl32.exe"
>です。
>何か、環境がよくないのでしょうか?
>何度もすみません・・・

【72641】Re:マクロが止まる理由?
発言  たつ  - 12/8/30(木) 14:31 -

引用なし
パスワード
   ▼ウッシ さん:

ありがとうございます。
2回目に教えてもらったコードでも、ダメでした。
hExe = FindWindow("hlexpl32", vbNullString)
↑こちらに変えてもダメでした。(泣)

いろいろネットでも調べていて、下記内容をみてみて、試してみました。
******************************************************
'ウインドウ名を指定する場合
Private Sub Command1_Click()
  Dim ret As Long
  ret = FindWindow(vbNullString, "無題 - メモ帳")
  Me.Caption = ret
End Sub

'クラス名を指定する場合
Private Sub Command2_Click()
  Dim ret As Long
  ret = FindWindow("Notepad", vbNullString)
  Me.Caption = ret
End Sub
******************************************************************
と書いてあったので、
ウィンドウ名を指定する場合を参考に、
vbnullStringとシテイアプリ名の順番を変えてみたら、
↓↓
hExe = FindWindow(vbNullString, "TCPLink6680エミュレータ - TCP6680-Ses01")

hExeに数値が入りましたが、数値が入ったということは、取得しているのでしょうか?

しかし、次のhEntには数値0が返ってきました。
hEnt = FindWindowEx(hExe, 0, "Edit", vbNullString)

Call SendMessage(hEnt, WM_SETTEXT, 0, ByVal "%( )")
Call SendMessage(hEnt, WM_SETTEXT, 0, ByVal "R")

どうして、うまく取得してくれないのでしょうか?
困惑中です

【72643】Re:マクロが止まる理由?
回答  ウッシ  - 12/8/30(木) 15:03 -

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

多分同じサイト見て回答してみたんですけどダメですね。

きっと、「"Edit"」の部分を"TCPLink6680エミュレータ - TCP6680-Ses01"
の入力画面に相当する文言に変更しないといけないと思います。
起動している画面そのものでよければ

hExe = FindWindow(vbNullString, "TCPLink6680エミュレータ - TCP6680-Ses01")
Call SendMessage(hExe, WM_SETTEXT, 0, ByVal "%( )")
Call SendMessage(hExe, WM_SETTEXT, 0, ByVal "R")

これで動くかも知れません。

拡張ウィンドウだとしたらこちらでは
"TCPLink6680エミュレータ - TCP6680-Ses01" が全く分からないので
たつ さんの方で調べて試行錯誤してみて下さい。

【72646】Re:マクロが止まる理由?
回答  とおりすぎ  - 12/8/30(木) 15:42 -

引用なし
パスワード
   ▼ウッシ さん:
>たつ さんの方で調べて試行錯誤してみて下さい。

下記のコードとかでクラス名やウインドウタイトルを調べてみる。
www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=72142;id=excel

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