2014-02-10 36 views
7

Ich weiß, .NET (und daher VB.NET) Strings sind unveränderlich. Ich verwende jedoch VBA 7.0 in Excel 2010. Sind Zeichenketten dort unveränderlich? Ich mache eine Menge String-Verarbeitung und für kleine Mengen ist einige (direkte) String-Manipulation in Ordnung, aber ich bin besorgt, dass es nicht skalieren wird - da jedes zusätzliche Zeichen von einer Zeichenkette zu einer anderen verschoben werden kann die Saite.Sind VBA-Strings unveränderlich?

Antwort

3

VBA-Strings sind unveränderbar.

Genau wie bei VB.NET gibt es keine Möglichkeit, "einen Teil von" zu ersetzen oder an eine Zeichenfolge anzufügen, ohne eine neue Zeichenfolge zu erstellen. Ob das wichtig ist - moderne Computer sind verdammt schnell - hängt vom tatsächlichen Algorithmus, den Daten und der Umgebung ab.

Im Gegensatz zu .NET-Dokumentation ist es schwierig, eine solche Verhaltensreferenz für VBA ausfindig zu machen. Von MS-VBAL: 2.1 Data Values and Value Types finden wir dieses seltene kleine Juwel

Individuelle Datenwerte sind unveränderbar. Dies bedeutet, dass in einer VBA-Umgebung keine definierten Mechanismen verfügbar sind, die dazu führen können, dass ein Datenwert in einen anderen Datenwert geändert wird.

wobei Strings "individuelle Datenwerte" darstellen.

6

Sie sind unveränderlich, außer wenn sie veränderliches Verhalten zeigen, dann sind sie nicht.

Zum Beispiel ist die Zuweisung über mid$() wesentlich schneller als eine normale Neu-String-aus-Zuweisung.

Dim s As String 

s = "ABC" 

Debug.Print s, StrPtr(s) 

'// -> ABC   122899836 

Mid$(s, 1, 1) = "Z" 

Debug.Print s, StrPtr(s) 

'// -> ZBC   122899836  

s = "??" & Right$(s, 1) 

Debug.Print s, StrPtr(s) 

'// -> ??C   196635748 
+0

+1 Ich wollte nur sagen: Dim str As String: str = "dieser String": Debug.Print VarPtr (str), StrPtr (str): Mittel (str, 3, 2) = "at ": Debug.Print VarPtr (str), StrPtr (str)' –

+0

In diesem Fall sollte dies die Antwort sein, nicht meins. – user2864740

Verwandte Themen