2017-06-16 3 views
0

Bei der Erstellung eines VBA-Programms in Excel stieß ich auf eine Einschränkung, die nirgendwo dokumentiert ist (die ich bisher gefunden habe).Speicherzuordnung Kuriosität mit bestimmten Sonderzeichen

Das Zelleninhaltlimit ist bei 0-32767 Zeichen dokumentiert, aber für die Zeichen "@", "-", "+" und "=" kann ich kein VBA-Skript schreiben, um diese Zeichen zu einer Zelle nach 8192 hinzuzufügen Zeichen, die seltsam genug 1/4 von 32768 ist.

Während des Debuggens habe ich ein separates Skript erstellt, um dies zu versuchen, andere Probleme zu vermeiden, die mein Programm hinsichtlich der Speicherzuweisung präsentierte.

Function Insert() 

    For i = 1 To 8199 
     Range("J13") = Range("J13") & "@" 
    Next 

End Function 

Das Programm verknüpft „@“ in der Zelle bis zu (einschließlich) 8192 und dann stoppt mit einem „Laufzeitfehler 7 Nicht genügend Speicher“ Fehler. Es scheint keine Zellbeschränkung zu sein, da ich manuell weitere Symbole in die Zelle eingeben kann, sobald das Programm angehalten hat.

ich auch versucht haben, die manuelle Eingabe über 1000 Symbole, bevor ich das Programm zu starten, aber es hält immer noch an 8192

Dieses Problem tritt nicht auf, wenn sie auf einem in voller Größe keine Sonderzeichen Standard mit Standard-US-Format Tastatur (außer den 4, die ich aufgeführt habe).

Ich nahm an, dass dies aufgrund der Zeichencodierung und der entsprechenden Speicheranforderungen dieser Zeichen sein konnte, aber ich finde keine Informationen, die angibt, dass die Speicheranforderungen für diese vier Symbole sich von den anderen Standardsymbolen auf meiner Tastatur unterscheiden.

Hat jemand einen Einblick, warum dies passieren könnte, und eine mögliche Problemumgehung?

Und ja, merkwürdigerweise brauche ich manchmal eine Zelle mit mehr als 8192 Zeichen dieser Art gefüllt zu haben.

Antwort

0

Diese vier Zeichen sind als Anfang einer Formel gültig, aber Excel specifications and limits heißt es:

Länge der Formel Inhalte - 8.192 Zeichen

Range("J13") = String(8193, "@") fehl So (weil es so interpretiert wird eine Formel), aber Range("J13") = "x" & String(8193, "@") wird funktionieren (weil es nicht als eine Formel interpretiert wird).


würde Eine Abhilfe zu verwenden sein Range("J13") = "'" & String(8193, "@"), die die Zelle zwingen wird als Text behandelt werden, in es mit nur 8193 "@" Zeichen.


Anmerkung: Ich war mein Kopf kratzen versucht zu erarbeiten, warum das @ Symbol verwendet werden könnte, um eine Formel zu starten (und wird zu einem = nach der Eingabe es nur geändert). Ich wusste, dass ich es irgendwo benutzt gesehen habe, also habe ich es gegoogelt und eine Seite gefunden, die mich daran erinnerte, dass wir so eine Formel in Lotus123 gestartet haben. Daher wurde es in Excel integriert, um ehemaligen Lotus123-Benutzern zu ermöglichen, weiterhin auf ihre übliche Weise zu arbeiten. (Das ist der gleiche Grund, warum / die Menüs aufruft.)