- ベストアンサー
エクセルVBAでハイパーリンクについて教えてください
A列のA2以降に各ファイルのフルパスがあります。 フォルダを移動したり、削除したりでクリックしても「指定したファイルを開くことができません」となります。 これをブックを開くと同時に実在するか調べて、リンク切れであれば色を付けると同時に「赤色文字はリンク切れです。削除しますか?」とメッセージして、「はい・いいえ」で判断するようなコードを教えていただけないでしょうか。そもそもURLなら聞いたことがあるのですが、フォルダやファイルの有無や名前の差異を調べて・・・というのができることなのかわからないのですが・・・
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
再度の登場、onlyromです。 VBAのコードということでしたので、 当然ながら少々の修正であればできるだろうとの判断でのコードでした。 ただ、幾らなんでも >リンク切れしていないフルパスも「リンク切れです」とのメッセージになります これはありえません。 が、それを言っても詮無い事ゆえ、本題。 (前提条件) ●フルパスは、 A列に入力されてる ●フルパスは、 C:\任意フォルダ\売上.xls のような形で入力されいる もちろん、任意フォルダーはあってもなくてもOK。 上記を確認のうえちょこと修正した以下のコードを実行。 '---------------------------------------------------- Sub Auto_Open() Dim R As Long Dim myFile Dim Msg Sheets("Sheet1").Select For R = 1 To Cells(Rows.Count, "A").End(xlUp).Row If InStr(Cells(R, "A"), "\") > 0 Then myFile = Dir(Cells(R, "A").Value) If myFile = "" Then Cells(R, "A").Interior.ColorIndex = 3 Msg = MsgBox(Cells(R, "A").Value & " は無い、リンク解除する?", vbYesNo, "確認") If Msg = vbYes Then Cells(R, "A").Hyperlinks.Delete End If End If End If Next R MsgBox "リンク切れチェック終了" End Sub '---------------------------------------------- 上記コードで動作しないようなら、実際のデータを提示してくだされ。 それから、最初の質問では、A2以降にフルパスとなっているが、補足ではA3以降となっている。 提示したコードではそれは関係ないのですが、場合によっては関係することがあるので、 質問をするときは何度も読み返して投稿した方がいいでしょう。 以上。
その他の回答 (1)
- onlyrom
- ベストアンサー率59% (228/384)
質問の場合はファイルの有無を調べればいいから。 例えば、Sheet1 の A列1行目からフルパスがあるとして。 標準モジュールに以下のコードを。 '-------------------------------------------- Sub Auto_Open() Dim R As Long Dim myFile Dim Msg Sheets("Sheet1").Select For R = 1 To Cells(Rows.Count, "A").End(xlUp).Row myFile = Dir(Cells(R, "A").Value) If myFile = "" Then Cells(R, "A").Interior.ColorIndex = 3 Msg = MsgBox(Cells(R, "A").Value & " は無い、リンク解除する?", vbYesNo, "確認") If Msg = vbYes Then Cells(R, "A").Hyperlinks.Delete End If End If Next R MsgBox "リンク切れチェック終了" End Sub '--------------------------------------------------- (注意) プロシージャー名を Auto_Open にするとブックを開いたときに ここに書かれたコードが実行されるので名前は絶対に変更しないこと。 以上。
補足
onlyromさんありがとうございました。こうやってコード化できるのってすごいなぁと思います♪ 使わせていただいたところ、リンク切れしていないフルパスも「リンク切れです」とのメッセージになります。私のシート上の設定が悪いのかもしれません。今A1の見出しにはオートシェイプで「ハイパーリンク」と入れてあります。つまり文字は入力されていません。A2は都合上空白です。ハイパーリンク化されているフルパス、ハイパーリンク化されていないフルパスはA3以降にあります。なにかコードに邪魔しているでしょうか?
お礼
ふたたびありがとうございました。快適に動作します。このようなコードつくれるようになりたいです。いろいろ教えてくださりありがとうございました。