Excel KHÔNG nhận dạng định dạng ngày tháng của tôi.
Trả lời:
Tôi đã hy vọng rằng sẽ có cách nào đó để 'chuyển đổi' Excel để áp dụng điều này? Ngay cả khi chỉ là từng trang tính một...
Cảm ơn sự hỗ trợ của bạn cho đến nay.
-Jeremy
Nếu bạn sẵn sàng sử dụng giải pháp Visual Basic, bạn có thể thiết lập sao cho mỗi khi người dùng nhập ngày tháng ở định dạng DDMMYY vào các ô cụ thể, một chương trình con VBA sẽ được khởi chạy để tự động chuyển đổi nội dung ô thành ngày tháng thực hoặc thành chuỗi văn bản ở dạng "DD-MM-YY".
Không có cách nào để Excel lưu trữ giá trị nhập "010577" dưới dạng ngày tháng - Excel sử dụng định dạng ngày tháng nội bộ riêng của nó, và nó sẽ trông giống như 28130 hơn.
Đoạn mã dưới đây có thể được chèn vào mô-đun mã của mỗi bảng tính, bạn có thể truy cập mô-đun này bằng cách nhấp chuột phải vào tab bảng tính và chọn "Xem mã". Bất cứ khi nào người dùng thực hiện thay đổi trên bảng tính, đoạn mã này sẽ kiểm tra xem có thay đổi nào trong Cột J (nơi bạn nhập ngày tháng thủ công) hay không. Nó kiểm tra các thay đổi không hợp lệ, sau đó chuyển đổi bất cứ thứ gì được nhập thành chuỗi văn bản ở định dạng "DD-MM-YY".
Hãy dán nó vào một trong các bảng tính của bạn và thử nhập một vài dữ liệu vào Cột J để xem nó có hoạt động chính xác hay không. Bạn có muốn thử điều này không?
'===== BẮT ĐẦU MÃ =====
Tùy chọn rõ ràng
Private Sub Worksheet_Change(ByVal Target As Range)
Dim dateRange As Range, intRange As Range
Làm mờ Cell As Range
Dim disAllow As Boolean
Dim myDate As Date
'Thiết lập "phạm vi quan tâm" để kiểm tra các ngày sắp tới
Đặt dateRange = Me.Range("J2:J50000")
'Kiểm tra xem các ô đã thay đổi trên bảng tính có giao nhau với phạm vi quan tâm của chúng ta hay không.'
Đặt intRange = Intersect(dateRange, Target)
'Một số tế bào của chúng tôi đã thay đổi...'
Nếu (Not intRange Is Nothing) thì
'
'Trước khi làm bất cứ điều gì, hãy kiểm tra xem có thay đổi nào bị cấm không.'
'Nếu phát hiện bất kỳ thay đổi nào không được phép, hãy hoàn tác hành động đó.'
Việc xóa nội dung ô được cho phép.
'Nhập các giá trị không thể chuyển đổi thành
'Không được phép nhập ngày tháng - thao tác này sẽ dẫn đến việc hoàn tác.'
'
không cho phép = Sai
Đối với mỗi ô trong phạm vi intRange.Cells
Nếu (theCell <> "") thì
Nếu (Không phải IsLawsonDate(theCell.Value)) thì ' Nếu phát hiện một ô được nhập sai, hãy hoàn tác toàn bộ thao tác
MsgBox "Thay đổi đó không được phép vì nó tạo ra ngày tháng không chính xác trong một hoặc nhiều ô!", vbExclamation + vbOKOnly, "Lỗi!"
Application.EnableEvents = False
Ứng dụng.Hoàn tác
Ứng dụng.ChoPhóngSựKiện = Đúng
Thoát khỏi Sub
Kết thúc nếu
Kết thúc nếu
Tiếp theo là tế bào
'
'Nếu chúng ta đã đến được đây, hành động của người dùng là hợp pháp, vậy thì cứ tiếp tục chuyển đổi ngày tháng đi.'
'
Đối với mỗi ô trong phạm vi intRange.Cells
Nếu (theCell <> "") thì
Gọi ConvertLawsonDate(theCell.Text, myDate)
Application.EnableEvents = False
theCell = Format(myDate, "DD-MM-YY")
Ứng dụng.ChoPhóngSựKiện = Đúng
Kết thúc nếu
Tiếp theo là tế bào
Kết thúc nếu
End Sub
Private Function IsLawsonDate(ByVal inputString As String) As Boolean
Khai báo i1 kiểu Integer, i2 kiểu Integer, i3 kiểu Integer
Dim returndate As Date
'
' Định dạng ngày tháng Lawson = "DDMMYY"
'
IsLawsonDate = True
Debug.Print "hi"
Nếu (Len(inputString) = 5) thì inputString = "0" và inputString
Nếu (Chiều dài của chuỗi đầu vào <> 6 hoặc không phải là số của chuỗi đầu vào) thì
IsLawsonDate = False
Khác
i1 = Left(inputString, 2)
i2 = Mid(inputString, 3, 2)
i3 = Right(inputString, 2)
Nếu (i1 < 1 Hoặc i1 > 31 Hoặc _
i2 < 1 Hoặc i2 > 12 Hoặc _
i3 < 1) Thì IsLawsonDate = False
Khi xảy ra lỗi, hãy chuyển đến NotLawsonDate
ngày trả về = DateSerial(i3, i2, i1)
Kết thúc nếu
Chức năng thoát
'
NotLawsonDate:
IsLawsonDate = False
Kết thúc hàm
Private Sub ConvertLawsonDate(ByVal inputString As String, ByRef returndate As Date)
Khai báo i1 kiểu Integer, i2 kiểu Integer, i3 kiểu Integer
'
' Định dạng ngày tháng Lawson = "DDMMYY"
'
Nếu (Len(inputString) = 5) thì inputString = "0" và inputString
i1 = Left(inputString, 2)
i2 = Mid(inputString, 3, 2)
i3 = Right(inputString, 2)
Khi xảy ra lỗi, hãy chuyển đến NotLawsonDate
ngày trả về = DateSerial(i3, i2, i1)
Thoát khỏi Sub
'
NotLawsonDate:
returndate = DateSerial(1900, 1, 1)
End Sub
'===== KẾT THÚC MÃ =====
Comments
Post a Comment