VBAによる絶対パス取得時のサーバー名取得について

このQ&Aのポイント
  • VBAを使用して、開いているファイルの絶対パスを取得する方法について調べましたが、ドライブ名での取得しか見つかりませんでした。
  • パソコンでドライブ割り当てしているドライブ名ではなく、サーバー名を含んで絶対パスを取得したいです。
  • 採番台帳のファイルを複数のメンバーで使用し、採番したファイルにリンクを付与して送るためには、サーバー名も含んだ絶対パスが必要です。
回答を見る
  • ベストアンサー

VBAによる絶対パス取得時のサーバー名取得について

いつも、とても助けてもらっています。 ありがとうございます。 EXCELのVBAにて、 開いているファイルの絶対パスを取得したいのですが、 その際にパソコンでドライブ割り当てしているドライブ名でなく、 サーバー名を含んで取得したいです。 どのようにすれば出来ますか? 以下は、ネットで調べて見つけたものですが、 ドライブ名での取得となります。 ** Sub GetCurPath2() Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") MsgBox FSO.GetAbsolutePathName("") Set FSO = Nothing End Sub ** \\ABC123\DEF\を パソコン側でGドライブにて割り当てている場合に、 ファイルが\HIJ\KLM\に有ると、 上記のマクロでは、 『G:\HIJ\KLM』と取得出来ますが、 『\\ABC123\DEF\HIJ\KLM』と取得したいのです。 なぜ、このように取得したいかというと、 ファイル(採番台帳)は、採番を取得する台帳で複数のメンバーにて使用し、 そのファイルにて所定の統一の採番したいファイルの内容をファイルに複写し 採番後には採番するファイルから採番したファイルにリンクも付与し、 採番したファイル(所定の場所から採番後には別の場所に採番体系によるファイル名で保管)を リンクでメールを送るようにしたいからです。 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_140.html よろしくお願い致します。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

こんな具合ですかね。 調べたいブックは既に開かれていて,変数oに取得してあるとします。 Sub macro1()  Dim objNetWork As Object  Dim objDrv As Object  Dim i As Long  Dim d As String  Dim o As Workbook  Set o = Workbooks("とりあえず目的のブック.xls")  d = Left(o.Path, 2)  Set objNetWork = CreateObject("Wscript.Network")  Set objDrv = objNetWork.enumnetworkdrives  For i = 0 To objDrv.Length - 1 Step 2   If d = objDrv(i) Then    d = objDrv(i + 1)    Exit For   End If  Next i  MsgBox d & Mid(o.Path, 3, 99)  Set objDrv = Nothing  Set objNetWork = Nothing End Sub

imachan_net
質問者

補足

ありがとうございます。 確かに、ドライブ設定されている場合には、 そのドライブ設定されている、『サーバー+共有名+・・・』で取得できます。 質問には書いていなかったですが、 パソコンでドライブ割り当てをしていなくて、 メールからのリンクでファイル(台帳)を開いた場合でも、 正しくサーバーからの絶対パスを取得したいのです。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

ドライブ設定されていない場合は,最初から意図通り「\\サーバ名\…」で取得できているはずですが? とりあえず当初ご質問は解決し,ご相談は終わっているはずです。 追加ご質問については,具体的な状況(あなたがやっていることの背景じゃなく,実際のエクセルが具体的にどんな結果を返してくるのか)がさっぱり見えませんので,残念ですが回答できません。 「メールからクリックしてブックを開きました」 「その場合の 当該ブック.path がどうなっています」 「その時に,こういう結果が欲しいです」 といったエクセルの事実を添えて,もう一度ご相談を出し直してください。

関連するQ&A

  • フルパスの取得

    あるフォルダの中にあるすべてのファイル(サブフォルダ内のファイルを含めて)のフルパスを取得するにはどうしたらよいのでしょうか?これはFSOで実現できるのでしょうか?それともFSOなど使わなくてもできるのでしょうか? よろしくお願いします。 (使っているのはVB6.0です)

  • Excelで外部ブックを相対指定する方法について

     Excelで外部のブックにリンクをする場合、なぜか絶対パスになってしまいます。以下のように相対パスにする方法はないのでしょうか? 'C:\abc\def\[hij.xls]klm'!$B9     ↓ '..\[hij.xls]klm'!$B9  リンク元のExcelファイルは、「abc」フォルダの中にあります。  よろしくお願いいたします。

  • cmd.exeが、文字を取りこぼす

    win10です。数年前に買いました。 バッチファイルを使っています。 例えば、そのバッチファイルに書かれているコマンドが ABC.exe def hij ABC.exe def hij ABC.exe def hij ABC.exe def hij ABC.exe def hij ABC.exe def hij ABC.exe def hij ABC.exe def hij ABC.exe def hij だとすると、最初は ABC.exe def hij と正常に実行されるのですが、しばらくすると C.exe def hij などと、最初が欠けます。当然エラーです。 もちろん、実際には引数のdefとかは各行で違います。ABC.exeは架空のコマンドですが共通です。 セキュリティ関係か...と思って cmd.exe を対象から外そうとしたのですが、その場所が分からず。 試しにバッチファイルをクリップボードにコピーして、コンソール画面に張り付けると問題ありません。 なお、そのコマンドはWin10に最初からあるヤツです。特殊なものではありません。 もしかして、漢字が原因かもしれません。英数字だけの時はコレは出てこない、最初の数行だけだが。 解決方法はありますか。

  • FileSystemObjectでフォルダ名取得

    http://officetanaka.net/excel/vba/filesystemobject/filesystemobject.htm このページにファイル名から、拡張子やドライブ名などを出力する方法が書かれていますが ファイルが入っているフォルダ名を取得するコマンドはございますでしょうか? 例えば、 C:\xxxx\yyyy.txt の場合、 C:\xxxx\ を取得したいのですが、コマンドはありますか?

  • dir /A /B /S *.txtをLinuxで

    Windowsで C:>dir /A /B /S *.txt を実行すると、そのディレクトリ以下の*.txtファイルが C:\abc\def\hij.txt C:\abc\def\klm.txt ... と出力されます。 これをLinux上で出来ないでしょうか。 ネット上で調べたのですが、私の実力では"/S"と同じことがLinuxでは出来ないようです。

  • datagrid内にdatagridもしくはdatalistをネストしたい

    こんばんは。 現在Visual Studio .NET 2003 でASP.NET + VB.NETの ウェブフォームを作っています。 たとえばデータベースにtable1とtable2があり idをjoinさせてdatagridにバインドすると id......name.........order ------------------------------- 1.......abc...........a ------------------------------- 1.......abc...........b ------------------------------- 2.......def...........a ------------------------------- 3.......hij...........a ------------------------------- 3.......hij...........b ------------------------------- 3.......hij...........c ------------------------------- 4.......klm...........b ------------------------------- となるのですが id......name........order ------------------------------- 1.......abc...........a ..........................b ------------------------------- 2.......def...........a ------------------------------- 3.......hij...........a ..........................b ..........................c ------------------------------- 4.......klm...........b ------------------------------- このように表示させたいためdatagridを ネストさせるしかないかと思うのですが、 うまくいきません。 http://www.atmarkit.co.jp/fdotnet/dotnettips/132nesteddg/nesteddg.html このサイトを参考にしてC#のソースコードをVBに 変えてみましたがそれもうまくいきません。 どの方法が一番いいのか、datagridにdatalistを ネストさせることが出来るのかもわからず 困っています。 datagridをどうすればネストして表示できるのか、 よりいい方法があるのか、アドバイスをお願いいたします。

  • FileSystemObjectでのパス名の取得

    お世話になります。 VBScriptでフォルダ内のファイルコピーのスクリプトを作っているのですが、FileSystemObjectを使用してネットワーク共有してある日本語のフォルダ名(Getfolder)を取得すると文字化けして取得できません。 Dim fso,fo set fso = CreateObject("Scripting.FileSystemObject") set fo = fso.getfolder(フォルダパス) WScript.Echo fo.path <---フォルダのパスを表示 なにか解決する方法はありますでしょうか? ちなみに、ローカルドライブの日本語フォルダは正常に取得できました。

  • フルパスを取得するにはどうすればいいですか

    access2003です 自身のファイル名を取得するのは Sub test() MsgBox CurrentProject.Name End Sub で出来ますが フルパスを取得するにはどうすればいいですか? よろしくお願い致します。

  • エクセルVBAでフォルダー名を取得

    たとえばEドライブ(社内の共有ドライブ)の全フォルダー名(その下のすべてのサブフォルダーを含む)を取得し、ワークシートに書き出すにはどのようなコードを書けばよいのでしょうか? (フォルダー内のファイル名は不要です) よろしくお願いします。

  • フォルダの中のファイル数を取得するには vba

    手作業でフォルダのプロパティからファイルの数を確認することはできるのですが VBAで(FSOなど)、該当のフォルダの中に何個ファイルが入ってるかを確認するコードはありますか? Sub test() Dim MyFileName As String Dim MyFolderName As String Dim i As Long MyFolderName = "\○○\icon" MyFileName = Dir(MyFolderName & "\*.*") Do While MyFileName <> "" MyFileName = Dir() i = i + 1 Loop MsgBox i End Sub このようなコードを作ってみたのですが、 画像のように実際に目で確認したファイル数と一致しません。 正しい数が取得できるvbaコードはありますか?

専門家に質問してみよう