Bounty Câu hỏi:Tại sao Application.Clean() xóa các ký tự có thể in?
Trong khi có một câu trả lời mà cung cấp một lời giải thích hợp lý, tôi muốn để xác định xem phần cụt của chuỗi xảy ra vì Clean()
là một WorksheetFunction
và lý do đằng sau vấn đề đó. Làm WorksheetFunctions
khi được gọi bằng cách VBA
chuyển chuỗi vào một "ô" để nói cắt cụ nào tại số null Chr(0)
?
Câu hỏi gốc:
Tại sao Application.Clean
phương pháp TestIt
's loại bỏ tất cả các ký tự sau Chr(0)
mặc dù họ có thể in được? TestIt2
trả về đúng 8 ký tự sau khi thực hiện thay thế trên null Chr(0)
.
Edit:
Cần lưu ý là một số phiên bản của Excel sẽ yêu cầu bạn phải viết Application.WorksheetFunction.Clean()
để kiểm tra lỗi này.
Mã
Sub TestIt()
Dim TryIt As String
TryIt = "Test" & Chr(0) & "asdf"
MsgBox Len(TryIt) 'Prints 9
TryIt = Application.Clean(TryIt)
MsgBox Len(TryIt) 'Prints 4
End Sub
và
Sub TestIt2()
Dim TryIt As String
TryIt = "Test" & Chr(0) & "asdf"
MsgBox Len(TryIt) 'Prints 9
TryIt = Replace(TryIt, Chr(0), "")
MsgBox Len(TryIt) 'Prints 8
End Sub
tôi chỉ có thể suy đoán rằng nó hiểu 'vbNullChar' là terminator chuỗi, mà nó thường là trong thế giới không được quản lý. Nếu bạn sử dụng 'Char (1)' thay vào đó, nó chỉ loại bỏ một ký tự đó. Không phải là một hành vi được ghi nhận. – GSerg
Chỉnh sửa tốt. Tôi sắp nổ tung bạn bởi vì [Ứng dụng không có một phương pháp sạch] (http://msdn.microsoft.com/en-us/library/office/ff198091 (v = office.15) .aspx). – RubberDuck
@RubberDuck. Nó có phương thức 'Clean'. Nó chỉ là nó không phải là tài liệu. Các ví dụ khác là 'Debug.Print Application.Pi' –