VBAで共有フォルダにあるエクセルファイルを使用しているPCのプログラムを起動させる方法

このQ&Aのポイント
  • VBAで共有フォルダにあるエクセルファイルから、使用者のユーザ名を含んだパスを取得し、そのパスを使用してプログラムを起動させる方法はありますか?
  • VBAのWScript.Networkオブジェクトを使用して、実行しているエクセルファイルを開いているユーザ名を取得することができます。共有フォルダにあるエクセルファイルからユーザ名を取得し、それを用いてプログラムを起動させることができます。
  • VBAで共有フォルダにあるエクセルファイルを使用しているPCのユーザ名を取得し、それに基づいてプログラムを起動させる方法はあります。WScript.Networkオブジェクトを使用して実行しているエクセルファイルを開いているユーザ名を取得し、そのユーザ名を含んだパスを生成することで実現できます。
回答を見る
  • ベストアンサー

vba ローカルのプログラム呼び出し

共有フォルダにある共有エクセルファイル(マクロ入)から そのファイルを使用しているPCにはいっているプログラムを起動させたいです。 使用者たちのパスはほぼ共通ですが、パスの一部に使用者のユーザ名が入っていて そこは使用している人に合わせて変えなければなりません。 どうするのが一番簡単でしょうか。 とりあえずユーザを取って、そのほかの共通のパスをくっつけて 絶対パスで指定しようと思っているのですが この案でいいのでしょうか? vbaで以下を実行すると、 ファイルを実行しているユーザ名がとれるのか、ファイルがおいてあるPCのユーザ名を取るのか、わかりません。(テストしたいのですが、現在サーバーがなくできません) Set objNetWork = CreateObject("WScript.Network") 'ユーザ名 Debug.Print "UserName = " & objNetWork.UserName ご存知の方、教えて下さい。

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

ネットワーク上から見た共有フォルダへのアクセスを行うのであればコンピューター名になります。 (\\pcName\共有フォルダ名\プログラムファイル名.exe等) Dim objNetWork As Object Dir pcName As String Dir path As String Set objNetWork = CreateObject("WScript.Network") pcName = objNetWork.ComputerName path = "\\" & pcName & "\共有フォルダ名\プログラムファイル名.exe" 実行者のPC(ユーザーフォールダ内)を参照するのであれば、ユーザー名になります。 (C:\Users\userName\Documents\プログラムファイル名.exe等) Dim objNetWork As Object Dir userName As String Dir path As String Set objNetWork = CreateObject("WScript.Network") userName = objNetWork.UserName path = "C:\Users\" & userName & "\Documents\プログラムファイル名.exe"

monque
質問者

お礼

WOOOOOW!! 勉強になります!ありがとうございます!!

その他の回答 (1)

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

No1訂正です。 型宣言部の2行分 Dir→Dim 失礼しました。

関連するQ&A

  • VBScript による疎通確認

    今、以下のVBScriptを使い2台のPCサーバへ成功の監査としてログイン・ログオフ記録をアプリケーションログに書き込んでいます。しかし、このVBScriptでは、2台のPCサーバの生死を判断することは出来ず、ダウンしているPCサーバだろうがアクセスします。そのため、ログイン・ログオフする度にエラーポップが出てしまいます。 そこで、このVBScriptに疎通確認し判断したのち、生きているPCサーバへのみアクセスするようにしたいのですがどのようにコードを組めば良いのか解りません。ご教授お願いします。 ログインスクリプト Const AUDIT_SUCCESS = 8 Set objShell = WScript.CreateObject("WScript.Shell") Set objNetwork = WScript.CreateObject("WScript.Network") strMsg = objNetwork.UserName + " logon " objShell.LogEvent AUDIT_SUCCESS, strMsg, "\\マシン名1" objShell.LogEvent AUDIT_SUCCESS, strMsg, "\\マシン名2" ログオフスクリプト Const AUDIT_SUCCESS = 8 Set objShell = WScript.CreateObject("WScript.Shell") Set objNetwork = WScript.CreateObject("WScript.Network") strMsg = objNetwork.UserName + " logoff " objShell.LogEvent AUDIT_SUCCESS, strMsg, "\\マシン名1" objShell.LogEvent AUDIT_SUCCESS, strMsg, "\\マシン名2"

  • VBA ネットワーク上のファイルでカレントフォルダを取得するには?

    VBA ネットワーク上のファイルでカレントフォルダを取得するには? VBA超初心者でネットで色々調べて、ところどころコピーしながらプログラムを作っています。 ローカルのPCでは問題なく動くまでになったのですが、実際にはネットワーク上の共有サーバで実行したいのですが、ネットワーク上ではカレントパスがうまく設定できていないようで、動きません。 CreateObject("WScript.Shell").CurrentDirectory = ThisWorkbook.Path というコードでVBAが置いてあるフォルダをカレントディレクトリに設定するようにしています。 どのようにしたらネットワークサーバで動くようになりますか?

  • プリンターの追加

    プリンター:RICHO IPSio NX750 RPCS を、WSHにて追加したいのですが、 うまくいきません。 ポートは、Standard TCP/IP Portになります。 以下のWSHを実行すると、 プリンター名がありません、とのエラー がでます。 Set objNetwork = WScript.CreateObject("WScript.Network") objNetwork.AddWindowsPrinterConnection "IP_133.197.52.194" よろしくお願いします。

  • 現在共有しているユーザ全員の名前をVBAで取得する

    現在共有しているユーザ全員の名前をVBAで取得することは可能でしょうか? PC_Aの共有フォルダに入っているMDBファイルを AさんとBさんで共有(二人共開いている)しているとき Debug.Printなどにユーザ名を表示したいのですがどうすればいいでしょうか? ご教授よろしくお願いします。

  • net useのユーザー名を変数で通したい

    Accessの超初心者です。 Accessでフォームとテーブルを2つのファイルに分け、テーブルのmdeファイルはユーザー認証付の共有フォルダ(NAS)上に置き、フォームのmdbファイルは使用者数名に配布し、リンクテーブルで共有フォルダ上のmdeファイルに接続したいと思っています。 共有フォルダのユーザー認証はVBAでnet useコマンドを使用すれば接続できると分かり、ログインフォームに追加することができました。 ですが、ログインフォーム上にユーザー名を入力するテキストボックスを配置し、その入力内容をnet useコマンドに渡したく下記のVBAを書いてみましたが、共有フォルダにログインできない状態です。 Dim UserName As String UserName = Me.ユーザー名 Set myWSH = CreateObject("WScript.Shell") myWSH.Run "net use ファイルパス パスワード /User:UserName" 変数UserNameをダブルクォーター等々で囲わなければならないと思い色々試してみた のですが、共有フォルダのユーザー認証が通らずご教授の程、よろしくお願い致します。

  • Word 2016 VBA で保存できない

    仕事で月次報告をするのですが、報告書が Word のファイルであり、ファイル名のパターンが決まっているため、VBA でファイル名を生成し、VBA のコードで指定したパスにファイル保存させたいと考えています。 そこで、いろいろと調べて以下のコードを作ってみたのですが、保存する際に [実行時エラー 5152: ファイル名が正しくありません] と表示されます。 試しに以下のコードのうち、ファイルの保存先のパスと保存するファイル名を & でつなぎ Msgbox で表示したところ、ファイルの保存先とファイル名は意図したとおりに生成されています。 SaveAs メソッドに問題があるのではないかと考えていますが、ちょっとこれ以上は私では対処することができませんでした。 恐縮ですが、エラーを回避し、意図したパスに自動的にファイル名を生成して保存できるようにするためのコードを教えていただきたく思っています。よろしくお願いします。 以下は私が作成したサンプルです。 ------------------------------------------------- Sub 保存() 'レポート対象月の取得 dtDate = Format(Date, "yyyymm") '保存先フォルダーの指定 dtSaveFolder = "C:\Users\UserName\Documents\" & Year(Date) & "\" 'ファイル名の指定 dtSaveFileName = "XXXX" & dtDate & "YYYY.docx" '保存の実行 ThisDocument.SaveAs FileName:=dtSaveFolder & dtSaveFineName, FileFormat:=wdFormatDocument End Sub -------------------------------------------------

  • WSHController/CreateScriptはadministratorでしか実行できない?

    WScriptスクリプトをリモートで実行させます。 administratorユーザーで実行すると接続できますが、 別のユーザー名で接続させると 「書き込みできません」 「800A0046」 「Microsort VBScript実行時エラー」 となります。サンプルコードは下記になります。 ユーザー名(test)も登録しています。 権限はadministratorsを付与しています。 ファイル共有ではシステムまで参照できますので、 登録内容に誤りはないと思います。 Set Controller = WScript.CreateObject("WSHController") Set RemoteScript = Controller.CreateScript("test.js", "remoteserver") リモート側PCはスタンドアロンでドメインはなしです。 セキュリティ等の関係でもともとadministratorユーザーでしか実行できないものなのでしょうか? OS:windows2000 WSH:5.6 (Rimote=1をレジストリ書き込み済み) ご存知の方宜しくお願いいたします。

  • VBAでネットワーク上のバッチジョブを実行したい

    クライアントPCのVBAからサーバなどのネットワーク上のバッチジョブを実行するにはどのようにすればよいでしょうか?   Dim WshShell Set WshShell = CreateObject("WScript.Shell") WshShell.Run "\\サーバ名\AAAAA\BAT\TEST.bat", , True MsgBox "終了!" Set WshShell = Nothing 上記を参考にしたのですが、どうもうまくいかないのです。 何かが足りないのですか?

  • Runasの指定について

    お世話になります、runasの使用時にパスの指定の仕方について教えてください。 以下のようにパスを指定し、Runas後にスクリプトを実行しようとしていますが、objexeccmdの部分で引っかかってしまい、先に進むことが出来ません。 お手数ですが、よろしくお願いいたします。 objExecCmd = \"runas /user:Bunseki \\\"cscript.exe \\\\server\\\\log.wsf\" \'実行パスを記入 Set WshShell = WScript.CreateObject(\"WScript.Shell\") WshShell.run objExecCmd, 1, true

  • username以外でログイン名を知る方法

    質問の仕方が良くなかったので、質問タイトル並びに質問内容を変更します(古い方の質問は24時間経過後に削除します)。 http://oshiete1.goo.ne.jp/qa4323599.html VBSにて Set WshShell = Wscript.CreateObject("WScript.Shell") UserName = WshShell.ExpandEnvironmentStrings("%USERNAME%") とする事でログイン名を取得出来る事は分かったのですが、プログラムの実行をATコマンドで行った場合、USERNAMEがSYSTEMに変更されてしまうようで困っています。 プログラムの実行をATコマンドで行った場合でも問題なくログイン名を取得出来る方法か、もしくは一日100回平日繰り返しのタスク実行をUSERNAMEを変更せずに実行出来る方法があれば教えて頂けませんでしょうか?

専門家に質問してみよう