• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAでショートカットリンクの変更をするには)

エクセルVBAでショートカットリンクの変更方法

このQ&Aのポイント
  • エクセルVBAで既存のショートカットファイル(~.lnk)のリンク先を変更する方法を教えてください。
  • 既存のショートカットのリンク先を調べ、条件に一致した場合、そのリンク先を変更するためのVBAの作成方法を知りたいです。
  • Qドライブのネットワーク割り当てやファイルの指定を変更するため、エクセルVBAでショートカットのリンク先を自動変更する方法を教えてください。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 昨日から、ネットワークを組もうと格闘しているのですが、もともと、ネットワークを組むための前のパソコンが調子が悪くて、エラーを出した挙句に、起動できなくなって、今回の実験環境が整いません。 >Windows2000Pro Office2000の環境です。 >これを解決する目処はたっていませんが、何とかしたいと考えております。 こういう時は、可能性のあることは、全部試してみるのがよいし、場合によっては、Wsh からやっても良いと思います。ともかく、こちらでは環境による違いは、試すことが出来ません。 当面、こういう時には、一度、参照設定で事前バインディングして試してみるのが良いかもしれませんね。パフォーマンスが変わります。(ダメ元ですが) Wscript.Shell  →Windows Script Host Object Model Dim WSHShell As WSHShell  '←ちょっとまずいですね(^^; 'Set WSHShell = CreateObject("Wscript.Shell")    ↓ Set WSHShell = New WSHShell でも、あまりあれこれ考えるよりも、始めからダメだと決めて進めたほうが簡単だったりしますね。それは、Dir で取ったものに、情報を確保してから、、*.lnk を、*.bak でRename するか、Kill で削除して、新たに、その情報から、*.lnk のショートカットを作ればよいのですね。やっていることは同じですから。それで、出来ないとなれば、また、話は別です。

believe_me
質問者

お礼

お礼が遅くなって申し訳ありません。 今日原因が分かりました。 Windowsやエクセルのバージョン、ネットワークドライブかどうか、全く関係ありませんでした。 >だから、置換するときには、そのリンク先が存在していることと、 >置換した後に、正しく変わっているか、以下のマクロで、 >一度プロパティで調べていただくぐらいしか、今のところ言えません。 原因はこれでした。 ネットワークドライブ割当てを旧のままでショートカットを変更していました。 ファイルのショートカットはリンクの存在の有無を確認していないようで上手く変更できましたが、フォルダの方はリンクの存在を確認しているようですね。 ネットワークドライブ割当てを変更した後、ショートカットの変更をしたら全てOKになりました。 ありがとうございました。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 ほっとしました。;; そういう私は、今回、ネットワーク化はついに間に合わないというのか、壊れたパソコンには、ネットワーク化は、うまく行かないようです。こちらは欠陥状態のままで、なんとか最後まで行き着けたことは、私としても、うれしい限りです。 今回、私自身、チェック用のマクロも出来たし、ふだんは、考えないようなことに対して、勉強させていただきました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 しばらく検証してみました。 >フォルダのショートカットを修正すると、どういう訳か属性が変わってしまうようです。 >変更後のショートカットをクリックすると、フォルダが開かずファイルを開くプログラムの選>択が出てきてしまいます。 1)は、製作時のミスでしたが、2) のほうは、MSのサポートを見ると、共有フォルダのショートカットに対しては、ずいぶん作り方が違いようですから、それに関してはなんともいえないのですが、一般フォルダのショートカットとは違うのかもしれません。 ショートカットは、Windows の配下で、クリックすると、実際にそれがあるのか探しています。 だから、置換するときには、そのリンク先が存在していることと、置換した後に、正しく変わっているか、以下のマクロで、一度プロパティで調べていただくぐらいしか、今のところ言えません。 基本的には、TargetPath 内の文字列を置換すれば、稼動するのではないかとは思っていますが、ただ、もしかしたら、一旦、共有フォルダが利用できる状態を確保しておいてから、置換しないといけないかもしれません。そうすると、少し内容の趣も違ってきてしまいます。 こちらは、スタンドアロンで、まったく必要もないので、共有フォルダは、今のところ作っていません。 そのご様子ですと、ショートカットは、フォルダという認識をしていませんね。とりあえず、必要な情報を取るマクロを置いておきます。 以下のフルネーム(fullname)の「ショートカット名」だけは、読み取り専用です。 テスト用 ------------------------------------------------------ Sub ShowShortCutProperties()   'ショートカット検査用マクロ   Dim ful, tp, dsp, arg, rel, wd, hk   Dim objFSO As Object 'FileSystemObject   Dim objFile As Object 'File   Dim objFolder As Object 'Folder   Dim WSHShell As Object   Dim msg As String      Dim fn As String   Dim bln As Boolean   Dim rdy As String      fn = "xxxx.lnk" 'ファイル名(*.lnk)   Set objFSO = CreateObject("Scripting.FileSystemObject")   If Dir(fn) = "" Then     MsgBox fn & " が見つかりません", 64: Exit Sub   End If   Set objFile = objFSO.GetFile(fn)   With objFile     If InStr(1, .Type, "ショートカット", vbTextCompare) = 0 Then        MsgBox "ショートカットファイルではありません。", 64: Exit Sub     End If   End With   Set WSHShell = CreateObject("Wscript.Shell")   With WSHShell.CreateShortcut(fn)     ful = .FullName     tp = .TargetPath     dsp = .Description     arg = .Arguments     '  rel = .RelativePath     wd = .WorkingDirectory     hk = .Hotkey   End With   msg = "ショートカット名: " & ful & vbCrLf & _   "リンク先: " & tp & vbCrLf & _   "コメント: " & dsp & vbCrLf & _   "引数: " & arg & vbCrLf & _   "RelativePath: " & rel & vbCrLf & _   "作業用フォルダ: " & wd & vbCrLf & _   "ショートカットキー: " & hk & vbCrLf      Set objFolder = objFSO.GetFolder(tp)   bln = objFile.Drive.IsReady   rdy = IIf(bln, "リンク先利用可", "リンク先利用不可")   msg = msg & vbCrLf & rdy   MsgBox msg   Set objFile = Nothing   Set objFolder = Nothing   Set objFSO = Nothing   Set WSHShell = Nothing End Sub

believe_me
質問者

補足

回答ありがとうございます。 どうもネットワークフォルダが原因ではないようです。 WindowsXP Office2003の環境ではフォルダのショートカットは問題なく変更することができました。 問題が起きているのはWindows2000Pro Office2000の環境です。 恐らくWindowsの違い(XP⇔2000)が原因であると思われます。 これを解決する目処はたっていませんが、何とかしたいと考えております。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 ちょっと考えてみました。一気にしないで、ステップマクロなどで試してみてください。 ただ、ある程度のファイルの移動は検索するので、自動的にリンク先がつなぎ変わるようですね。 Sub MacroTest1() Dim WSHShell As Object Dim myPath As String Dim fn As String Dim i As Integer Dim flg As Boolean Dim p(1) As String myPath = **************** & "\"  'リンクのあるパス Set WSHShell = CreateObject("Wscript.Shell") fn = Dir(myPath & "*.lnk") Do While fn <> "" With WSHShell.CreateShortcut(fn)   p(0) = .TargetPath   p(1) = .WorkingDirectory   For i = 0 To 1   '作業フォルダのために、末尾は \ を入れないほうが良いようです。   If InStr(p(i), "\\Domain01\Kanto\Tokyo") > 0 Then    p(i) = Replace(p(i), "\\Domain01\Kanto\Tokyo", "\\Domain01\Kanto")    flg = True   ElseIf InStr(p(i), "Q:\Kaihatsu1") > 0 Then    p(i) = Replace(p(i), "Q:\Kaihatsu1", "Q:\Tokyo\Kaihatsu1")    flg = True   End If  Next i   If flg Then     .TargetPath = p(0)     .WorkingDirectory = p(1)     .Save     Erase p()   End If   flg = False   fn = Dir() End With Loop Set WSHShell = Nothing End Sub

believe_me
質問者

補足

回答ありがとうございます。 実行してみて2つ問題がありました。 1つはDir関数の戻り値がファイル名のみなので、With WSHShell.CreateShortcut(fn)を実行する時にパスを追加しなければならなかったこと。これは修正いたしました。 2つめはファイルのショートカットはOKでしたが、フォルダのショートカットがNGでした。 フォルダのショートカットを修正すると、どういう訳か属性が変わってしまうようです。 変更後のショートカットをクリックすると、フォルダが開かずファイルを開くプログラムの選択が出てきてしまいます。 色々調べましたが皆目検討がつきません。 よろしくお願い申し上げます。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

恐らくですが。。。Lnk ファイルのバイナリを読み込んで自力で 解析するしかないと思います。

believe_me
質問者

お礼

回答ありがとうございます。

関連するQ&A