• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA シート内ハイパーリンク置換がうまくいかない)

VBAでシート内ハイパーリンク置換がうまくいかない

このQ&Aのポイント
  • VBAを使用してエクセルシート内のハイパーリンクの置換を行おうとしていますが、うまく置換されません。ファイルサーバの移設に伴い、エクセルファイル内のハイパーリンクの一部を置換したいのですが、実行した結果が所望のものになりません。
  • 実行手順としては、list_TM.txtにフルパスで置換したいエクセルファイルをリスト化し、ファイルを開いてハイパーリンクの置換を行い、上書き保存して閉じるというものです。
  • しかし、実際にファイルを開いて確認すると、置換結果が正しくなく、目的のパスになっていません。なお、TargetRowとTargetColumnはハイパーリンクがある行と列を確認するためのものであり、無視してください。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.2

Win10 エクセル2013ですが 質問のコードで(list_TM.txtには1個のファイルだけ記載しています) \\server1\tantou\Datasave\sample.xls が \\server2\kyoyu\tantou\Share\Datasave\sample.xls に変換されました。 実際にリンクされているわけではないので、単にハイパーリンクでリンク先指定の文字列が変換できたということですが、C:\Datasave\sample.xlsとなり変換ができないということにはなりませんでした。なのでコード自体に問題があるのではないかもしれません。環境依存とか。 適当な話ですが、HL.Addressの変換あたりを変えてみたらどうなるんだろうかなとか思いました。HL.Addressを文字列にしてそれを変換してHL.Addressに戻すとか。 あと、個々のファイルを開くのにちょっと時間をあけるとか…すみません適当です。

vesper580109
質問者

お礼

kkkkkmさん ご回答頂きありがとうございました。結局原因がわからず環境依存を疑い、他のPC(win7、Office2010、32bit版)で実行したら置換してくれました。置換できなかったPCはwin10、Office2013、64bit版でした。64bit版Officeでマクロが動かない問題が取り沙汰されている中で、今回の真因かどうかは分かりませんが、もしかしたらこれが原因かも・・・と思った次第です。 またHyperLinkを予め文字列変換した上で、Cells(TargetRow,TargetColumn)に直接Addしてみたり・・・と、いろいろと試してみましたが結局のところよくわかりませんでした。 環境依存を疑う方向へのヒントを頂けたkkkkkmさんのご回答をベストアンサーにさせて頂こうと思います。ありがとうございました。

その他の回答 (1)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

ファイルサーバーとかの環境はないので、ハイパーリンク先のフォルダーを書き換えるVBA(質問にあるReplace)を作ってみました。 ハイパーリンクが含まれているBookの設定ですが、 ファイルタブ  >情報   >プロパティ    >詳細プロパティ     >Book1プロパティダイアログ      >ファイルの概要タブ       >ハイパーリンクの起点 で、 ハイパーリンクの起点が「未入力」の場合、置き換えできず。 ハイパーリンクの起点が「¥」(半角円マーク)の場合、置き換えできました。 「¥」(半角円マーク)の場合にはもう少し説明が必要で、 おなじBookで、起点が「未入力」のときに作ったハイパーリンクは、置き換えできず、起点を「¥」に変更した後に設定したハイパーリンクは変更できました。起点の有無が何か関係があるかもしれません。「¥」(半角円マーク)入力後のハイパーリンクのAddressプロパティにはリンク先Bookのフルパスが確認できました。 当方、Win10、Excel2010です。何分、環境が違うので、参考程度にしてください。見当違いかもしれませんので。解決すればいいですね。

vesper580109
質問者

お礼

nishi6さん ご回答頂きありがとうございました。結局のところ原因はわからずじまいでした。ハイパーリンクの起点という設定の存在を初めて知りました。 ご教示頂いた設定方法から考えReplaceする文字列の最初の2文字「¥¥」を省き、「server1・・」、「server2・・」と書いてみたり、他にもReplaceする前段階で「\」を「¥」にReplaceしてみたり・・と、いろいろ試してみましたがうまくいきませんでした。もう少し探ってみます。ありがとうございました。