Validator data MS Excel tidak menerima panggilan ke makro kustom

2

Saya memiliki VB makro yang berfungsi yang memvalidasi konten. Dibutuhkan dua parameter string (nilai sel dan ekspresi reguler) dan mengembalikan True atau False. Ini menggunakan CreateObject("VBscript.regexp")internal.

Saya perlu menggunakan makro ini untuk memvalidasi sel. Ketika saya mencoba mengaturnya sebagai custom validator caranya

=Rex(E2, "\d{1,2}\:\d{2}")

di mana Rex adalah fungsi saya didefinisikan pada lembar spread yang sama (Alt-F11 dan tipe) dan E2 adalah sel yang saya coba validasi, saya mendapatkan pesan "Rentang nama yang Anda tentukan tidak dapat ditemukan".

Jika saya menyisipkan fungsi yang sama di tempat lain pada spreadsheet yang sama (katakan di sel sudut atas A1):

=Rex(E2, "\d{1,2}\:\d{2}")

itu menunjukkan saya dengan baik TRUEjika sel E2 mengoreksi nilai yang tepat seperti 15:07dan FALSEjika tidak suka 15xx- setengah diselesaikan tetapi benar-benar tidak sampai akhir. Saya benar-benar perlu mengintegrasikan validator saya dengan cara standar.

Saya menggunakan MS Excel 2010. Makro itu sendiri

Public Function Rex(ByVal vsStringIn As String, ByVal vsPattern As String) As Boolean
    Dim objRegEx As Object
    Set objRegEx = CreateObject("VBscript.regexp")

    objRegEx.Global = True
    objRegEx.Pattern = vsPattern

    Rex = objRegEx.Test(vsStringIn)
    Set objRegEx = Nothing
End Function

Dan masalahnya seperti

Masalah validator MS Excel

h22
sumber
Bisakah Anda membagikan kode UDF Anda?
Peter Albert
Tentunya saya bisa, itu sangat sederhana.
h22

Jawaban:

1

Masalah menarik. Sepertinya UDF tidak selalu berfungsi di Validasi Data! :-(

Alternatif berikut:

  • Gunakan Pemformatan Bersyarat sebagai gantinya dan cukup sorot nilai yang salah
  • Gunakan rumus Excel normal alih-alih regex Anda untuk melakukan validasi. Dalam kasus anda,
    = IFERROR (IF (SEARCH (":", D3), AND (ISNUMBER (VALUE (LEFT (D3, SEARCH (":", D3) -1))), ISNUMBER (VALUE (KANAN (D3, LEN (D3)) -SEARCH (":", D3))))), FALSE), FALSE)
    akan melakukan pekerjaan itu. Tidak bagus, tapi setidaknya fungsional! ;-)

Catatan samping: UDF Anda atau rumus di atas tidak akan berfungsi, jika nilai yang akan diperiksa adalah angka (dengan format Waktu) dan bukan string!

Peter Albert
sumber
Pemformatan bersyarat mungkin akan bekerja untuk saya. Terima kasih.
h22
0

Saya tahu ini adalah pertanyaan lama, tetapi saya tidak ingin menduplikasi pertanyaan itu.

Solusi: Anda bisa menerapkan rumus UDF di sel yang berbeda, dan kemudian menggunakan nilai itu dalam Validasi Data. Anda dapat menyembunyikan nilai sementara hanya dengan mengubah warna menjadi putih.

Untuk informasi lebih lanjut: http://support.microsoft.com/kb/160523

Gerhard Powell
sumber