VBA初心者です。
Office365のExcelで、ハイパーリンクのアドレスをチェックし、その評価をセルの値とするユーザー定義関数(linkchecker)を作成しました。
これを特定のセル(O3)をダブルクリックすることで起動(再計算)するイベントを作成し、起動が確認できたのですが、
ハイパーリンクのアドレスを一度でも編集すると、以降イベントが起動できなくなってしまいます。
以下に状況を詳しく記載しますので、ご教授いただけると大変助かります。
【Excelブックの環境】
・Office365
・行方向に案件を追加、列方向に入力条件を指定してある一覧表(テーブル)です。
・ハイパーリンク(N列)には社内ネットワーク中のフォルダを指定
・linkcheckerはO列に、行ごとにチェックしてその結果を表示
・イベントを設定したO3セルはテーブルの見出し
・同設定のシートが複数ある
【VBA作成状況】
●ユーザー定義関数(linkchecker)
・ハイパーリンクのアドレスを再編集するまでは、イベント呼び出し・N列,O列セルのダブルクリック、
新規行、ハイパーリンクの追加 など、すべての条件で動作確認済み。
アドレスを再編集すると、イベント呼び出しのみ起動しない(ブックの再起動でリセットされない)
・1つのシートでアドレスを再編集すると、他シートも起動しなくなる
以下、コード
Function linkchecker(Target As Range) As String
Dim count As Integer
count = Target.Hyperlinks.count
If count = 0 Then
linkchecker = "未設定"
Else
Dim address As String, kekka As String
address = Target.Hyperlinks(1).address
kekka = Dir(address, vbDirectory)
Select Case kekka
Case ""
linkchecker = "×"
Case Else
linkchecker = "○"
End Select
End If
End Function
●イベントプロシージャ(各シート)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("O3")) Is Nothing Then Exit Sub
Else
Call シートの再計算
Cancel = True
End If
End Sub
●マクロ
・イベントプロシージャの中に再計算を組み込むと起動が気まぐれになったので分けました(原因不明)
・再計算範囲をRangeで指定すると思う通りの挙動にならなかったのでアクティブシートで指定
以下、コード
Sub シートの再計算()
ActiveSheet.Calculate
End Sub
No.1ベストアンサー
- 回答日時:
こんばんは、
当てずっぽですが、表示文字とアドレスを混同していませんか?
セルに表示されているのは、表示文字
リンクアドレスを変更しても表示文字を変更しなければ、Function linkchecker(Target As Range) As Stringは
実行されないかと思います。
逆にリンクアドレスを変更しなくても、表示文字を変更すれば実行されると思います。
つまり、表示文字を変更しなければ再計算を行ってもFunctionは、実行されない事になるのではないでしょうか。
Private Sub Worksheet_BeforeDoubleClickでリンクの変更を捕まえて表示したいのであれば、
明示的にFunctionを呼ぶのではいかがでしょう?もちろんユーザー定義関数の機能は残したままで。
違っていたらごめんなさい。
ご回答いただきありがとうございます。
仰るとおり、セルの値とハイパーリンクの設定値を混同してました。
アドバイスいただいた方法は私のスキルでは上手く使いこなせなかったので、
ユーザー定義関数を揮発性関数とすることで解決できました。
ご協力感謝いたします。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
i=cells(Rows.Count, 1)とi=cel...
-
Excelのハイパーリンクにマクロ...
-
【Excel】指定したセルの名前で...
-
Excelで指定した日付から過去の...
-
DataGridViewのセル編集完了後...
-
【Excel VBA】指定行以降をクリ...
-
EXCELで変数をペーストしたい
-
Excel vbaで特定の文字以外が入...
-
【VBA】指定したセルと同じ値で...
-
特定行の色を変えたい(FlexGrid)
-
VBAでセルをクリックする回...
-
EXCELのVBA-フィルタ抽出後の...
-
スプレッドシートの数値列に対...
-
VBAの計算で@が出てしまう件
-
セル色なしの行一括削除
-
3桁または4桁の数値を時刻に...
-
”戻り値”が変化したときに、マ...
-
TODAY()で設定したセルの日付...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel】指定したセルの名前で...
-
Excelで指定した日付から過去の...
-
特定の文字を条件に行挿入とそ...
-
Excel VBA、 別ブックの最終行...
-
EXCELで変数をペーストしたい
-
Excelのプルダウンで2列分の情...
-
Excel vbaで特定の文字以外が入...
-
TODAY()で設定したセルの日付...
-
screenupdatingが機能しなくて...
-
DataGridViewの各セル幅を自由...
-
Sub 要具ライフ() ActiveSheet....
-
【EXCEL VBA】Range("A:A").Fi...
-
VBAを使用した時間管理
-
VBAでセルをクリックする回...
-
セル色なしの行一括削除
-
エクセルVBAでコピーして順...
おすすめ情報