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 sieHYPERLINK()
ä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 dieHYPERLINK()
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).