エクセルVBAで既存のショートカットファイル(~.lnk)のリンク先を変更するにはどうしたらよいでしょうか?
既に出来ているショートカットのリンク先を調べ、条件に一致した場合、そのリンク先を変更するVBAを作成したいと思っています。
WSHを使ってショートカットを作る方法は知っていますが、既存のショートカットのリンク先を調べる方法が分かりません。
用途は以下の通りです。
会社のサーバが変更になり、ネットワークドライブの割り当てを変更するように通達がありましたが、既にショートカットは数百個あり、手で修正するのが非常に大変です。
ドライブ又はフォルダを指定して、そのフォルダ内及びその配下にある全てのサブフォルダにある全てのショートカットファイルを調べ対象の場合、登録したあったリンクの内容を自動変更します。
(ルートフォルダの指定及びサブフォルダの移動部分のVBAは作成隅です。)
Qドライブのネットワーク割り当て
変更前:\\Domain01\Kanto\Tokyo\
変更後:\\Domain01\Kanto\
ファイルの指定
変更前:Q:\Kaihatsu1\Keikaku01.xls
変更後:Q:\Tokyo\Kaihatsu1\Keikaku01.xls
以上、よろしくお願い申し上げます。
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 のショートカットを作ればよいのですね。やっていることは同じですから。それで、出来ないとなれば、また、話は別です。
お礼が遅くなって申し訳ありません。
今日原因が分かりました。
Windowsやエクセルのバージョン、ネットワークドライブかどうか、全く関係ありませんでした。
>だから、置換するときには、そのリンク先が存在していることと、
>置換した後に、正しく変わっているか、以下のマクロで、
>一度プロパティで調べていただくぐらいしか、今のところ言えません。
原因はこれでした。
ネットワークドライブ割当てを旧のままでショートカットを変更していました。
ファイルのショートカットはリンクの存在の有無を確認していないようで上手く変更できましたが、フォルダの方はリンクの存在を確認しているようですね。
ネットワークドライブ割当てを変更した後、ショートカットの変更をしたら全てOKになりました。
ありがとうございました。
No.5
- 回答日時:
こんばんは。
ほっとしました。;; そういう私は、今回、ネットワーク化はついに間に合わないというのか、壊れたパソコンには、ネットワーク化は、うまく行かないようです。こちらは欠陥状態のままで、なんとか最後まで行き着けたことは、私としても、うれしい限りです。
今回、私自身、チェック用のマクロも出来たし、ふだんは、考えないようなことに対して、勉強させていただきました。
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
この回答への補足
回答ありがとうございます。
どうもネットワークフォルダが原因ではないようです。
WindowsXP Office2003の環境ではフォルダのショートカットは問題なく変更することができました。
問題が起きているのはWindows2000Pro Office2000の環境です。
恐らくWindowsの違い(XP⇔2000)が原因であると思われます。
これを解決する目処はたっていませんが、何とかしたいと考えております。
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
この回答への補足
回答ありがとうございます。
実行してみて2つ問題がありました。
1つはDir関数の戻り値がファイル名のみなので、With WSHShell.CreateShortcut(fn)を実行する時にパスを追加しなければならなかったこと。これは修正いたしました。
2つめはファイルのショートカットはOKでしたが、フォルダのショートカットがNGでした。
フォルダのショートカットを修正すると、どういう訳か属性が変わってしまうようです。
変更後のショートカットをクリックすると、フォルダが開かずファイルを開くプログラムの選択が出てきてしまいます。
色々調べましたが皆目検討がつきません。
よろしくお願い申し上げます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
【お題】 ・存在しそうで存在しないモノマネ芸人の名前を教えてください
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
ホテルを選ぶとき、これだけは譲れない条件TOP3は?
ホテルを探す時、予約サイトで希望条件の絞り込みができる便利な世の中。 あなたは宿泊先を決めるとき「これだけは譲れない」と思う条件TOP3を教えてください。
-
自分のセンスや笑いの好みに影響を受けた作品を教えて
子どもの頃に読んだ漫画などが その後の笑いの好みや自分自身のユーモアのセンスに影響することがあると思いますが、 「この作品に影響受けてるな~!」というものがあれば教えてください。
-
ギリギリ行けるお一人様のライン
おひとり様需要が増えているというニュースも耳にしますが、 あなたが「ギリギリ一人でも行ける!」という場所や行為を教えてください
-
Win10でショートカットファイルのリンク先を一括変更
その他(ソフトウェア)
-
ExcelVBA ショートカットファイルからリンク先を取り出す
Excel(エクセル)
-
バッチによるショートカットのプロパティの変更
その他(プログラミング・Web制作)
-
-
4
Excel VBAでリンク切れをチェックしたい。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ショートカットとコピーの違いは?
-
ショートカットのはずし方
-
Windows10、ペイント3Dの起動フ...
-
ユーザー間のソフト共有の制限
-
evernoteのショートカットキー...
-
ショートカット添付メールが開...
-
返信の際の「>」記号を一括で付...
-
OUTLOOKが二重起動される
-
Webページを開く際のセキュリテ...
-
バッチ実行後DOS窓を閉じるには
-
ショートカットから直接フォル...
-
エクスプローラを最大化表示す...
-
w10を使っています! ■デスクト...
-
Winの電卓ってどこにありますか?
-
ショートカットの使い方につい...
-
シャットダウン時にメッセージ...
-
ショートカットが開けません
-
デスクトップからメモ帳を開く...
-
デスクトップがショートカット...
-
価格.com で検索条件の保存は可...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ショートカットとコピーの違いは?
-
ショートカットのはずし方
-
Windows10、ペイント3Dの起動フ...
-
Webページを開く際のセキュリテ...
-
ショートカットが開けません
-
複数のショートカットの作り方...
-
ユーザー間のソフト共有の制限
-
返信の際の「>」記号を一括で付...
-
OUTLOOKが二重起動される
-
ショートカットの名前変更
-
ショートカットで開いたファイ...
-
evernoteのショートカットキー...
-
TVerショートカット
-
w10を使っています! ■デスクト...
-
右クリック→新規作成 の項目が...
-
ショートカット添付メールが開...
-
ウェブ等でチェックボックスを...
-
ショートカットのリンク先につ...
-
シャットダウン時にメッセージ...
-
ショートカットが勝手に作成さ...
おすすめ情報