Excel-Makro „Hyperlink.Add“-Fehler

Excel-Makro „Hyperlink.Add“-Fehler

Ich bin relativ neu im Umgang mit VBA-Code in Excel, also verzeihen Sie mir bitte, wenn die Antwort einfach ist (ich gehe davon aus, dass sie es normalerweise ist). Ich verwende Excel 2010 als Referenz. Ich versuche, mit dem folgenden Skript Folgendes zu erreichen:

Wenn eine Zahlenzeichenfolge (beliebiger Wert) in eine beliebige Zelle in Spalte D eingegeben wird, muss ich diese automatisch in einen Hyperlink umwandeln lassen, der vor den Wert der Zielzelle eine bestimmte Adresszeichenfolge anfügt und einen benutzerfreundlichen Namen ausgibt, der den Wert der Zelle enthält.

Mit anderen Worten, hier ist die Beispiel-Excel-Funktion, die ich mit einem Makro replizieren möchte:

=HYPERLINK("http://stprs553/tickets/list/single_ticket/293136","Ticket #293136")

Oder genauer (sollte ein klareres Bild zeichnen):

=HYPERLINK(CONCATENATE("http://stprs553/tickets/list/single_ticket/","Target_Cell_Data"),"Ticket #Target_Cell_Data")

293136ist die Beispiel-Zahlenzeichenfolge, die ein Benutzer in jede Zelle in Spalte D eingeben können soll. Dabei soll diese Zelle in einen Hyperlink umgewandelt werden, wobei die Zahlenzeichenfolge als Basisdaten verwendet wird, der Rest der URL links neben dem Zellenwert angehängt wird und dann ein benutzerfreundlicher Name erstellt wird, der „Ticket #“ mit der Zahlenzeichenfolge aus dem Zellenwert verknüpft. Ich möchte nicht, dass meine Benutzer Excel-Formeln lernen müssen, um einen Referenzlink zu haben, oder Zeit damit verschwenden müssen, beide Enden der Funktion zu kopieren, um die Zellendaten zu umschließen.

Folgendes habe ich bisher in 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

Folgende Probleme treten bei mir auf:

1.) Wenn ich versuche, die Formel so auszuführen, wie sie ist, erhalte ich einen Kompilierungsfehler. 2.) Wenn ich das , Target.ValueEnde der Hyperlink-Zeichenfolge entferne, erhalte ich den Fehler 424, „Objekt erforderlich“.

Was mache ich falsch und/oder wie kann ich ein Makro erstellen, um die gewünschte Funktion auszuführen? Nach einer guten Stunde Google-Suche und dem Durchsehen einiger StackOverflow-Beiträge bin ich zu dem gekommen, was ich jetzt habe, was immer noch nicht funktioniert.

Antwort1

Ich denke, der Funktionsaufruf sollte lauten:

Target.Hyperlinks.Add Anchor:=Target, Address:="http://stprs533/tickets/list/single_ticket/" & Target.Value, TextToDisplay:="Ticket #" & Target.Value

Ich habe gerade beide Vorkommen von cin geändert Target, was meiner Meinung nach das bewirken wird, was Sie beschreiben. Der Fehler „Objekt erforderlich“ wird ausgelöst, weil cnicht instanziiert wurde – Sie können kein Mitglied von etwas abrufen, das kein Objekt ist.

BEARBEITEN, um den sich nicht ändernden Zellentext zu beheben:

Ich habe mich gefragt, ob der Zellentext nur die Zahl bleiben würde. Die Lösung wird ungefähr so ​​aussehen, denke ich:

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

Es ist wichtig, die Ereignisbehandlung zu deaktivieren, wenn Sie VBA verwenden, um den Inhalt einer Zelle innerhalb eines solchen Ereignisses zu bearbeiten. Andernfalls besteht die Gefahr einer Endlosschleife. Daran hätte ich gleich denken sollen, aber es scheint, dass das Anwenden eines Hyperlinks auf die Zelle nicht auslöst Worksheet_Change.

Beachten Sie, dass, wenn Sie einen Hyperlink aus einer Zelle löschen, die Zelle weiterhin als „unterstrichen“ und in „blauer Schriftfarbe“ formatiert bleibt. Für Ihren Anwendungsfall, bei dem die Spalte immer entweder Links zu Tickets oder leere Zellen enthält, ist dies wahrscheinlich akzeptabel?

verwandte Informationen