
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)
-
VBAでCSVファイルが使用中かどうかの確認
Visual Basic(VBA)
-
ファイルが開かれているかどうかの判断
Visual Basic(VBA)
-
-
4
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
5
ExcelVBAでPDFを閉じるソース
その他(Microsoft Office)
-
6
VBAで、なぜかSendkeyが効きません。
PowerPoint(パワーポイント)
-
7
VBA。開いているテキストファイルを検索
Excel(エクセル)
-
8
VBAでの SendKeysの変数指定方法
Excel(エクセル)
-
9
Excel VBAで他アプリケーションの文字列取得
Excel(エクセル)
-
10
EXCEL ページを指定してPDF出力するVBAを教えてください。
PDF
-
11
エクセルVBAにおけるON TIMEメソッドの解除方法について
Visual Basic(VBA)
-
12
《エクセルVBA》「他の人が該当ファイルを使用中の場合」の処理
Excel(エクセル)
-
13
Msgboxの×が押されたとき
Excel(エクセル)
-
14
UserForm1.Showでエラーになります。
工学
-
15
特定のPCだけ動作しないVBAマクロがあります。その理由は?
Visual Basic(VBA)
-
16
特定のファイルのみリボンの非表示、ウィンドウサイズの固定
Excel(エクセル)
-
17
Application.Runエラー(1004)
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「アイテムは収集されました」...
-
エクセルで作った新しいウイン...
-
ラジオボタンの初期指定
-
エクセルについて
-
[VBA] UserForm を Excel の W...
-
作成したウインドウのサイズを...
-
FindWindowの戻り値が違う!?
-
Console.WriteLine で表示されない
-
Excelの上下を固定したい
-
エクセルで1行目から3行目が消...
-
WM_KEYDOWN が拾えない(EditBo...
-
最大化でタスクバーを隠す
-
勝手にウィンドウが開いて止ま...
-
VBA .Value=.Value ?
-
Vba LongPtrについて教えてくだ...
-
クリスタルレポートからPDFを作...
-
VB2005のイミディエイト ウィン...
-
Excel で2つウインドウ枠の...
-
名前を付けて保存のウィンドウ...
-
【VB2008】 マウス操作の一時的...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
ラジオボタンの初期指定
-
勝手にウィンドウが開いて止ま...
-
Vba LongPtrについて教えてくだ...
-
検索の画面がでなくなってしま...
-
Excelの上下を固定したい
-
ExcelのBOOKが消えた!
-
[VBA] UserForm を Excel の W...
-
VBA .Value=.Value ?
-
作成したウインドウのサイズを...
-
Console.WriteLine で表示されない
-
エクセルで1行目から3行目が消...
-
「&HFFFF」「&H1A」とは?
-
【VB2008】 マウス操作の一時的...
-
UWSCで特定のChromeのタブをア...
-
他のアプリケーションの終了処理
-
MFCでハンドルを取得するには
-
VBAで単一ブック複数窓を閉じる...
-
EnumChildWindowsの使い方(VBA)
おすすめ情報