こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

AppActivateの使い方

現在開いているエクセルファイルをアクティブにしたいです。
バージョンは2003です。

アクセスVBAから
Sub test()
Dim rc As Long
rc = Shell("C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE", 1)
AppActivate "aaa.xls"
End Sub

を実行すると、
新規にアプリケーションが開いて、空のBOOK1が表示されます。
本当は、aaa.xlsをアクティブにしたいのですがうまく出来ません。

aaa.xlsは既に開いている状態です。
aaa.xlsはデスクトップにあります。

http://officetanaka.net/excel/vba/statement/AppActivate.htm
を見ながらやってみたのですがうまく出来ません。

新たなアプリケーションは立ち上げたくないけど
aaa.xlsはアクティブにしたいです。

投稿日時 - 2012-12-05 20:12:44

QNo.7831372

暇なときに回答ください

質問者が選んだベストアンサー

Win7 + Office2010 では下記のような感じで動きました。
aaa.xls を開いてなければ開き、
開いていたら、そのExcelアプリを最前面にして、
aaa.xls をアクティブにしてます。
こちらでは、aaa.xlsを単独で開いていた場合に、
AppActivateでは、プロシージャの呼び出し、または引数が不正です
になってしまいます。
環境に依存する部分が有りそうなので下記でも不十分かもしれません。

Sub てすと()
Dim myXL As Object
Dim myXLPath As String
Dim myXLName As String
Dim WSH As Object

Set WSH = CreateObject("WScript.Shell")
myXLPath = WSH.specialfolders("desktop")
myXLName = "aaa.xls"

If Dir(myXLPath & "\" & myXLName) = "" Then
MsgBox myXLPath & "\" & myXLName & " は見つかりません"
Set WSH = Nothing
Exit Sub
End If

Set myXL = GetObject(myXLPath & "\" & myXLName).Parent
myXL.Visible = True

If myXL.activeworkbook.Name = myXLName Then
myXL.workbooks(myXLName).Activate
Else
myXL.workbooks.Open (myXLPath & "\" & myXLName)
End If

myXL.UserControl = True
Set myXL = Nothing: Set WSH = Nothing
End Sub

投稿日時 - 2012-12-06 14:24:04

お礼

ありがとうございます。

投稿日時 - 2012-12-11 20:46:27

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

すでに、aaa.xlsが開いているなら、質問のコードで、新しいExcelも開くが、aaa.xlsにフォーカスが移って、アクティブになっているはずです。ただし、フォーカスは移るが、最前面には表示されない。

aaa.xlsが開いていないなら、次のコードでaaa.xlsが開いてアクティブになり前面に表示されるでしょう。

rc = Shell("C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE C:\Users\(ユーザー名)\Desktop\aaa.xls", 1)

質問からすれば、
すでに、aaa.xlsが開いているのをアクティブにして前面に表示したいだけのようだから、ShellもAppActivateもいらないで、単に、

Windows("bbb.xls").Activate

でしょう。

投稿日時 - 2012-12-05 22:41:20

お礼

ありがとうございます。

投稿日時 - 2012-12-11 20:46:25

ANo.1

>新規にアプリケーションが開いて、空のBOOK1が表示されます。
>本当は、aaa.xlsをアクティブにしたいのですがうまく出来ません。
>aaa.xlsは既に開いている状態です。

 それでしたら、
Dim rc As Long
rc = Shell("C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE", 1)
は不要で、

Sub test()
AppActivate "aaa.xls"
End Sub

だけでよいはずですが。。。

投稿日時 - 2012-12-05 21:14:30

お礼

ありがとうございます。

投稿日時 - 2012-12-11 20:46:23

あなたにオススメの質問