2012-07-21 18 views

Antwort

168

cstr (45) Ich denke, ist alles, was Sie brauchen (konvertieren string)

84

Versuchen Sie, die CStr() Funktion

Dim myVal as String; 
Dim myNum as Integer; 

myVal = "My number is:" 
myVal = myVal & CStr(myNum); 
36

Die meiste Zeit, werden Sie nicht zu "konvertieren" müssen; VBA wird die implizite Typkonvertierung für Sie durchführen, ohne die Verwendung von Konvertern wie CStr.

Der folgende Code funktioniert ohne Probleme, da die Variable vom Typ String ist und implizite Typumwandlung für Sie automatisch durchgeführt wird!

Dim myVal As String 
Dim myNum As Integer 

myVal = "My number is: " 
myVal = myVal & myNum 

Ergebnis:

"Meine Nummer ist: 0"

Sie haben nicht einmal, dass die Lust bekommen haben, das funktioniert auch:

Dim myString as String 
myString = 77 

"77"

Die einzige Zeit, die Sie zu konvertieren brauchen, ist, wenn die Variable Typ (zum Beispiel Typ Variant oder ein Cell Value (welche ist Variant)) nicht eindeutig ist.

Auch dann müssen Sie nicht die CStr Funktion verwenden, wenn Sie mit einer anderen String-Variablen oder -Konstante arbeiten. Wie folgt aus:

Sheet1.Range("A1").Value = "My favorite number is " & 7 

„Meine Lieblingszahl ist 7“

Also, wirklich, das einzige selten Fall ist, wenn Sie wirklich einen Integer-Wert gespeichert werden soll, in eine Variante oder Zellwert, wenn nicht auch mit einem anderen String Compoundierung (das ist ein ziemlich seltener Neben Fall ist, wie ich hinzufügen):

Dim i as Integer 
i = 7 
Sheet1.Range("A1").Value = i 
Dim i as Integer 
i = 7 
Sheet1.Range("A1").Value = CStr(i) 

"7"

+2

Ich verstehe nicht, warum diese Antwort nicht mehr Stimmen hat, da es wahr ist. Es ist erwähnenswert, dass die Typumwandlung nicht * immer * durchgeführt wird, sondern vom verwendeten Bediener abhängt. Zum Beispiel erweitert die Operation + nicht immer eine ganze Zahl zu einer Zeichenkette. –

+0

@MarkCh Ich weiß, dass das alt ist, aber ... vielleicht, weil VBAs anstößige implizite Conversions und Standard-Member-Calls so viel VBA-Code gebrechlich, überraschend und fehleranfällig machen? Es würde nicht halb so viele VBA-Fragen zu SO geben, wenn es nicht implizite Konvertierungen, implizite Erreichbarkeit, impliziten Standardmemberzugriff, implizite 1-basierte Arrays mit "Option Base 1", implizite Typisierung mit "Def [Type]" wären (Junge, das ist böse!), implizit ... Sie bekommen es - die einzige gute implizite Sache in VBA ist die implizite Aufruf-Syntax, die die explizite "Call" obsolet gemacht. –

4

In meinem Fall wurde die Funktion CString nicht gefunden. Das Hinzufügen eines leeren Strings zum Wert funktioniert aber auch.

Dim Test As Integer, Test2 As Variant 
Test = 10 
Test2 = Test & "" 
//Test2 is now "10" not 10 
+0

Niemand sprach über 'CString', eine VB.NET-Funktion. Das Verketten eines leeren String-Literals, um eine Zeichenfolge zu erstellen, ist eine ziemlich langsame Konvertierungsmethode. Verwenden Sie 'CStr' für explizite Typkonvertierungen - dies ist eine implizite Typumwandlung und löst bei jedem, der diesen Code liest, die Augenbrauen aus. Entschuldigung, dass ich diese Antwort so spät fand, nachdem sie gepostet wurde, ich wünschte, ich hätte sie viel früher herunterstimmen können. –

0

Der kürzeste Weg, ohne die Variable zu deklarieren ist mit Typ Hinweise:

s$ = 123 ' s = "123" 
i% = "123" ' i = 123 

Das mit Option Explicit nicht kompiliert werden. Die Typen werden nicht Variant aber String und Integer

2

Wenn die Zeichenfolge, die Sie in sind Ziehen geschieht eine Hex-Zahl wie E01 zu sein, dann Excel es als 0 selbst übersetzen, wenn Sie die CStr Funktion zu verwenden, und auch wenn Sie hinterlegen es zuerst in einem String-Variablentyp. Eine Möglichkeit, das Problem zu umgehen, ist das Anhängen von 'an den Anfang des Wertes.

Zum Beispiel, wenn die Werte aus einer Word-Tabelle ziehen und sie zu Excel zu bringen:

strWr = "'" & WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text) 
Verwandte Themen