Tôi đã giải quyết được sự cố liên quan. Sổ làm việc của tôi chỉ được sử dụng ở Vương quốc Anh. Nó có một tờ để nhập chi tiết của tiền mặt thu thập được tại các địa điểm khác nhau. Người dùng có hai ô đơn để xác định từng địa điểm; thường là vị trí và ngày, nhưng đôi khi trường "ngày" sẽ chứa tên vị trí mở rộng thay thế. Ngày nên được nhập là dd/mm/yy, nhưng hầu như mọi thứ có thể nhận dạng được chấp nhận ngoại trừ mm/dd/yy. Chi tiết được lưu trong bộ nhớ, sau đó được sao chép sang các trang tính đã định dạng để in. Tôi đã xác minh bộ nhớ trong bộ nhớ. Nhưng sau khi sổ làm việc đã được sử dụng trong một vài tháng, tôi thấy rằng nếu người dùng đã nhập ngày hợp lệ vào ô theo định dạng dd/mm/[yy] yy (ví dụ: 05/11/17) và cách diễn giải của nó là mm/dd/[yy] yy cũng sẽ cung cấp ngày hợp lệ, sau đó ngày tháng sẽ được in một cách tối nghĩa là ngày 11 tháng 3 thay vì ngày 5 tháng 11.
Một số đoạn mã:
'Data structure:
Public Type BkItem 'An item of income, for banking.
ItemName As String 'The first field, just a text name.
ItemDate As Date 'The second field, interpreted as a date.
ItemDateNumber As Long 'The date as internally stored as an integer.
ItemDateString As String 'Re-formatted string, e.g. "05-Nov-17".
' ...
End Type 'BkItem.
'Input validation:
BankData = Range(.Cells(BankFirstRow, BankFirstCol), _
.Cells(BankLastItemLastRow, BankLastCol))
With BankItem(BankTotalItems)
.ItemName = IName
.ItemDateString = BankData(<row>, <col>)
.ItemDateNumber = DateToLong(.ItemDateString)
End With
'Utility routine. "Paper" is a 2-dimensional array of all the data to be printed
'on one or more pages; "Dest" is a global range.:
Sub OutputDataToSheet(ByVal Size As Long, ByRef CurrentSheet As String, _
ByRef Paper() As Variant)
Worksheets(CurrentSheet).Activate
Set Dest = Worksheets(CurrentSheet).Range((Cells(1, 1)), _
(Cells(Size, LastCol)))
Dest.Value = Paper 'Copy data to final sheet for printing.
End Sub 'OutputDataToSheet.
'As we build the array "Paper", it helps to format those cells on the final
'printout worksheet which are going to contain dates.
.Range(Cells(CurRow, L15c01), Cells(CurRow, L15c01)).NumberFormat = "dd-Mmm-yyyy"
'For the item date.
.Range(Cells(CurRow, L15c01), Cells(CurRow, L15c01)).HorizontalAlignment = xlCenter
If IsDate(BankItem(item).ItemDateString) Then
Paper(<row>, <col>) = BankItem(item).ItemDateNumber
'Date as a number, so OutputDataToSheet preserves UK date format.
Else
Paper(<row>, <col>) = BankItem(item).ItemDateString
'Extension of name.
End If 'IsDate(.ItemDateString).
Bạn không có nhiều lựa chọn. Nếu bạn muốn kiểm soát đầu ra, bạn cần thêm mã - nó thực sự không phải là gian khổ! – Rory
Có thể trùng lặp của [Excel VBA - Chuyển đổi văn bản thành ngày?] (Https://stackoverflow.com/questions/20375233/excel-vba-convert-text-to-date) – eirikdaude