Kopfgeld Frage:
Obwohl es eine Antwort gibt, die eine vernünftige Erklärung liefert, möchte ich feststellen, ob die Kürzung der Zeichenkette auftritt, weil Clean()
ein WorksheetFunction
ist und die Gründe dafür sind. Do WorksheetFunctions
bei Aufruf von VBA
übergibt den String sozusagen in eine "Zelle", die am null Chr(0)
?
Ursprüngliche Frage:
Warum entfernt TestIt
's Application.Clean
method alle Zeichen nach Chr(0)
, obwohl sie druckbar sind? TestIt2
gibt nach dem Ersetzen von null Chr(0)
korrekt 8 Zeichen zurück.
Bearbeiten:
Bemerkenswert ist, dass einige Versionen von Excel erfordern, dass Sie Application.WorksheetFunction.Clean()
schreiben
um diesen Fehler zu testen.
Code
%Vor%und
%Vor% Die Antwort darauf scheint sehr einfach zu sein: das Entfernen aller Zeichen nach chr(0)
ist ein Fehler.
Clean
wurde entworfen, um chr(0)
sowie andere nicht druckbare Zeichen wie in der VBA-Sprachreferenz angegeben zu entfernen:
Die Clean-Funktion wurde entwickelt, um die ersten 32 nicht druckbaren Zeichen im 7-Bit-ASCII-Code (Werte 0 bis 31) aus dem Text zu entfernen.
Clean
funktioniert wie erwartet für alle anderen erwähnten chr()
-Werte EXCEPT chr(0)
, nach denen alle folgenden Zeichen entfernt werden.
Wenn Sie mit dem Nullwert arbeiten müssen, ist eine Konvertierung erforderlich. Sie können das erwartete Ergebnis erhalten, indem Sie etwas wie TryIt = Replace(TryIt, Chr(0), Chr(1))
ausführen, nach dem das Ergebnis wie erwartet funktioniert (und wie für alle anderen 31 chr()
-Codes, die Clean
entfernen sollte):
@Gserg ist richtig in den Kommentaren oben
Visual Basic kann keine Zeichenfolgen verarbeiten, die mit einem NULL-Zeichen abgeschlossen sind. Tatsächlich terminieren alle DLLs die Zeichenketten auf diese Weise. Chr(0)
wird als Abschlusszeichen für Zeichenfolgen behandelt.
Hier ist der beste Weg, es zu überprüfen.
%Vor% Dies wird nur "Test" in Zelle A1
Der beste Weg ist, es so zu handhaben, wie Sie es tun. Verwende .Replace
. Der andere alternative (längere) Weg ist die Verwendung von INSTR
.