vbaを使ってエクセルのセルのデータを起動済みの他のアプリケーション(以下他アプリ)に貼り付けたいと考えています。
具体的には、↓のようなものを作りたいと考えています。
Sub CopyCell()
Cells(2, 1).Copy
AppActivate ("タイトル")
SendKeys "^v", True
End Sub
そこで上記のようにAppActivateを使用して他アプリをアクティブにしようと思っています。しかし、AppActivateに必要になる、他アプリのウィンドウのタイトルがそのときどきによって変わる為、それに対処したいのですがなかなかうまくいかず困っています。
調べたところによると、API関数のGetWindowTextを使用すればそれが可能であるとのことでした。ただ、私は完全な初心者なのでAPIの使用方法や複数同時起動しているアプリケーションの中からアプリだけを選ぶ方法がまったくわかりません。
どなたかおわかりになる方いましたらよろしくお願い致します。
具体的なソースを貼って頂けると大変助かります。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
GetWindowTextでタイトルバーの文字列は取得出来ますが
このAPIにはウィンドウハンドルが必要です
このハンドルを取得するには EnumWindowsなどを使って取得しないといけません
EnumWindowsはコールバック関数を使ってユーザーアプリケーションにウィンドウハンドルを返してきます
標準モジュールに以下を記述します
Declare Function EnumWindws lib "user32" _
(ByVal lpEnumFunc, ByVal lParam as Long) as Long
Declare Function IsWindowVisible Lib "user32" _
(ByVal hWnd as Long) as Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
(ByVal Hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public ssMyTitle as String
Function myProc(ByVal as hWnd as Long, byVal lParam as Long) as Long
' 非表示のウィンドウ以外を検索する
if IsWindowVisible( hWnd ) then
Dim ss as String, nLen as Long
ss = String( 255, vbNullChar )
nLen = Len( ss )
if GetWindowText( hWnd, ss, nLen ) > 0 then
' ここで目的のタイトルかどうかを判断
' 条件が成立するなら0を返す
if Left(ss, 5) = "MyTest" then
ssMyTitle = ss
myProc = 0
Exit Function
end if
end if
end if
' 次を探すためには1を返す
myProc = 1
End Function
呼び出し側は
Sub Macro1()
ssMyTitle = ""
EnumWindows Addressof myProc, 0
if ssMyTitle <>"" then
Cells(2,1).Copy
AppActivate ssMyTitle
Sendkeys "^v", True
end if
End Sub
といった具合でしょう …
この回答への補足
具体的な内容で助かります。
大変申し訳ないんですが一つ条件を説明しそこねていました。
他アプリのタイトルは非常に把握しにくくなっています。
「0666 ABC 平成20年 処理済」
このような形式のタイトルで、ABCと平成の間のスペースの数を把握することができません。上述のタイトルで変わらないのは「平成」という部分だけです。
このマクロを使用する際、平成という文字を含むウインドウは他に使用しないので、タイトルが完全に一致していなくても、「平成」の文字をタイトルに含むウインドウに対してキーを送るようにできれば十分です。
このタイトルを把握しにくいという問題を解決するために考えている方法は現在2つあります。
■直接appactivateにタイトル名を入れる方法
なんらかの方法で完全なタイトル名を取得し、それを手打ちで直接マクロに入れます。
たとえば、「タイトル123」のような完全な形でタイトルを把握し、appactivate("タイトル123")で直接指示するような形です。これができると非常に楽です。
■教授していただいたような方法
平成の文字列をタイトルに含むウインドウに対してキーを送るような形式。
よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel2019 マクロを使用し画像を貼り付けした際のリンク切れについて 2 2022/11/15 16:14
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Excel(エクセル) inputboxのウインドウを画面の最上部に表示したい 1 2022/11/28 15:43
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBAマクロ 決まっていない行を選択して別シートへ貼付け 4 2023/02/16 16:08
- その他(プログラミング・Web制作) プログラムの起動、利用について、使用期間を設定する方法 3 2023/08/06 21:03
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
VBAにてEXCEL以外のファイル(テキストなど)がすでに開いているかの確認方法
Visual Basic(VBA)
-
ExcelVBAでPDFを閉じるソース
その他(Microsoft Office)
-
VBAでCSVファイルが使用中かどうかの確認
Visual Basic(VBA)
-
-
4
VBA。開いているテキストファイルを検索
Excel(エクセル)
-
5
ファイルが開かれているかどうかの判断
Visual Basic(VBA)
-
6
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
7
ADOのCursorLocationプロパティ
Visual Basic(VBA)
-
8
AppActivate関数について
Visual Basic(VBA)
-
9
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
検索の画面がでなくなってしま...
-
他のアプリケーションの終了処理
-
ゲームでは結局どっちが良いの?
-
勝手にウィンドウが開いて止ま...
-
名前を付けて保存のウィンドウ...
-
作成したウインドウのサイズを...
-
selenium basicを使ったchrome...
-
UWSCで特定のChromeのタブをア...
-
最大化と最小化ボタン
-
他アプリの操作(メニューバー)
-
[VBA] UserForm を Excel の W...
-
最大化時のフルスクリーン
-
Excelの上下を固定したい
-
ExcelのBOOKが消えた!
-
Alt+P,Alt+NをPostmessageで送...
-
C言語でWin32APIを使い、子ウィ...
-
子ウィンドウに発生したイベント
-
Excel で2つウインドウ枠の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
検索の画面がでなくなってしま...
-
勝手にウィンドウが開いて止ま...
-
ゲームでは結局どっちが良いの?
-
Excelの上下を固定したい
-
VBA .Value=.Value ?
-
作成したウインドウのサイズを...
-
Vba LongPtrについて教えてくだ...
-
ExcelのBOOKが消えた!
-
ラジオボタンの初期指定
-
他のアプリケーションの終了処理
-
「&HFFFF」「&H1A」とは?
-
親ウインドウにあるOKボタンを...
-
EnumChildWindowsの使い方(VBA)
-
MFC ダイアログ上のID取得につ...
-
[VBA] UserForm を Excel の W...
-
UWSCで特定のChromeのタブをア...
-
ボタンのハンドルウィンド取得...
-
ExcelVBAでAPIを使って外部ウイ...
おすすめ情報