2011-12-15 29 views
5

Tôi đang viết macro VBA trong Excel để phân tích dữ liệu từ bảng tính và gửi email. Trong macro này, tôi phải đính kèm ngày được định dạng là "MM/dd" nhưng đầu ra ở định dạng "MM-dd". Câu hỏi đặt ra là, tại sao dấu gạch chéo của tôi lại bị thay thế bằng dấu gạch ngang?Định dạng (SomeDate, "MM/dd") = "12-15" trong VBA

Để đơn giản, tôi đã giảm mã ví dụ này, và xác minh các vấn đề tồn tại với ví dụ này cũng ...

Private Sub Test() 
    Dim Yesterday As Date: Yesterday = DateAdd("d", -1, Now) 
    MsgBox Format(Yesterday, "MM/dd") 
End Sub 

Khi chạy, các hộp thông báo cho thấy "12-15" thay vì "12/15" như mong đợi.

+0

Tôi đã sử dụng cùng một mã chính xác và tôi nhận được "12/15" như mong đợi. Điều đó không bình thường ... – aevanko

Trả lời

11

tôi đã không sử dụng VBA bản thân mình, nhưng tôi nghi ngờ nó xử / là "tách ngày văn hóa hiện tại của" - và bạn đang có lẽ thực hiện trong một nền văn hóa trong đó sử dụng - như tách ngày. Bạn có thể thử trích dẫn thoát dấu gạch chéo nếu bạn chắc chắn luôn muốn có một dấu gạch chéo:

MsgBox Format(Yesterday, "MM\/dd") 

Đó là một chút của một đoán ở cả hai nguyên nhân và giải pháp khắc phục, nhưng nó ít nhất giá trị một thử.

CHỈNH SỬA: Cảm ơn GSerg về việc chỉnh sửa cách thực hiện thoát đúng trong ngữ cảnh này.

+1

Đoán của bạn là hoàn toàn chính xác, nó chỉ là thoát, nó được thực hiện với dấu gạch chéo: '" MM \/dd "' – GSerg

+0

Bạn có thể chính xác về cài đặt văn hóa. Tôi đã đặt định dạng ngày thành 'yyyy-MM-dd' trong cài đặt vùng của mình. Thêm dấu ngoặc kép như bạn đề xuất dẫn đến '12' - '14'. –

+0

@GSerg, cảm ơn, đã tạo ra kết quả mong muốn! –

2

Điều này liên quan đến cài đặt văn hóa của bạn trong Windows. Đi tới Pa-nen Điều khiển - Tùy chọn Ngôn ngữ và Khu vực - Tùy chỉnh Tùy chọn Vùng - Ngày seperator. Nó được đặt thành "-". Nếu bạn thích "/" bạn có thể thay đổi nó ở đó.

Nếu bạn muốn định dạng ngày bất kể cài đặt khu vực mặc định của mình, bạn có thể làm những gì Jon Skeet đã nói (thoát khỏi ký tự).

Các vấn đề liên quan