Warum entfernt Application.Clean () druckbare Zeichen?

8

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) ?

abschneidet

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%     
Chrismas007 24.12.2014, 19:16
quelle

2 Antworten

2

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):

%Vor%     
Instant Breakfast 01.01.2015, 04:45
quelle
3

@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

schreiben

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 .

    
Siddharth Rout 24.12.2014 22:59
quelle

Tags und Links