[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ハイパーリンクのリンク先のフォルダを一括置換したい』(ちぃ)
Excel2003(XP) です。
ハイパーリンクのリンク先に、pdfファイルを設定しています。
例えば、以下のように、リンク先のフォルダを変更した場合、
変更前 変更後
リンク先←フォルダ名 リンク先←フォルダ名
| |
|- 1.pdf -2006
|- 2.pdf | |
- 3.pdf | -1.pdf
: | -2.pdf
-2007
|
-3.pdf
:
この場合、セルを1つずつ「ハイパーリンクの編集」で
フォルダを新しいフォルダに変更していかなければいけないでしょうか?
ハイパーリンクされた全てのセルを一括置換できないでしょうか?
なお、マクロ・関数はものすごい凝った物でないならわかります。
すみませんが、まことによろしくお願いします。
Sub TEST20070213_3()
Rem ハイパーリンクの変更
Dim hlLink As Hyperlink
Dim strFname1 As String, strFname2 As String
Dim lngAns As Long
For Each hlLink In ActiveSheet.Cells.Hyperlinks
Do
hlLink.Range.Select
strFname1 = hlLink.Address
strFname2 = Application.GetOpenFilename("PDFファイル (*.pdf),*.pdf", , strFname1)
lngAns = MsgBox(strFname1 & Chr(10) & Chr(10) & _
"へのリンクを" & Chr(10) & Chr(10) & _
strFname2 & Chr(10) & Chr(10) & _
"に置き換えます。" & Chr(10) & "よろしいですか?" & Chr(10) & Chr(10) & _
"はい:置き換え" & Chr(10) & Chr(10) & _
"いいえ:次のリンクへ" & Chr(10) & Chr(10) & _
"キャンセル:ファイル選択に戻る", vbYesNoCancel)
Loop While lngAns = vbCancel
If lngAns = vbYes Then hlLink.Address = strFname2
Next hlLink
End Sub
あまり労力に差がないかも(汗)
(みやほりん)(-_∂)b
参考になりました。m(._.)m
書いてくださったマクロを参考に
いろいろやってみましたが、あまり労力に差がないかもしれません。
しかし、単純なフォルダ名の変更・追加であるならば
マクロが楽そうです。
ありがとうございました。
Sub ハイパーリンク先のフォルダを変更()
Dim hlink As Hyperlink
Dim FileName As String
For Each hlink In ActiveSheet.Hyperlinks
hlink.Range.Select
With hlink
hadd = .Address
End With
Sentaku = MsgBox(hadd & Chr(10) & Chr(10) & _
"へのハイパーリンクを置き換えますか?" & Chr(10) & Chr(10) & _
Chr(10) & Chr(10) & _
" はい:置き換えるためファイルを選ぶ" & Chr(10) & Chr(10) & _
" いいえ:次のリンクへ" & Chr(10) & Chr(10) & _
" キャンセル:中止", vbYesNoCancel + vbDefaultButton1 + vbQuestion, "ハイパーリンクの変更")
If Sentaku = vbCancel Then Exit Sub
If Sentaku = vbNo Then GoTo A
FileName = Application.GetOpenFilename("PDF ファイル(*.pdf),*.pdf")
If FileName = "False" Then Exit Sub
lngAns = MsgBox(hadd & Chr(10) & Chr(10) & _
" へのハイパーリンクを" & Chr(10) & Chr(10) & _
FileName & Chr(10) & Chr(10) & _
" に置き換えます。 よろしいですか?" & Chr(10) & Chr(10) & Chr(10) & _
" はい:置き換え" & Chr(10) & Chr(10) & _
" いいえ:次のリンクへ" & Chr(10) & Chr(10) & _
" キャンセル:中止", vbYesNoCancel + vbDefaultButton1 + vbExclamation, "ハイパーリンクの変更")
If lngAns = vbYes Then hlink.Address = FileName
If lngAns = vbCancel Then Exit Sub
A:
Next hlink
End Sub
がんばってますね。
If Sentaku = vbNo Then GoTo A 〜 A: は
If Sentaku = vbYes Then 〜 End If でもよいかもしれません。
もう一つサンプルを作ってみました。
Sub TEST20070214()
Rem ファイルリスト作成
Const myPath = "C:\temp"
Dim myFsys As Object, myFld As Object, mySF As Object, _
myFiles As Object, objfls As Object, objsfld As Object
Dim i As Long
i = 1
Set myFsys = CreateObject("Scripting.FileSystemObject")
Set myFld = myFsys.GetFolder(myPath)
Set myFiles = myFld.Files
For Each objfls In myFiles
Cells(i, 1).Value = objsfld.Path & "\" & objfls.Name
i = i + 1
Next objfls
Set mySF = myFld.SubFolders
For Each objsfld In mySF
Set myFiles = objsfld.Files
For Each objfls In myFiles
Cells(i, 1).Value = objsfld.Path & "\" & objfls.Name
i = i + 1
Next
Next objsfld
Set myFiles = Nothing
Set mySF = Nothing
Set myFld = Nothing
Set myFsys = Nothing
End Sub
C:\tempというフォルダ、及びその直下のサブフォルダ(一階層)の
ファイルリストを作成します。作成したリストを元にHYPERLINK関数で
ハイパーリンクを作成するのも良いかもしれません。
(みやほりん)(-_∂)b
>If Sentaku = vbYes Then 〜 End If でもよいかもしれません。
お〜その手がありましたね。
ということで改定第2弾ですが、まだ GoTo が取れません。
GoTo を無くすにはどうしたらいいか、お分かりでしょうか?
Sub ハイパーリンク先を変更()
Dim hlink As Hyperlink
Dim FileName As String
For Each hlink In ActiveSheet.Hyperlinks
hlink.Range.Select
With hlink
hadd = .Address
End With
A:
Sentaku = MsgBox(hadd & Chr(10) & Chr(10) & _
"へのハイパーリンクを置き換えますか?" & Chr(10) & Chr(10) & _
Chr(10) & Chr(10) & _
" はい:置き換えるためファイルを選ぶ" & Chr(10) & Chr(10) & _
" いいえ:次のリンクへ" & Chr(10) & Chr(10) & _
" キャンセル:中止", vbYesNoCancel + vbDefaultButton1 + vbQuestion, "ハイパーリンクの変更")
If Sentaku = vbCancel Then Exit Sub
If Sentaku = vbYes Then
FileName = Application.GetOpenFilename("PDF ファイル(*.pdf),*.pdf")
If FileName = "False" Then GoTo A
lngAns = MsgBox(hadd & Chr(10) & Chr(10) & _
" へのハイパーリンクを" & Chr(10) & Chr(10) & _
FileName & Chr(10) & Chr(10) & _
" に置き換えます。 よろしいですか?" & Chr(10) & Chr(10) & Chr(10) & _
" はい:置き換え" & Chr(10) & Chr(10) & _
" いいえ:次のリンクへ" & Chr(10) & Chr(10) & _
" キャンセル:中止", vbYesNoCancel + vbDefaultButton1 + vbExclamation, "ハイパーリンクの変更")
If lngAns = vbCancel Then Exit Sub
If lngAns = vbYes Then
hlink.Address = FileName
hlink.Range.Font.Bold = True
End If
End If
Next hlink
End Sub
ちぃさん、ごめんなさい、すっかり見落としてしまったようです。
もうしわけありません。ずいぶん間が空いてしまいましたので見てくれていると良いのですが。
Sub ハイパーリンク先を変更()
Dim hlink As Hyperlink
Dim FileName As String
For Each hlink In ActiveSheet.Hyperlinks
hlink.Range.Select
With hlink
hadd = .Address
End With
Do
Sentaku = MsgBox("" & Chr(10) & Chr(10) & _
"へのハイパーリンクを置き換えますか?" & Chr(10) & Chr(10) & _
Chr(10) & Chr(10) & _
" はい:置き換えるためファイルを選ぶ" & Chr(10) & Chr(10) & _
" いいえ:次のリンクへ" & Chr(10) & Chr(10) & _
" キャンセル:中止", vbYesNoCancel + vbDefaultButton1 + vbQuestion, "ハイパーリンクの変更")
If Sentaku = vbCancel Then Exit Sub
FileName = Application.GetOpenFilename("PDF ファイル(*.pdf),*.pdf")
Loop While FileName = "False"
If Sentaku = vbYes Then
lngAns = MsgBox(hadd & Chr(10) & Chr(10) & _
" へのハイパーリンクを" & Chr(10) & Chr(10) & _
FileName & Chr(10) & Chr(10) & _
" に置き換えます。 よろしいですか?" & Chr(10) & Chr(10) & Chr(10) & _
" はい:置き換え" & Chr(10) & Chr(10) & _
" いいえ:次のリンクへ" & Chr(10) & Chr(10) & _
" キャンセル:中止", vbYesNoCancel + vbDefaultButton1 + vbExclamation, "ハイパーリンクの変更")
If lngAns = vbCancel Then Exit Sub
If lngAns = vbYes Then
hlink.Address = FileName
hlink.Range.Font.Bold = True
End If
End If
Next hlink
End Sub
(みやほりん)(-_∂)b
コメントを参考にした後、
さらに、
1.If Sentaku = vbNo の行を付け加え、
2.もともと太字になっているのならそのセルはスキップする
ようにしました。
つまり、結局、以下のようなマクロで落ち着きました。
Sub ハイパーリンク先を変更()
Dim hlink As Hyperlink
Dim FileName As String
For Each hlink In ActiveSheet.Hyperlinks
If hlink.Range.Font.Bold = False Then '05行目
hlink.Range.Select
With hlink
hadd = .Address
End With
Do
Sentaku = MsgBox(hadd & Chr(10) & Chr(10) & _
"へのハイパーリンクを置き換えますか?" & Chr(10) & Chr(10) & _
Chr(10) & Chr(10) & _
" はい:置き換えるためファイルを選ぶ" & Chr(10) & Chr(10) & _
" いいえ:次のリンクへ" & Chr(10) & Chr(10) & _
" キャンセル:中止", vbYesNoCancel + vbDefaultButton1 + vbQuestion, "ハイパーリンクの変更")
If Sentaku = vbCancel Then Exit Sub
If Sentaku = vbNo Then Exit Do
FileName = Application.GetOpenFilename("PDF ファイル(*.pdf),*.pdf")
Loop While FileName = "False"
If Sentaku = vbYes Then '21行目
lngAns = MsgBox(hadd & Chr(10) & Chr(10) & _
" へのハイパーリンクを" & Chr(10) & Chr(10) & _
FileName & Chr(10) & Chr(10) & _
" に置き換えます。 よろしいですか?" & Chr(10) & Chr(10) & Chr(10) & _
" はい:置き換え" & Chr(10) & Chr(10) & _
" いいえ:次のリンクへ" & Chr(10) & Chr(10) & _
" キャンセル:中止", vbYesNoCancel + vbDefaultButton1 + vbExclamation, "ハイパーリンクの変更")
If lngAns = vbCancel Then Exit Sub
If lngAns = vbYes Then '30行目
hlink.Address = FileName
hlink.Range.Font.Bold = True
End If '30行目を受ける
End If '21行目を受ける
End If '05行目を受ける
Next hlink
End Sub
です。これにより、数多くのセルにハイパーリンクが設定されていて、
リンクを貼られたファイルが存在するフォルダを変えてしまった場合、
効率よく、リンク先のフォルダを変更していくことが出来るようになりました。
ありがとうございました。(ちぃ)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.