Video: Lập trình VBA trong Excel cho người mới bắt đầu | #01 Cài đặt, button, biến, vòng lặp 2025
Chức năng IsDate của VBA được cho là sẽ cho bạn biết liệu một chuỗi văn bản có thể được hiểu là một ngày. Ví dụ: tất cả các biểu thức sau đây đánh giá là Đúng:
IsDate ("5/25/2015") IsDate ("ngày 16 tháng 1") IsDate ("12-1") IsDate ("12/1/15") IsDate ("2/30") IsDate ("30/2")
Trong hai ví dụ gần đây, hãy chú ý rằng IsDate không khắt khe về thứ tự của ngày và tháng. Cả hai chuỗi này đều có thể được hiểu như là một ngày tháng, do đó, IsDate trả về True (bất kể cài đặt định dạng ngày hệ thống của bạn).
Các chức năng ngày của VBA IsDate, Format, CDate, và CVDate sử dụng một chức năng có trong OLE Automation (OleAut32.dll). Chức năng này tìm kiếm tất cả các định dạng ngày có thể bằng cách tokenizing mỗi giá trị được tách ra trong chuỗi đại diện cho ngày và trả về một giá trị Boolean cho biết đầu vào có thể được biểu diễn như là một Date.
" DD MMM YY " , " YY MMM DD " , v.v …) và do đó chức năng thử các chữ số ở tất cả các vị trí cho đến khi chức năng tìm thấy một ngày hợp lệ hoặc hết tất cả các khả năng.
IsDate ("29-Feb-01")
Ngày 29 tháng 2 năm 2001 không phải là ngày hợp lệ. Tuy nhiên, biểu thức này trả về True vì ngày 1 tháng 2 năm 1929 (và ngày 2 tháng 1 năm 1929) là ngày hợp lệ. Và những ngày đó cũng là những năm trong năm 2029.
Việc tìm kiếm tài liệu của IsDate đã trở nên trống rỗng. Dựa trên thử nghiệm, IsDate chấp nhận bất kỳ ký tự nào sau đây làm dấu phân cách: dấu gạch chéo (/), dấu gạch nối (-), dấu phẩy (,), dấu chấm (.) Và dấu cách.
Do đó, tất cả các biểu thức sau trở về True:
IsDate ("5. 1") IsDate ("30 6") IsDate ("30, 6") IsDate ("1/2")
sau đó có sự bất thường này: Các biểu thức sau đây trả về True:
IsDate ("5.1.5") IsDate ("5.1. 05")
Tuy nhiên, không rõ ràng, biểu thức này trả về Sai:
IsDate ("5. 1. 2005")
Giả sử bạn đã tạo một UserForm với một InputBox nơi người dùng nhập một ngày. Cần phải rõ ràng rằng việc sử dụng IsDate để xác thực mục nhập không phải là rất đáng tin cậy.
Mọi thứ trở nên khó hiểu hơn khi bạn nhận ra rằng IsDate cũng bao gồm các giá trị thời gian. (Không có chức năng IsTime tương ứng) Vì vậy, tất cả các biểu thức sau trở về True:
IsDate ("4: 45") IsDate ("45 45") IsDate ("4 45") IsDate ("4/45 ") IsDate (" 23: 59 ")
Các biểu thức này trả về Sai:
IsDate (" 4: 60 ") IsDate (" 24. 45 ")
Điều quan trọng cần chỉ ra rằng IsDate không thể hiện tất cả những quirks này khi bạn vượt qua một đối số Range. Ví dụ:
IsDate (Range ("A1"))
Dường như IsDate hoàn toàn đáng tin cậy khi xác định các ô có chứa một ngày hoặc một thời gian. Ví dụ, không, xác định một ô chứa 5. 1 như một ngày tháng. Nếu mã của bạn cần xác định liệu một chuỗi có thể được hiểu là một ngày, giải pháp tốt nhất là đặt chuỗi đó vào ô, và sau đó viết mã để kiểm tra nội dung của ô.