
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAにてEXCEL以外のファイル(テキストなど)がすでに開いているかの確認方法
Visual Basic(VBA)
-
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
ExcelVBAでPDFを閉じるソース
その他(Microsoft Office)
-
-
4
ファイルが開かれているかどうかの判断
Visual Basic(VBA)
-
5
VBAでCSVファイルが使用中かどうかの確認
Visual Basic(VBA)
-
6
VBAでの SendKeysの変数指定方法
Excel(エクセル)
-
7
Excel VBAで他アプリケーションの文字列取得
Excel(エクセル)
-
8
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
9
エクセルVBAにおけるON TIMEメソッドの解除方法について
Visual Basic(VBA)
-
10
《エクセルVBA》「他の人が該当ファイルを使用中の場合」の処理
Excel(エクセル)
-
11
VBAで、なぜかSendkeyが効きません。
PowerPoint(パワーポイント)
-
12
Excel-VBAの「しばらくお待ちください」のダイアログが自動的に閉じない
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「アイテムは収集されました」...
-
エクセルで作った新しいウイン...
-
検索の画面がでなくなってしま...
-
C#でファイル転送プログラムWin...
-
作成したウインドウのサイズを...
-
勝手にウィンドウが開いて止ま...
-
ExcelのBOOKが消えた!
-
クリスタルレポートからPDFを作...
-
他のアプリケーションの終了処理
-
「&HFFFF」「&H1A」とは?
-
EnumChildWindowsの使い方(VBA)
-
Vba LongPtrについて教えてくだ...
-
最大化と最小化ボタン
-
隠れたウィンドウの画面をキャ...
-
非アクティブのウィンドウを最...
-
エクセルで1行目から3行目が消...
-
(ショートカットキー)Alt+...
-
VBAで単一ブック複数窓を閉じる...
-
ウィンドウハンドルって途中で...
-
C++Builderでハンドルを使い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
皆さん、おはようございます♪ ...
-
勝手にウィンドウが開いて止ま...
-
検索の画面がでなくなってしま...
-
ラジオボタンの初期指定
-
Vba LongPtrについて教えてくだ...
-
作成したウインドウのサイズを...
-
[VBA] UserForm を Excel の W...
-
ゲームでは結局どっちが良いの?
-
Excelの上下を固定したい
-
ExcelのBOOKが消えた!
-
「&HFFFF」「&H1A」とは?
-
指定したインアクティブウィン...
-
エクセルで1行目から3行目が消...
-
OutlookでRSSフィードやメモの...
-
UWSCで特定のChromeのタブをア...
-
VBA .Value=.Value ?
-
パソコン関連)何度消してもま...
-
Alt+P,Alt+NをPostmessageで送...
おすすめ情報