Excel VBAのAppActivateエラーを修正する方法

このQ&Aのポイント
  • Excel VBAのAppActivate関数を使用する際にエラーが発生しています。特に下のコードで発生しているようです。AppActivate RetValでエラーが発生するので、修正の方法を教えてください。
  • 上のコードでは、正常に動作していますが、下のコードではAppActivate RetValでエラーが発生しています。エラーが発生する原因として、Retvalに設定される値が正しくない可能性があります。具体的にはRetValの値を確認し、正しい値が設定されているかどうかを確認してください。また、RetValの値によってはAppActivate関数が機能しない場合がありますので、適切な値が設定されるように修正してください。
  • AppActivate関数は、指定したウィンドウをアクティブにするための関数です。RetValに設定される値は、Shell関数の戻り値であり、実行されるプログラムのプロセスIDを表しています。エラーが発生している場合、RetValに正しいプロセスIDが設定されていない可能性がありますので、プロセスIDが正しく設定されるように修正してください。
回答を見る
  • ベストアンサー

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

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

Reader9.0ではエラー出ないんですが、10.0では確かにエラーになりますね。 #Acrobat Instance Window? ただ、Shell関数の引数でvbNormalFocusを指定してますから、 そのままでもReader起動後アクティブになりませんか? つまり 'AppActivate RetVal この行をコメントアウトして実行してみてください。 ダメなら AppActivate sTxt & " - Adobe Reader" ..のようにキャプション指定とか。 それでもダメな場合は FindWindow や SetForegroundWindow などのWin32API関数を使う事になるのかな..と。

tubakiboy
質問者

お礼

(1)AppActivate RetValの行をコメントとする (2)AppActivate sTxt & " - Adobe Reader"とする の双方で正常に動作しました。 お教え大変にありがとうございました。

その他の回答 (1)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

こちら(Windows7 64bit & Excel2010 & adobeReader10.11)では TeraPad_SF でもWait処理を入れないと エラー 5 が発生しました。 で、AdobeReader_SF の方なんですが エラー5が発生。 end-u さんのようにアプリケーションタイトルを指定したら エラーにはなりませんでした。 Appactivate Stxt なぜ、RetValでエラーになるのか・・・というと タスクマネージャで見てみると、AcroRd32.exe *32 が二つ鎮座ましましていました。 もう片方のプロセスIDを返してくれたら・・・と思うのですが この辺はナゾです。

tubakiboy
質問者

お礼

nicotinism 様  周囲の状況をお教え頂き大変ありがとうございました。  また広範はご知識をお披露頂きました。  大変に役に立ちました。  

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

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

  • エクセル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

  • VB.netでパスワード変更

    下記のようなパスワードを変更するフォームをVB.netで作成したのですが、 実行すると、いつも異なるretValの値がかえってきて変更できません。 retValの値もよくわからない大きな数値がかえってくるのでどのようなエラーかも 判断つかず。 どこが間違っているかお分かりになる方いらっしゃいますでしょうか。 Public Class Form1 Private Declare Function NetUserChangePassword Lib "netapi32.dll" (ByVal Domain As String, ByVal User As String, ByVal OldPass As String, ByVal NewPass As String) As Long Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim retVal As Long Dim sDomain As String Dim sUser As String Dim sOldPass As String Dim sNewPass As String sDomain = "xxxxxxx" ←ここはサーバのIPアドレス sUser = TextBox1.Text sOldPass = TextBox2.Text sNewPass = TextBox3.Text retVal = NetUserChangePassword(sDomain, sUser, sOldPass, sNewPass) MsgBox(retVal) End Sub End Class

  • エクセル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ペコッ

  • 別のプロシージャに変数を渡したい

    別のプロシージャに変数を渡せなくて困っています。 下記の内容を実行させようとしています。 1.command1ボタンをクリックして計算を終えて 2.command2ボタンをクリックすると計算結果をクリップボードに入れてメモ帳に貼り付ける コードの概要は下記です。 【1.】////////////////////////////////////////////////////////////// Private Sub Command1_Click() Dim final as String 'いろいろと計算して最終的にfinalというstring型変数に文字列を得る。 final=計算結果 End Sub 【2.】////////////////////////////////////////////////////////////// Private Sub command2_click() Clipboard.Clear Clipboard.SetText final Dim memo As Long memo = Shell("Notepad.exe", vbNormalFocus) AppActivate memo, True 'アプリをアクティブにする SendKeys "^v" End Sub ////////////////////////////////////////////////////////////////////// 調べた結果,ByValがキーワードではないかと思い,Private Sub Command1_Click(ByVala final as string)など試してみましたができませんでした。 [余談] 1.のプロシージャ内で,クリップボードに入れてしまえばよいのですが,そうすると,1.の処理が終わってから,command2を押すまでの間にユーザがクリップボードを利用したら,このプログラムが成立しなくなるので,それは避けたいと思っています。

  • エクセルVBAのエラー

    よろしくお願いします。 VBA初心者のものです。 下記のコードを作成しましたが、 アプリケーション定義?がされていません というエラーが出ます。 わかりやすく教えていただけないでしょうか。 修正方法を教えてください。 0901名簿.xlsという名前の ファイルAのsheet1の 情報(ファイルBのセルBD1に日付4桁が記入されている)を ファイルBのセルA1の情報を元にファイルBのセルB1に抽出したい Sub 関数の挿入() Dim i As Long Dim あ As String Dim い As String Dim う As String あ="=VLOOKUP(A1,[" い=Range("BD1") う="名簿.xls]Sheet1!$F:$I,1,0)" For i = 2 To 50 Range("A" & i )= あ & い & う Next i End Sub

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

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

  • VBSのSendKeysでクリックができない

    音声認識アプリケーションからvbsを実行できるのですが、ここで一度だけマウスクリックしたい状況が出てきて困っています。 Dim WSHShell As Object Set WSHShell = CreateObject("Wscript.Shell") WSHShell.AppActivate "操作したいアプリケーション名" WSHShell.SendKeys "{TAB}" 'OK WSHShell.SendKeys "{ENTER}" 'OK WSHShell.SendKeys "{CLICK LEFT, 10, 10}" 'NG TABキーやENTERキーは動作するのですが、3番目のマウスクリックがExceptionといわれエラーになってしまいます。Sendkeysでマウスクリックを送信するにはどうしたらよいのでしょうか?ネットで調べたリファレンスだと上記のような書き方で良さそうなのですが・・・ 音声認識アプリケーションはドラゴンスピーチ11Jで、OSはWin 7 ProとWin 8、どちらも64ビットです。