エクセルの[ハイパーリンクの挿入]でアドレスが変わってしまう

『まめ録』というデータベース? を WindowsXP の Excel2003 − VBAMicrosoft Visual Basic 6.5)で作ろうとしている。「出来たッ!」と思って デモっている最中にバグを見つけた(既報)。テストしていない訳ではない。テストした時は「正常」だったのだが...言い訳しても仕方ないので、現象を記録として残すために整理した。

§1.リンクされるファイル

  1. テキストファイル
  2. ファイル名は、“[テスト]テキストファイル.txt”
    • 特徴は、ファイル名に 半角“[”および“]”が入っている。(「はてな」のカテゴリーを真似たもの)
  3. パスは、“D:\tmp”

§2.手でハイパーリンクする

  1. ハイパーリンクの挿入]をクリック
    • テキストファイルを選択して、
    • [OK]!
  2. 再度、[ハイパーリンクの挿入]をクリックして、どう設定されたかを見る。
    • アドレスが“%5bテスト%5dテキストファイル.txt” に変わっている。
  3. リンクを張ったセルをクリックすると、「指定されたファイルを開くことができません。」
【結果】
  • ファイル名中の“[”および“]”がコードによる記述に変わってしまう。
     この現象は、「はてな」でも同じで理解はしている。
  • 試しに、ファイル名を“#テスト#テキストファイル.txt”に変えると、リンクを張ることさえ出来なかった。

§3.関数: Hyperlink でリンクを張る

=HYPERLINK("D:\tmp\[テスト]テキストファイル.txt","ハイパーリンク")

【結果】
  • 全く問題ない。
     引数としてアドレスを持っているので、問題ないのであろう...

§4.VBA のコード

    Cells(r, 8).Select
    ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=inpFullpath, TextToDisplay:=inpExt
ヘルプ: Hyperlinks オブジェクトの Add メソッド

 指定された範囲または図形にハイパーリンクを追加します。Hyperlink オブジェクトを返します。

expression.Add (Anchor, Address, SubAddress, ScreenTip, TextToDisplay )

  • expression  必ず指定します。対象となる Hyperlinks コレクションを返すオブジェクト式を指定します。
  • Anchor  必ず指定します。オブジェクト型 (Object) の値を使用します。ハイパーリンクのアンカーを指定します。Range オブジェクトまたは Shape オブジェクトを指定します。
  • Address  必ず指定します。文字列型 (String) の値を使用します。ハイパーリンクのアドレスを指定します。
  • SubAddress  省略可能です。バリアント型 (Variant) の値を使用します。ハイパーリンクのサブアドレスを指定します。
  • ScreenTip  省略可能です。バリアント型 (Variant) の値を使用します。ハイパーリンク上をマウスポインタで指した場合に表示されるヒントです。
  • TextToDisplay  省略可能です。バリアント型 (Variant) の値を使用します。ハイパーリンクで表示されるテキストです。
【結果】
  • VBA でリンクを張った直後のアドレスは、“D:\tmp\[テスト]テキストファイル.txt”で問題なく、開くことも出来る。
  • 保存後、再度開くと、アドレスが“D:\tmp\%5bテスト%5dテキストファイル.txt”に変わっており、開けなくなる。