Berikut adalah UDF yang harus bekerja dalam sebagian besar kasus:
Function HAS_REF(r As Range) As Boolean
HAS_REF = (r.Formula <> r.FormulaR1C1)
End Function
The Formula
dan FormulaR1C1
sifat kisaran kebetulan sama kecuali berisi referensi sel.
Pengecualian: Jika sel berisi referensi ke rentang bernama, keduanya akan sama dan sel Anda tidak akan disorot.
Memperbarui:
Berikut adalah versi yang memeriksa nama rentang juga:
Function HAS_REF(r As Range) As Boolean
Dim i As Long
HAS_REF = (r.Formula <> r.FormulaR1C1)
If HAS_REF Then Exit Function
For i = 1 To ThisWorkbook.Names.Count
If InStr(r.Formula, ThisWorkbook.Names(i).Name) Then
HAS_REF = True
Exit Function
End If
Next i
End Function
Tentu saja, jika Anda tidak menggunakan nama rentang di buku kerja Anda, fungsi yang saya posting sebelumnya sudah cukup.
Tentang Precedents
atribut:
Saya mencoba menggunakan Precedents
atribut rentang untuk memeriksa referensi. Tapi sepertinya itu tidak berhasil. Saya sudah mencoba yang berikut ini:
Langsung menggunakan r.Precedents
di UDF untuk memeriksa apakah kisaran memiliki preseden. Menetapkannya ke variabel rentang hanya menetapkan r
(bukan r.Precedents
).
Menggunakan sub rutin pembantu untuk melakukan pengecekan sebenarnya dengan memanggil sub dari fungsi. Itu juga tidak berhasil. Namun, ketika Anda mengomentari garis dalam fungsi yang memanggil sub prosedur, sub berfungsi dan memeriksa preseden dengan benar.
Mencoba menggunakan variabel global yang dapat diakses oleh UDF dan sub rutin pembantu. Tidak membuat perbedaan.
FORMULATEXT
fungsi ini untuk mencari karakter alfabet.