AppActivateの使い方

このQ&Aのポイント
  • エクセルファイルをアクティブにする方法についての質問です。
  • AppActivateというVBAの関数を使用してアクティブにしたいエクセルファイルを指定します。
  • ただし、新たなアプリケーションを立ち上げることはなく、既に開いているエクセルファイルをアクティブにする方法について知りたいです。
回答を見る
  • ベストアンサー

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

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答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

IKLCQWBMF
質問者

お礼

ありがとうございます。

その他の回答 (2)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.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 でしょう。

IKLCQWBMF
質問者

お礼

ありがとうございます。

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答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 だけでよいはずですが。。。

IKLCQWBMF
質問者

お礼

ありがとうございます。

関連するQ&A

  • 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ではなぜだめなのでしょうか?

  • 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のサイトを見てるから駄目なのでしょうか? エクセルでやりたいです。

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

    エクセルとアウトルックを立ち上げた状態でエクセルのシートにコマンドボタンを設置して、 ***************************************************** 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 を追加してもダメでした。 ご教授よろしくお願いします。

  • 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関数を使って、ファイル名を指定して開くことはできないのでしょうか?

  • Excel vbs AppActivate エラー

    Sub TeraPad_SF() 'Keyboard Shortcut: Ctrl+Shift+Q Dim RetVal As Integer Dim sA As String Dim sP As String Dim sV As String Dim sTxt As String sV = ActiveCell.Value sTxt = Left(sV, 1) & ".txt" '開くファイル名 sA = "D:\WebCamRegistor\txtFolder\" & sTxt '実行するプログラムのパス sP = "C:\Program Files\TeraPad\TeraPad.exe " RetVal = Shell(sP & sA, 1) If RetVal = 0 Then MsgBox "起動に失敗しました" AppActivate RetVal SendKeys "%SF" & sV, True End Sub '現在セルの値でAdobeReaderでxx.pdfを検索する Sub AdobeReader_SF() 'Keyboard Shortcut: Ctrl+Shift+Q Dim RetVal Dim sA As String Dim sP As String Dim sV As String Dim sTxt As String sV = ActiveCell.Value sTxt = Left(sV, 1) & ".pdf" '開くファイル名 sA = "D:\WebCamRegistor\pdfFolder\" & sTxt '実行するプログラムのパス sP = "C:\Program Files\Adobe\Reader 10.0\Reader\AcroRd32.exe " RetVal = Shell(sP & sA, 1) If RetVal = 0 Then MsgBox "起動に失敗しました" Application.Wait Now + TimeSerial(0, 0, 2) AppActivate RetVal SendKeys "^F", True End Sub Excel VBA で上は正常に動作しますが、下はAppActivate RetValでエラーとなります。修正の方法をお教えください。

  • VBAでフリーソフトを起動する事は可能でしょうか?

    Sub Sample1() Dim rc As Long rc = Shell("notepad.exe", vbNormalFocus) If rc = 0 Then MsgBox "起動に失敗しました" End Sub でメモ帳は開けるのですが、 QR Code Editorというソフトを入れていて、 それをVBAで開きたいのですがどうすればいいでしょうか? QR Code Editorは、 "C:\Program Files (x86)\Psytec\QR Code Editor\PsQREdit.exe" に入っています。 Sub Sample1() Dim rc As Long rc = Shell("PsQREdit.exe", vbNormalFocus) End Sub にすると、ファイルが見つかりません。 (Error 53)になってしまいます。 ご教授よろしくお願いします。

  • Access2000vbaで、shell関数で起動させたExcellを終了する方法を教えてください。

    Access2000vbaで、shell関数で起動させたExcellを終了する方法を教えてください。 以下のように、shell関数で、既存のExcelファイルを起動させました。 どうすれば、Excelファイルを終了できますか? 宜しくお願いします。 Dim fl_name As String fl_name = "C:\XE2.xls" Shell "C:\Program Files\Microsoft Office\Office\EXCEL.EXE " & fl_name, vbNormalFocus

  • GetWindowText、GetActiveWindowについて

    こんばんは。よろしくお願いします。 まずは以下をご覧ください。 Excel VBA です。 Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub Sample() Dim rtn, rtn2 As Long Dim Name As String Dim Leng As Long Dim ReturnValue ReturnValue = Shell("CALC.EXE", 1) AppActivate ReturnValue Sleep 500 Name = String(250, Chr(0)) Leng = Len(Name) rtn = GetActiveWindow() rtn2 = GetWindowText(rtn, Name, Leng) Debug.Print Name End Sub これを実行しても、イミディエイトウインドウに「電卓」は出ません。 エラーもありません。 なぜなのでしょうか?

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

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

  • 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を使用しています。 よろしくお願いいたします。

専門家に質問してみよう