• ベストアンサー
  • 困ってます

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

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

  • 回答数1
  • 閲覧数422
  • ありがとう数3

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

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

こんにちは。 最初に、こちらの話ですが、 > http://note.phyllo.net/?eid=1106208 >のサイトを参考にしました。 >VB6のサイトを見てるから駄目なのでしょうか? はっきりと用語は思い出せないので不正確な言葉ですが、うまく行かない理由として、VB6の場合は、Formがあって、そのFormの構造と、ExcelのWindowの構造とは仕組みが違うので、AppActivateが上手くいかない、というような説明だったと思います。 それで、Notepad.exeを前面に出すという、Excelのコードではいくつかあるのですが、以下が定番というか古典的のようですね。一応、Notepad.exeは、パスが通っているものとしています。今どきは、こういうコードはあまり書かないかもしれません。 '// Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd As Long) As Long Sub NotePad_Foreground()   Dim hwnd As Long   Shell "Notepad.exe", vbNormalNoFocus   hwnd = FindWindow("Notepad", vbNullString)   SetForegroundWindow hwnd End Sub

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

質問者からのお礼

やはりVB6ではエクセルと仕組みが違うからできないのですね。 ご提示いただいたコードで試してみたら出来ました! とてもわかりやすい説明ありがとうございます。

関連する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の使い方

    現在開いているエクセルファイルをアクティブにしたいです。 バージョンは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はアクティブにしたいです。

  • 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でエラーとなります。修正の方法をお教えください。

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

    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コードで起動だけではなく、手前に表示させるにはどうすればいいですか?

  • VBA "double"から0.1を引くと・・・

    エクセルVBAですが、double型で変数を定義し、-80を代入します。 そこから0.1ずつを引いていきます。すると、途中から桁がおかしくなってしまいます。 (注:別に-80からでなくても、どの値からでも、また、引いていっても足していっても、遅かれ早かれ どこかから桁がおかしくなってしまいます。) -80 -80.1 -80.2 …中略 -80.8 -80.8999999999999 -80.9999999999999 … といった感じです。 どうしてこのようになってしまうのでしょうか。 また、このようにならないためにはどうしたらよいのでしょうか。 いかにサンプルプログラムを載せます。 ------------------------------------------ Sub test() Dim test As Double Dim i As Integer test = -80 For i = 1 To 100 test = test - 0.1 Cells(i, 1) = test Next i End Sub ----------------------------------

  • エクセルVBAで開いている他のアプリにデータ転記

    Sub TEST_Sendkey01() は、エクセルVBAでメモ帳を立ち上げ、データを転記するコードです。 期待通りに作動します。 http://okwave.jp/qa6760498.html Sub TEST_Sendkey01()   Dim App As String, tmp As String   Dim Ret, myAr   Dim i As Long, n As Long   App = "notepad.exe"   MsgBox App & "を実行します"   Ret = Shell(App, vbNormalFocus)   If Ret Then     AppActivate Ret, True   Else     MsgBox "失敗しました。"     Exit Sub   End If   myAr = Split("ABC101,BBB202,CCC303", ",")   For n = 1 To 2     For i = 0 To UBound(myAr)       SendKeys myAr(i)       SendKeys "{TAB}"       Application.Wait Time:=Now + TimeValue("00:00:01")     Next i     SendKeys "{ENTER}"   Next n   AppActivate Application.Name, False   MsgBox "終了しました。"   AppActivate Ret End Sub 質問は、あらたにメモ帳を立ち上げるのではなく、すでに開いている既存のメモ帳(TESTNOTE.txt)のデータに追加でデータを転記する方法です。 下記のようにしてみましたが、  AppActivate "TESTNOTEtxt - メモ帳" の段階で「実行時エラー5 プロシージャの呼び出し、または引数が不正です」となってしまいます。 どのように記述すればよいのでしょうか? Sub TEST_Sendkey02()   Dim myAr   Dim i As Long, n As Long   AppActivate "TESTNOTEtxt - メモ帳"      myAr = Split("D11,E22,F33", ",")   For n = 1 To 2     For i = 0 To UBound(myAr)       SendKeys myAr(i)       SendKeys "{TAB}"       Application.Wait Time:=Now + TimeValue("00:00:01")     Next i     SendKeys "{ENTER}"   Next n   AppActivate Application.Name, False   MsgBox "終了しました。"   AppActivate "TESTNOTEtxt - メモ帳" End Sub

  • EXCEL VBA で他のアプリケーションを開く方法について

    EXCEL VBAで他のアプリケーションを開く方法について教えていただきたいことがあります。 現在開いているエクセルのブックと同じフォルダにある、"AAA"という名称のsqc形式のファイル(EAST社のSkyLink Ver9.0のコマンドファイルです)をVBAで開く。 SHELL関数で開くと思っていたのですが、 Sub Test() Dim MyPath As String, MyTask As Double MyPath = ActiveWorkbook.Path & "\" MyTask = Shell(MyPath & "AAA.sqc") SendKeys "%FO", True End Sub とすると 「プロシージャの呼び出し、または引数が不正です」 というメッセージが出てしまいます。 如何せんSHELL関数を使うのが初めてでして、色々調べても どうしても解決策にたどり着きません。 どうぞよろしくお願いいたします。

  • SendKeys "^V", True(貼り付け)のミス

    エクセルシートに設定したリアルタイム関数(楽天マーケットスピード)でデータを取得し、フィルターをかけてメモパッドに表示しています。   エクセルでクリップボードに格納したものを下記のプログラムで[Ctrl]+[V]キーを転送しています。 問題は[Ctrl]+[V]キーがしばしば他のアプリケーションのカーソルに転送されてしまいメモパッドがパスされてしまいます。 AppActivateが効かないのか分かりませんが対策を是非ご教示下さい。 Sub NotePad書き出し() Dim myPath As String dim y as long If nsw <> 0 Then GoTo 即貼り付け'メモ帳起動は一度だけ nsw = 1 myPath = ActiveWorkbook.Path & "\" 'メモ帳を起動する myID = Shell("Notepad.exe", vbNormalFocus) For y = 1 To 3000 'notePadが開く余裕を3秒間取る DoEvents Sleep 1 Next y 即貼り付け: '[ENTER]キーを転送して1行空ける SendKeys "{ENTER}", True 'メモ帳をアクティブにする AppActivate myID '[Ctrl]+[V]キーを転送してコピーした内容を貼り付ける SendKeys "^V", True 'コピーモードを解除する Application.CutCopyMode = False End Sub

  • 画像を開いてアクティブにしたい

    Sub マクロ1() Dim MyFileFullName As String MyFileFullName = "C:\Users\名刺.jpg" Shell "Rundll32.exe" & " Shimgvw.dll,ImageView_Fullscreen" & " " & MyFileFullName End Sub を実行すると、アプリケーションの裏側に開いてしまうのですが、 表側にする方法はありますか? Sub マクロ1() Dim MyFileFullName As String Dim i As Long MyFileFullName = "C:\Users\名刺.jpg" i =Shell "Rundll32.exe" & " Shimgvw.dll,ImageView_Fullscreen" & " " & MyFileFullName AppActivate i End Sub こうしようとすると、構文エラーになります。

  • エクセルVBAで他のアプリにデータ転記後の質問です

    以下は、エクセルVBAでメモ帳を立ち上げ、データを転記するコードです。 一応、作動します。 ところが、データ転記後、手動でエクセルシートに触らないと、あるいはメモ帳を終了しないと、MsgBox "終了しました。" がでてこないのです。 ノートパッドを終了させず、またエクセルをクリックしなくとも終了メッセージが出るようにするにはどうしたらよいのでしょうか? Thisworkbook.activateを入れてみてもだめでした。 Sub TEST_Sendkey()   Dim App As String, tmp As String   Dim Ret, myAr   Dim i As Long, n As Long   tmp = ActiveSheet.Name   App = "notepad.exe"      MsgBox App & "を実行します"   Ret = Shell(App, vbNormalFocus)   AppActivate Ret, True   myAr = Split("A11,B22,C33", ",")   For n = 1 To 5     For i = 0 To UBound(myAr)       SendKeys myAr(i)       SendKeys "{TAB}"       Application.Wait Time:=Now + TimeValue("00:00:01")     Next i     SendKeys "{ENTER}"   Next n   MsgBox "終了しました。"   Exit Sub End Sub よろしくお願いいたします。 (o。_。)oペコッ