私は Excel の VBA コードについては比較的初心者なので、答えが簡単な場合はご容赦ください (通常は簡単なはずです)。参考までに、私は Excel 2010 を使用しています。私は、次のスクリプトを使用して、次のことを実現しようとしています。
数値文字列 (任意の値) が列 D 内の任意のセルに入力された場合、これを自動的にハイパーリンクに変換して、ターゲット セルの値の前に特定のアドレス文字列を追加し、セルの値を含むフレンドリ名を出力する必要があります。
つまり、マクロで複製しようとしている Excel 関数の例は次のとおりです。
=HYPERLINK("http://stprs553/tickets/list/single_ticket/293136","Ticket #293136")
あるいは、より具体的には(より明確なイメージを描く必要があります):
=HYPERLINK(CONCATENATE("http://stprs553/tickets/list/single_ticket/","Target_Cell_Data"),"Ticket #Target_Cell_Data")
293136これは、ユーザーが列 D 内の任意のセルに入力できるようにしたい数値文字列の例です。ユーザーが入力すると、このセルがハイパーリンクに変換され、数値文字列を基本データとして使用し、URL の残りの部分をセル値の左側に追加し、「チケット番号」とセル値の数値文字列を連結したわかりやすい名前を作成します。ユーザーが参照リンクを作成するために Excel の数式を学習したり、関数の両端をコピーしてセル データをラップする時間を無駄にしたりすることは避けたいと考えています。
これまでに私が VBA で作成したものは次のとおりです。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rangeLimit As Range
Set rangeLimit = Range("D:D")
If Not Intersect(rangeLimit, Target) Is Nothing Then
If Target <> "" Then
Target.Hyperlinks.Add Anchor:=Target, Address:="http://stprs533/tickets/list/single_ticket/" & c.Value, TextToDisplay:="Ticket #" & c.Value, Target.Value
End If
End If
End Sub
私が直面している問題は次のとおりです:
1.) 数式をそのまま実行しようとすると、コンパイル エラーが発生します。2.), Target.Value
ハイパーリンク文字列の末尾を削除すると、エラー 424、「オブジェクトが必要です」というエラーが発生します。
何が間違っているのでしょうか。また、目的の機能を実行するマクロを作成するにはどうすればよいでしょうか。Google で 1 時間ほど検索し、StackOverflow の投稿をいくつか確認した結果、現在の状態にたどり着きましたが、それでもまだ機能しません。
答え1
関数呼び出しは次のようになると思います:
Target.Hyperlinks.Add Anchor:=Target, Address:="http://stprs533/tickets/list/single_ticket/" & Target.Value, TextToDisplay:="Ticket #" & Target.Value
の両方の を に変更したところc
、Target
説明どおりの動作になると思います。 がc
何にもインスタンス化されていないため、「オブジェクトが必要です」というエラーがスローされています。つまり、オブジェクトではないもののメンバーを取得することはできません。
編集: セルのテキストが変更されない問題に対処するには:
セルのテキストが数字だけのままになるのかと思いました。修正は次のようになると思います:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rangeLimit As Range
Set rangeLimit = Range("D:D")
If Not Intersect(rangeLimit, Target) Is Nothing Then
If IsNumeric(Target) And Not IsEmpty(Target) Then ' This condition should avoid munging of already-existing links, though if any tickets might be non-numeric it won't work properly.
Application.EnableEvents = False ' Must turn off event handling
Target.Hyperlinks.Add Anchor:=Target, Address:="http://stprs533/tickets/list/single_ticket/" & Target.Value, TextToDisplay:="Ticket #" & Target.Value
Target.Formula = "Ticket #" & Target.Value ' Should actually change the displayed text
Application.EnableEvents = True
End If
End If
End Sub
このようなイベント内で VBA を使用してセルの内容を編集する場合は、常にイベント処理をオフにすることが重要です。そうしないと、無限ループが発生するリスクがあります。最初にこれを考えておくべきでしたが、セルにハイパーリンクを適用してもトリガーされないようですWorksheet_Change
。
セルからハイパーリンクを削除した場合、セルは「下線付き」および「青のフォント色」としてフォーマットされたままになることに注意してください。列が常にチケットへのリンクまたは空白のセルのいずれかになるユースケースでは、これはおそらく許容できるでしょうか?