URL'yi, kendisine uygulanan = Hyperlink () formülüne sahip bir hücreden çıkarın.


3

URL'yi, bu formüle uygulanan bir hücreden almak istiyorum.

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

Formül, sayfamdaki “Müşteri CID” sindeki sütunlardan birine yapılandırılmış bir referansa sahiptir.

Bu makroyu sayfama uygulamaya çalıştığımda, formül doğru bir URL'yi değerlendirirken bile default_value değerini veriyor.

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

Ancak formülü uygulamadığımda ve hücreye sağ tıklayarak hücreye bir köprü eklediğimde makro işlevi =GetUrl([@[Customer CID]], "") çalışır ve URL'yi verir.

Bu hücreyi bir formülün köprüsünü değerlendiriyorsa, bir hücreden köprü almak için bu görevi nasıl uygulayabileceğimi bilen var mı?


Kalıcı olarak çözmek için #VALUE! hataları, önce tüm hata hücrelerini seçin ( J2:J5 ) emin olmak J2 aktif hücredir. Sonra basın F2. Sonra basın Ctrl + Enter.
robinCTS

Hesaplarınızı birleştirerek yorum yapabilmenizi ve sorunuzu kabul edebilmenizi veya başka bir şekilde düzenleyebilmenizi sağlamak için temas form ve "hesapları birleştirmek gerekir" seçeneğini seçin.
Mokubai

Yanıtlar:


1

Orada hiçbir direkt URL'yi bir formül tarafından oluşturulan köprü içeren bir hücreden almanın yolu. İlk argümanı HYPERLINK() işlev ve el ile değerlendirin.

Bu, kodunuzu değiştiren versiyonudur:

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

Formülde herhangi bir yabancı boşluk veya eklenen satır kesmelerinin uygun şekilde hesaplandığını unutmayın.


Uyarılar:

  • Bu sadece en dıştaki formüller üzerinde çalışacaktır. HYPERLINK() işlevi. (Bununla birlikte, her formül yeniden düzenlenebilir, böylece HYPERLINK() en dışta, sadece küçük bir dezavantajla; alternatif olarak, tüm formüller, formlardan birine yeniden yansıtılabilir. =IF(…,…,HYPERLINK()) veya =HYPERLINK()dezavantajı yoktur ve yalnızca kod üzerinde küçük bir değişiklik yapılmasını gerektirir; Sonunda, biraz çaba ile, ayrıştırmak için kod yazılabilir herhangi nerede olursa olsun formül HYPERLINK() işlevi bulunur.);
  • Virgülten sonra virgül varsa, birinci ve ikinci argümanları sınırlayan HYPERLINK() fonksiyonu, kodu kıracak (nispeten kolay bir şekilde sabitlenebilir).
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.