• 締切済み

wshで既に立ち上がっているアプリにアクセスする

こんにちは、 wshで既に立ち上がっているapplicationにアクセスする方法ってあるのでしょうか。 私の知識では、createObjectでapplicationを起動させてアクセスすることしかできません。 csv書類などをwsf書類にdropdownさせて、それをexcelで展開して加工する。 というscriptを作成しているのですが、 複数のcsvを同時ではなく数回に分けて処理をする場合に いちいち新しいタスクを起動させずに、 同じapplication内で書類を起動させたいというのが趣旨です。 どなたかご教授いただけますでしょうか。

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

wshなのにjavascript(jscript)で処理ですか? GetObjectやAppActivateがつかえるかもしれません。 ただしオブジェクトをつかめなかったときにcreateしてやる 処理をいれる必要があるでしょう。 以下一例。 Set sWSH = CreateObject("Wscript.Shell") Set oXL = GetObject(,"Excel.Application") while (errcount<9) and (err.number =429) errcount=errcount+1 err.clear Set oXL = GetObject(,"Excel.Application") wend err.clear if errcount=9 then set oXL= CreateObject("Excel.Application") else sWSH.AppActivate("Microsoft Excel") end if

monnomest
質問者

補足

回答ありがとうございます。 getObjectをmsdnで参照してみたのですが、vbsのコード例しか載っていません。やっぱりvbsでやるべきでしょうか。 VBAはよく使うのですが、wshはjscriptで書いています。 jscriptで、getObjectをcreateobjectと同じように扱ってみたのですが、errorが出ます。どこか参考になる頁をご存知ないでしょうか?

関連するQ&A

  • HTMLにWSHを組み込む

    HTMLにWSHのコードを書く事は可能ですか? たとえば、ページ開くとNotePad.EXEが起動するようにしたいのですが 以下のような書き方をすると WScriptが宣言されていません。 とエラーになります。 <HTML> <HEAD> <TITLE>起動のテスト</TITLE> </HEAD> <meta http-equiv="Content-Script-Type" content="text/JavaScript"> <BODY> <SCRIPT LANGUAGE="JavaScript"> var title = "メモ帳"; var wsh = WScript.CreateObject("WScript.Shell"); wsh.Run( "NotePad.EXE" ); </SCRIPT> </BODY> </HTML> いい案がある方教えてください。

    • ベストアンサー
    • HTML
  • WSH(VBScript)でアプリケーションを停止したい

    こんにちは。 OSはWIN2K、WSH5.6を使用しています。 WSH(VBScript)で「c:\abc.exe」という アプリケーションを起動してます。 このアプリケーションは複数起動できな いためパラメータを変え連続3回Runメ ソッドで起動しました。 しかし一番最初に起動したものが落ちて いないため2本目以降は起動しません( 1本終わったら閉じるボタンでそのアプ リケーションを終了させると2本目以降 も起動します)。 タスクマネージャーのプロセスにも abc.exeがでていますので2、3本目の 起動前にこれを停止させるスクリプトを 記述したいのですが、どなたかご教授い ただけますでしょうか。 よろしくお願いいたします。

  • WSH(Excel出力)の同時実行数の制限

    WSHでExcel出力処理を行っているのですが、 同時実行数が30を超えると、Excelが不安定になるようで、  Set objBook = objExcelApp.Workbooks.Open("C:\xxx\zzz.xls", 0, False) の行で、  エラー:WorkbooksクラスのOpenプロパティを取得できません。  コード:800A03EC  ソース: Microsost Office Excel というエラーが発生して異常終了してしまうのです。 同時実行数の上限など、また、それ以外の原因について、 ご存知の方がいらっしゃいましたら、コメント頂ければ幸いです。 ちなみに、同時実行数が30未満の場合は、正常終了するので、 コードの内容には、問題ないと思っております。 Excelのバージョンは、2003で、ファイルの構成は、 wsfファイル(yyy.wsf) vbsファイル(wsh_excel.vbs)の2ファイルを配置し、 以下のような形で、実行しています。 Set WshShell = Server.CreateObject("WScript.Shell") Set objBatch = WshShell.Exec(strCmd)  ※ strCmdには、以下のような値が設定されます。     cmd.exe wscript.exe "C:\xxx\yyy.wsf" ■ yyy.wsfの内容 <?xml version="1.0" encoding="shift_jis" ?> <job id="zzz"> <script language="VBScript" src="wsh_excel.vbs"/> <script language="VBScript">  Call Excel_Main() </script> </job> ■ wsh_excel.vbsの内容(抜粋) Sub Excel_Main()  Set objExcelApp = Wscript.CreateObject("Excel.Application")  Set objBook = objExcelApp.Workbooks.Open("C:\xxx\zzz.xls", 0, False)     :     : End Sub

  • WSHで、EXCELにワークシートをCSVから読み込んで追加したい。

    WSHを使って、EXCELを起動して、既存のCSVファイルからデータを読み込みたいのですが、複数のCSVから読み込むなどして、同じワークブックの新しいシートにCSVから読み込んだデータを追加していきたいのですが、どうやればよいのかわかりません。 下のソースのようにしたのですが、そうすると、別のワークブックとして開いてしまうので、わからなくなってしまいました。お願いします。 set Exl=CreateObject("Excel.Application") Exl.Visible=True Exl.workbooks.add Exl.workbooks.OpenText "c:\data.csv"

  • ACCESS2000のマクロについて質問です。

    タイトルの通り、ACCESS2000のマクロで アプリケーションの実行で困っています。 ACCESSで作成したdb1.mdbでCSVファイルを取り込んで 加工したいと思っています。 しかし、CSVファイルがLAN内の他のPCにあるので 取り込みができませんでした。 そこで、CSV_COPY.DATというMS-DOSバッチファイル を作成して取り込み前に指定したフォルダにCSVファイルを コピーするというものを作りました。 できればdb1.mdbのフォームのボタンをクリック 1回で   1、CSV_COPY.DATの実行   2、マクロでCSVファイルのインポート    (多数のクエリで加工) を行いたいのでぜひ、アプリケーションの実行 のコマンドラインの指定について教えてください。 ちなみに、以前他の方が質問された内容・回答を 参考にして、   c:\windows\system32\cmd.exe"d:\csv_copy.dat" として試してみましたがだめでした。 ※windowsXPを使用しています。 お手数ですが、みなさんよろしくお願いします。

  • VBからaccess UserControl

    vb.netから 【VB】-------------------------------------------- Sub AccOpen() Dim AccApp As Access.Application Dim MyPath As String MyPath = "○○.accdb" AccApp = CreateObject("Access.Application") AccApp.OpenCurrentDatabase(MyPath) AccApp.Visible = True AccApp.UserControl = True End Sub -------------------------------------------------- でアクセスのファイルを開いているのですが、 アクセスの標準モジュールで 【access】-------------------------------------------- Sub test() MsgBox "The user started Access: " & Application.UserControl End Sub ---------------------------------------------------- を実行すると、Trueが返ってくるのですが、正しくはFalseなのではないでしょうか? アクセスのヘルプをみると、 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・  True 現在のアプリケーションはユーザーによって起動されました。 False 現在のアプリケーションは、オートメーションを使って他のアプリケーションによって起動されました。 と書かれています。 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・  AccOpenはvbで実行しているので、 「オートメーションを使って他のアプリケーションによって起動されました。」 に該当するのではないでしょうか?

  • DOS画面起動時のパチパチを防ぐには

    VBAからDOSコマンドを起動した時、画面が一瞬パチパチ してしまいますが、このパチパチを防ぐ方法はありませんか? よろしくお願いします。 下記コードは、C:\test配下のCSVファイルを1つにまとめて、 C:\testにall.txtとして格納するものです。 その際、DOSコマンドを起動しました。 Set WSH = CreateObject("Wscript.Shell") Cmd = "COPY C:\kamakura\*.csv C:\kamakura\all.txt" Set wExec = WSH.Exec("%ComSpec% /c " & Cmd) Do While wExec.Status = 0 DoEvents Loop ' Set wExec = Nothing Set WSH = Nothing

  • Windowsサーバ+Perl +アプリ実行は可能?

    Perlでコマンドを実行したいとき、 Linux/Unixサーバのなら system("コマンド名"); と、できるはずですが、 Windowsサーバ+Perlの場合、サーバにインストールされている プログラム/アプリケーションを実行したりすることは可能でしょうか。 具体的なイメージは ユーザーがブラウザからアクセスすると CGIは、サーバ側にインストールされているExcelを起動して マクロを実行、データをCSV形式ファイルに保存。 CGIは保存したCSV形式のファイルを展開し ブラウザ上で表示。 ということは可能ですか? もし可能ならPerlの書式を教えていただければ うれしいですー。

    • ベストアンサー
    • CGI
  • エクセルから現在起動しているアクセスファイルをアクティブにしたい

    現在エクセルとアクセスを開いています。 エクセルマクロで現在開いているアクセスをアクティブにしたいのですがうまくいきません。 Sub アクセスをアクティブにする() Dim app As Object Set app = CreateObject("Access.Application") app.Application.Visible = True app.Visible = True End Sub これを実行すると新たに空のアクセスアプリケーションが開きます。 (app.Application.Visible = True)を抜いても同じです。 現在起動中のアクセスファイル(○○○.mdb)をエクセルからアクティブにするにはどうすればいいのでしょうか? ご教授よろしくお願いします。

  • WSHでリモートスクリプト起動時エラー

    □やりたいこと  2台のXP環境で、WSHを使用してリモートスクリプトを実行させたい  (ローカルサーバAからリモートサーバBでJBSを実行) □事象  サーバAのVBS(rmt_local.vbs)を起動したところ、  CreateScript実行時に以下のエラーとなります。  【エラーメッセージ】  429 ActiveX コンポーネントはオブジェクトを作成できません。 □質問  原因と対応方法を知りたい。  下記の設定以外になにが影響しているのか? □環境 【ローカルサーバA】  OS:WindowsXP Professional Version 2002 SP3  WSH:Version5.8  ドメイン:WORKGROUP 【リモートサーバB】  OS:WindowsXP Professional Version 2002 SP3  WSH:Version5.8  ドメイン:WORKGROUP 【スクリプト配置】  ローカルサーバAのC:\TESTにのみスクリプト(1)と(2)を格納している  リモートサーバBにはC:\TESTのフォルダのみ作成している □設定関連  ●ローカルとリモートで設定   ファイアウォール設定(DCOM、wsdcript.exeを通す)   ドメインプロファイルの設定でリモート管理の例外を許可   実行ユーザをAdministratorsグループに追加  ●ローカルのみ設定   COMセキュリティのアクセス許可で「ANONYMOUS LOGIN」のリモートアクセスを許可  ●リモートのみ設定    レジストリ:HKEY\LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa         の下のforceguest(文字列値)に0を設定   レジストリ:HKEY\LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Script Host\Settings         の下にRemote(文字列値) を作成して1を設定   COMセキュリティのアクセス許可でEveryoneグループの「リモートアクセス」を許可   COMセキュリティの起動許可でAdminstratorsグループの「リモートからの起動」と   「リモートからのアクティブ化」を許可 ================================================================ □スクリプト(1) 【rmt_local.vbs】 Option Explicit On Error Resume Next Dim objWshCtrl ' WshController オブジェクト Dim strRemotePC ' リモートのコンピュータ名 Dim strScript ' 実行するスクリプトファイル Dim objExecCmd ' 実行コマンド情報 Set objWshCtrl = WScript.CreateObject("WshController") If Err.Number = 0 Then strRemotePC = "B" strScript = "rmt_remote.vbs" Set objExecCmd = objWshCtrl.CreateScript(strScript, strRemotePC) If Err.Number <> 0 Then Set objExecCmd = Nothing WScript.Echo "エラー: CreateScript " & Err.Description WScript.Echo "異常終了しました。" Else WScript.Echo strRemotePC & " で " & strScript & " を実行します。" objExecCmd.Execute Do While objExecCmd.Status = 1 WScript.Sleep(100) Loop WScript.Echo "正常終了しました。" End If Else WScript.Echo "エラー: CreateObject " & Err.Description End If Set objExecCmd = Nothing Set objWshCtrl = Nothing ================================================================ □スクリプト(2) 【rmt_remote.vbs】 Option Explicit On Error Resume Next Dim objFSO ' FileSystemObject Dim objFile ' ファイル書き込み用 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("C:\TEST\test.log", 8, True) objFile.WriteLine Now() objFile.Close Set objFile = Nothing Set objFSO = Nothing

専門家に質問してみよう