ตัวตรวจสอบข้อมูล MS Excel ไม่ยอมรับการเรียกไปยังแมโครที่กำหนดเอง


2

ฉันมีมาโคร VB ที่ทำงานซึ่งตรวจสอบความถูกต้องของเนื้อหา ใช้พารามิเตอร์สตริงสองตัว (ค่าเซลล์และนิพจน์ทั่วไป) และส่งคืนค่าจริงหรือเท็จ มันใช้ CreateObject("VBscript.regexp") ภายใน

ฉันต้องใช้แมโครนี้เพื่อตรวจสอบเซลล์ เมื่อฉันพยายามตั้งค่ามันเป็นเครื่องมือตรวจสอบที่กำหนดเองวิธี

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

โดยที่ Rex เป็นฟังก์ชันของฉันที่กำหนดไว้ในกระดาษคำนวณเดียวกัน (Alt-F11 และประเภท) และ E2 เป็นเซลล์ที่ฉันพยายามตรวจสอบฉันได้รับข้อความ "ไม่พบช่วงที่ตั้งชื่อที่คุณระบุ"

ถ้าฉันแทรกฟังก์ชั่นเดียวกันที่อื่นในสเปรดชีตเดียวกัน (พูดที่เซลล์มุมบน A1):

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

มันแสดงให้ฉันเห็นอย่างชัดเจน TRUE ถ้าเซลล์ E2 แก้ไขค่าที่ถูกต้องเช่น 15:07 และ FALSE ถ้าไม่ชอบ 15xx - ครึ่งหนึ่งได้รับการแก้ไข แต่ยังไม่ถึงจุดสิ้นสุด ฉันต้องรวมเครื่องมือตรวจสอบความถูกต้องของฉันด้วยวิธีมาตรฐาน

ฉันใช้ MS Excel 2010 แมโครตัวเองคือ

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

และปัญหาดูเหมือนว่า

MS Excel validator problem


คุณสามารถแบ่งปันรหัสของ UDF ของคุณได้หรือไม่?
Peter Albert

แน่นอนฉันทำได้มันง่ายมาก
h22

คำตอบ:


1

ปัญหาที่น่าสนใจ ดูเหมือนว่า UDF จะไม่ทำงานในการตรวจสอบความถูกต้องของข้อมูลเสมอไป :-(

ทางเลือกต่อไปนี้:

  • ใช้การจัดรูปแบบตามเงื่อนไขแทนและเพียงแค่เน้นค่าที่ไม่ถูกต้อง
  • ใช้สูตร Excel ปกติแทน regex ของคุณเพื่อทำการตรวจสอบ ในกรณีของคุณ
    =IFERROR(IF(SEARCH(":",D3),AND(ISNUMBER(VALUE(LEFT(D3,SEARCH(":",D3)-1))),ISNUMBER(VALUE(RIGHT(D3,LEN(D3)-SEARCH(":",D3))))),FALSE),FALSE)
    จะทำงาน ไม่ดี แต่อย่างน้อยก็ใช้งานได้! ;-)

หมายเหตุด้านข้าง: ทั้ง UDF และสูตรข้างต้นของคุณจะไม่ทำงานหากค่าที่จะตรวจสอบคือตัวเลข (พร้อมรูปแบบเวลา) และไม่ใช่สตริง!


การจัดรูปแบบตามเงื่อนไขอาจใช้ได้กับฉัน ขอบคุณ
h22

0

ฉันรู้ว่ามันเป็นคำถามเก่า แต่ฉันไม่ต้องการทำซ้ำคำถาม

วิธีแก้ไข: คุณสามารถใช้สูตร UDF ในเซลล์อื่นแล้วใช้ค่านั้นในการตรวจสอบข้อมูล คุณสามารถซ่อนค่าชั่วคราวโดยเพียงแค่เปลี่ยนสีเป็นสีขาว

สำหรับข้อมูลเพิ่มเติม: http://support.microsoft.com/kb/160523

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.