Bounty Soru:Neden Application.Clean() yazdırılabilir karakterleri kaldırır?
makul bir açıklama sağlayan bir cevap olsa da, ben Clean()
bir WorksheetFunction
ve bu konuda arkasındaki mantık, çünkü dize kısaltma meydana olmadığını belirlemek istiyorum. VBA
tarafından çağrıldığında WorksheetFunctions
Do null Chr(0)
de hangi kesilir konuşmak için bir "hücre" içine dizesi geçmek?
Orijinal Soru:
Neden TestIt
'ın Application.Clean
yöntemi, yazdırılabilir olsa Chr(0)
sonra tüm karakterleri kaldırır? TestIt2
, null Chr(0)
'da bir değiştirdikten sonra doğru 8 karakter döndürür.
Düzenleme: Dikkate değer özellikleri
Excel bazı sürümleri Application.WorksheetFunction.Clean()
bu hatayı test etmek yazmanızı gerektirir olmasıdır.
Kod
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
ve
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
Ben sadece spekülasyon olabilir Bu genellikle yönetilmeyen dünyada olduğu dize terminatör olarak, 'nNullChar' anlıyor. Bunun yerine 'Char (1)' kullanırsanız, yalnızca bir karakteri kaldırır. Belgelenen bir davranış olsa da. – GSerg
İyi düzenleme. [Uygulama, Temiz bir yönteme sahip değil] çünkü patlama yapmak üzereydim (http://msdn.microsoft.com/en-us/library/office/ff198091 (v = office.15) .aspx). – RubberDuck
@RubberDuck. Bir 'Temiz 'yöntemine sahiptir. Sadece belgelenmemiş. Diğer örnekler 'Debug.Print Application.Pi' –