Extrahieren Sie die URL aus einer Zelle, auf die die Formel = Hyperlink () angewendet wurde

1294
S7H

Ich möchte die URL aus einer Zelle abrufen, auf die diese Formel angewendet ist.

=HYPERLINK(CONCATENATE("https://loremipsum.com/#/Advertiser/",[@[Customer CID]],"/.html"), "View") 

Die Formel hat einen strukturierten Verweis auf eine der Spalten in meinem Arbeitsblatt, "Customer CID".

Wenn ich versuche, dieses Makro auf mein Arbeitsblatt anzuwenden, wird der Standardwert angegeben, auch wenn die Formel eine korrekte URL auswertet.

Function GetURL(cell As Range, Optional default_value As Variant) If (cell.Range("A1").Hyperlinks.Count <> 1) Then GetURL = default_value Else GetURL = cell.Range("A1").Hyperlinks(1).Address End If End Function 

Wenn ich die Formel jedoch nicht anwende =GetUrl([@[Customer CID]], "")und der Zelle einen Hyperlink hinzufüge, indem Sie mit der rechten Maustaste auf die Zelle klicken, funktioniert die Makrofunktion und gibt mir die URL.

Weiß jemand, wie ich diese Aufgabe ausführen kann, um Hyperlink aus einer Zelle abzurufen, wenn diese Zelle den Hyperlink aus einer Formel auswertet?

3
Um die Fehler #VALUE! Dauerhaft zu beheben, wählen Sie zuerst alle Fehlerzellen (`J2: J5`) aus und stellen Sie sicher, dass` J2` die aktive Zelle ist. Dann drücken Sie "F2". Dann drücken Sie "Strg" + "Enter". robinCTS vor 5 Jahren 0
Um Ihre Konten zusammenzuführen, damit Sie Ihre Frage kommentieren und annehmen oder anderweitig bearbeiten können, sollten Sie das Formular [Kontakt] (https://superuser.com/contact) verwenden und "Ich muss Konten zusammenführen" auswählen. Mokubai vor 5 Jahren 0

1 Antwort auf die Frage

1
robinCTS

Es gibt keine direkte Möglichkeit, die URL aus einer Zelle mit einem durch eine Formel generierten Hyperlink abzurufen. Sie müssen das erste Argument aus der HYPERLINK()Funktion extrahieren und es manuell auswerten.

Dies ist die modifizierte Version Ihres Codes, die dies ausführt:

Function GetURL(cell As Range, Optional default_value As Variant) With cell.Range("A1") If .Hyperlinks.Count = 1 Then GetURL = .Hyperlinks(1).Address Else If Left$(Replace(Replace(Replace(.Formula, " ", ""), vbCr, ""), vbLf, ""), 11) = "=HYPERLINK(" Then Dim idxFirstArgument As Long: idxFirstArgument = InStr(.Formula, "(") + 1 GetURL = Evaluate(Mid$(.Formula, idxFirstArgument, InStrRev(.Formula, ",") - idxFirstArgument)) Else GetURL = default_value End If End If End With End Function 

Beachten Sie, dass überflüssige Leerzeichen oder hinzugefügte Zeilenumbrüche in der Formel ordnungsgemäß berücksichtigt werden.


Vorsichtsmaßnahmen:

  • Dies funktioniert nur bei Formeln mit einer äußersten HYPERLINK()Funktion. (Jede Formel kann jedoch so umgestaltet werden, dass sie HYPERLINK()äußerste ist, mit nur einem geringfügigen Nachteil; alternativ können alle Formeln in eine der Formulare =IF(…,…,HYPERLINK())oder =HYPERLINK()ohne Nachteile umgewandelt werden und erfordern nur eine geringfügige Änderung des Codes, schließlich mit ganz.) Mit etwas Aufwand könnte Code geschrieben werden, um jede Formel zu analysieren, egal wo sich die HYPERLINK()Funktion befindet.);
  • Wenn nach dem Komma Kommas stehen, die das erste und das zweite Argument der HYPERLINK()Funktion begrenzen, wird der Code beschädigt (kann relativ leicht behoben werden).