『まめ録』というデータベース? を WindowsXP の Excel2003 − VBA(Microsoft Visual Basic 6.5)で作ろうとしている。「出来たッ!」と思って デモっている最中にバグを見つけた(既報)。テストしていない訳ではない。テストした時は「正常」だったのだが...言い訳しても仕方ないので、現象を記録として残すために整理した。
§1.リンクされるファイル
- テキストファイル
- ファイル名は、“[テスト]テキストファイル.txt”
- 特徴は、ファイル名に 半角“[”および“]”が入っている。(「はてな」のカテゴリーを真似たもの)
- パスは、“D:\tmp”
§2.手でハイパーリンクする
- [ハイパーリンクの挿入]をクリック
- テキストファイルを選択して、
- [OK]!
- 再度、[ハイパーリンクの挿入]をクリックして、どう設定されたかを見る。
- アドレスが“%5bテスト%5dテキストファイル.txt” に変わっている。
- リンクを張ったセルをクリックすると、「指定されたファイルを開くことができません。」
【結果】
- ファイル名中の“[”および“]”がコードによる記述に変わってしまう。
この現象は、「はてな」でも同じで理解はしている。 - 試しに、ファイル名を“#テスト#テキストファイル.txt”に変えると、リンクを張ることさえ出来なかった。
§3.関数: Hyperlink でリンクを張る
【結果】
- 全く問題ない。
引数としてアドレスを持っているので、問題ないのであろう...
§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”に変わっており、開けなくなる。