• ベストアンサー
  • 暇なときにでも

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はアクティブにしたいです。

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数3474
  • ありがとう数4

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

  • ベストアンサー
  • 回答No.3

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。

関連するQ&A

  • AppActivate

    エクセルで Sub test() Dim path As String Dim taskID As Double path = "C:\Windows\System32\notepad.exe" taskID = Shell(path) Call AppActivate(taskID) End Sub を実行しても、アクティブ(前面表示)されません。 シートにコマンドボタンを設置して、 Private Sub CommandButton1_Click() test End Sub としても、エクセルの後ろ側に開いてしまいます。 http://note.phyllo.net/?eid=1106208 のサイトを参考にしました。 VB6のサイトを見てるから駄目なのでしょうか? エクセルでやりたいです。

  • AppActivate Appではなぜだめなのでし

    エクセルファイルをvbaで開いて全画面表示したいのですが Sub Sample1() Dim App As Excel.Application Dim xlBook As Workbook Dim MyFileName As String MyFileName = "D:\test.xls" Set App = CreateObject("Excel.Application") Set xlBook = App.Workbooks.Open(MyFileName, ReadOnly:=True) App.Visible = True AppActivate App 'エラー発生 End Sub このコードだと AppActivate Appでエラーが発生します。 たまにシステムの裏側で開いてしまうので 常に前面に持ってこれるようにしたいのですが AppActivate Appではなぜだめなのでしょうか?

  • EXCELをもう一つ立ち上げたい

    マクロを使用して sub 関数1 shell "C:\Program Files\Microsoft Office\Office\EXCEL.EXE", 1 end sub と記述すれば EXCELがもう一つたちあがります。 また、 sub 関数2 Workbooks.Open FileName:="C:\MyDocuments\aa.xls" end sub と記述すればMyDocments配下のaa.xls というファイルがたちあがります。 そこで、ここから本題なのですが、 aa.xlsというEXCELファイルをもう一つのEXCELに立ちげる方法を教えて頂けませんでしょうか? よろしくお願いします。

その他の回答 (2)

  • 回答No.2
  • okormazd
  • ベストアンサー率50% (1224/2411)

すでに、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 でしょう。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。

  • 回答No.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 だけでよいはずですが。。。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。

関連するQ&A

  • エクセルをアクティブにしたい

    エクセルとアウトルックを立ち上げた状態でエクセルのシートにコマンドボタンを設置して、 ***************************************************** Private Sub CommandButton1_Click() '参照設定:Microsoft Outlook ○.○ Object Library Dim ObjOut As Outlook.Application Dim OutMail As MailItem Dim myNaSp As Namespace Dim FolderName As String Dim rc As Long Set ObjOut = GetObject(, "OutLook.Application") Set OutMail = ObjOut.CreateItem(olMailItem) Set myNaSp = GetNamespace("MAPI") FolderName = myNaSp.PickFolder MsgBox "「" & FolderName & "」が選択されました。" rc = Shell("C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" & ActiveWorkbook.FullName, 1) AppActivate rc Set myNaSp = Nothing End Sub ***************************************************** をすると、アウトルックの「フォルダー選択」ダイアログが開くのですが、 フォルダを選択した後に、エクセル画面に戻りません。 手作業でエクセル画面に戻す(アクティブ)にするのですが Shellの部分で、「ファイルが見つかりません」となります。 rc = Shell("C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE", 1) に変更すると、エラーにはならないのですが、 新規のブックが立ち上がってしまいます。 エクセルのシートのボタンを押したら、アウトルックのフォルダ選択画面を出して 選択後、元のエクセルシートをアクティブにさせたいのですがどうすればいいでしょうか? Dim xlApp As Object Set xlApp = CreateObject("Excel.Application") AppActivate xlApp を追加してもダメでした。 ご教授よろしくお願いします。

  • VBからExcelクローズ検知

    VBで作成したaaa.exeの中でエクセルファイルbbb.xls、ccc.xlsを呼び出しています。 taskIdB = Shell("C:\Program Files\Microsoft Office\Office10\excel.exe C:\bbb.xls", vbHide) taskIdC = Shell("C:\Program Files\Microsoft Office\Office10\excel.exe C:\ccc.xls", vbHide) bbb.xls、ccc.xlsともにWorkbook_Openイベントで自動的にVBAが起動し、処理が終了すると自分自身を クローズするようになっています。 ここで問題になるのが、ccc.xls は bbb.xlsの処理完了を待ってから起動したいのですが、連続的に起動してしまう点です。 aaa.exeのなかで、bbb.xlsの終了を検知するなど、良い解決方法があればお教え下さい。 WindowsはXp pro.、VBは6.0、Excelは2002を使用しています。 よろしくお願いいたします。

  • 別枠にアプリケーションを立ち上げてファイルをひらき

    OSはXPで Officeは2003です。 Book1xlsを開いています。 それとは別のエクセルアプリケーションでBook2.xlsを開きたいのですが Book2.xlsをダブルクリックすると、 Book1xlsと同じアプリケーション内に開いてしまいます。 なので今はスタート→すべてのプログラム →Microsoft Office→Microsoft Office Excel 2003で 別枠に先にアプリケーションを立ち上げて 新規に開かれるBook1を×で消して そこにBook2.xlsをドラックして開いています。 Book2.xlsをダブルクリックでも別枠で開く方法があれば教えてください。 VBAは使いたくないです。

  • Shell関数を使って、ファイル名を指定して開くこ

    オフィス2003です。 Sub サンプル1() Dim strExcelPath As String strExcelPath = "C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" Shell strExcelPath, 1 End Sub なら空のエクセルアプリケーションが開けます。 でも、 Sub サンプル2() Dim strExcelPath As String strExcelPath = "D:\ファイル.xls" Shell strExcelPath, 1 End Sub だと、 “プロシージャの呼び出し、または引数が不正です。“ と言うエラーになります。 Shell関数を使って、ファイル名を指定して開くことはできないのでしょうか?

  • セルのファイルを起動したい

    セルに入っているファイル名を開きたいと考えています。 ファイル名はパス付きで入っています。 拡張子が.docの時はワードで、.xlsの時はエクセルで、.pdfの時はアクロバットで、その他該当するアプリケーションを立ち上げてそのファイルを開き、そしてパス名だけの時はエクスプローラで該当ディレクトリを開きたいと思っています。 拡張子を見てワード、エクセル、アクロバットまでは立ち上げるVBAまでは出来ました。 エクスプローラが分かりません。 どなたか教えていただけないでしょうか。 またファイル名が入っている場合、現在は直接アプリケーションを起動するやり方をとっていますが、拡張子から自動的に適切なアプリを立ち上げることはできないでしょうか。 よろしくお願い申し上げます。 現在の方法: Sub test() Shell "C:\Program Files\Microsoft Office\OFFICE11\WinWord.exe " & _ "c:\test.doc", vbMaximizedFocus End Sub

  • Excelのマクロの命令文を教えてください

    EXCEL2002です。 仮にAAA.XLSを開いて書込をしその内容をマクロでWTTOTAL.XLSに転記し又AAA.XLSに戻ります。ここまでの進行は何とかマクロが作れました。その後AAA.XLSより終了マクロを下記のように作りました。 Sub SHUURYOU() Windows("WTTOTAL.XLS").Close SAVECHANGES:=True ActiveWorkbook.Save Application.Quit End Sub この場合うまく働いてくれますが時にAAA.XLSだけで作業が終わることがあります。するとWTTOTAL.XLSが開いていないのでエラーになります。WTTOTAL.XLSが開いていてもCLOSEの時でもかのマクロを働かすにはどのような命令文を何処に付け加えればいいのでしょうか。 よろしくお願いします。

  • 【Excel】「リンクを更新する」のダイアログを表示させないようにするには

    教えて下さい! AAA.xlsとBBB.xlsというファイルがあります。 AAA.xlsを開くと自動的にBBB.xlsが開くようになっています。 BBB.xlsにはグラフがあり、AAA.xlsからデータを読んでいるため「リンクを更新しますか?」というダイアログが表示されてしまいます。 これを表示させないようにするにはどういう記述をしたらよろしいでしょうか? AAA.xlsを開く際にBBB.xlsも開くように、AAA.xlsに以下のように記述してあります。 ================================================================ Sub Auto_open() Workbooks.Open Filename:=ThisWorkbook.Path & ("\BBB.xls") Workbooks("AAA.xls").Worksheets("Sheet1").Activate End Sub ================================================================ その記述に付け加える形になると思うのですが。 宜しくお願い致します。

  • EXCEL2007でワークブックのクローズ処理

    教えてください。 EXCEL2003形式ファイルのVBAに、 Private Sub Workbook_BeforeClose(Cancel As Boolean) ThisWorkbook.Close SaveChanges:=False End Sub を記述してファイルを保存します。(作成は、EXCEL2003で保存します。) (仮にBook1.xlsとします。) このファイル(Book1.xls)をEXCEL2007で開きます。 このとき、別のファイル(仮にBook2.xlsとします。形式は、EXCEL2003です)をEXCEL2007で開きます。 で、Book1.xlsを×ボタンで終了すると、 EXCEL2007が異常終了します。 環境依存でしょうか? PCの環境に、EXCEL2003とEXCEL2007が混在しています。

  • Sub Auto_Open() 実行されない

    Excel2003VBAについて教えてください。 あるBookから、VBAの”Workbooks.Open”で別のブックを開くように作ってあるのですが、開かれるBookのほうに”Sub Auto_Open()”で特定のシートをアクティブにするように作っています。 普通にBookを開くとSub Auto_Open()は実行されますが、”Workbooks.Open”では実行されません。 ”Workbooks.Open”で開いたときに、特定のシートがアクティブになればそれでよいのですが。 よろしくお願いします。

  • レジストリエディタを起動させて手前に表示させたい

    VBE画面から Sub test() Dim i As Long i = Shell("C:\WINDOWS\regedit.exe") End Sub を実行するとレジストリエディタを起動できるのですがアクティブ(前画面)になりません。 Sub test() Dim i As Long i = Shell("C:\WINDOWS\regedit.exe") AppActivate i End Sub これにしたも同じく全画面になりません。 ただ、一度起動した後に再度このコードを実行すると、 プロシージャの呼び出し、または引数が不正です。(Error 5) と言うエラーになりますが、1回目に開いたレジストリエディタがアクティブになります。 vbaコードで起動だけではなく、手前に表示させるにはどうすればいいですか?