2012-07-21 17 views

risposta

168

CSTR (45) Penso che è tutto ciò che serve (convertire la stringa)

84

Prova la funzione CStr()

Dim myVal as String; 
Dim myNum as Integer; 

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

maggior parte delle volte, non avrete bisogno di "convertire"; VBA eseguirà una conversione di tipo implicita sicura per voi, senza l'uso di convertitori come CStr.

Il codice seguente funziona senza problemi, poiché la variabile è di tipo String e la conversione di tipo implicita viene eseguita automaticamente.

Dim myVal As String 
Dim myNum As Integer 

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

Risultato:

"Il mio numero è: 0"

Non hanno nemmeno bisogno di ottenere che la fantasia, questo funziona anche:

Dim myString as String 
myString = 77 

"77"

L'unica volta che sarà necessario convertire è quando il tipo di variabile è ambigua (per esempio, tipo variabile, o una cella di Value (che è Variante)).

Anche in questo caso, non è necessario utilizzare la funzione CStr se si sta aggiungendo un'altra variabile o costante String. Come questo:

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

"Il mio numero preferito è il 7"

Quindi, in realtà, l'unico rara caso è quando si vuole veramente per memorizzare un valore intero, in una variante o valore della cella, quando non anche compounding con un'altra stringa (che è un caso piuttosto raro lato, mi permetto di aggiungere):

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

Non capisco il motivo per cui questa risposta non ha più voti, dato che è vero. Vale la pena notare che la conversione del tipo non è * sempre * eseguita, dipende dall'operatore in uso. Ad esempio, l'operazione + non allarga sempre un numero intero a una stringa. –

+0

@MarkCh So che questo è vecchio, ma ... forse perché le conversioni implicite odiose di VBA e le chiamate predefinite dei membri sono ciò che rende così tanto codice VBA fragile, sorprendente e soggetto a errori? Non ci sarebbero nemmeno la metà delle domande VBA su SO se non fosse di conversioni implicite, accessibilità implicita, accesso ai membri predefinito implicito, matrici basate su 1 implicite con 'Opzione Base 1', digitando implicitamente con' Def [Tipo] ' (ragazzo che è MALE!), implicito ... lo capisci - l'unica cosa implicita buona in VBA è la sintassi implicita della chiamata che ha reso obsoleta la chiamata esplicita. –

4

Nel mio caso, la funzione CString non è stato trovato. Ma anche l'aggiunta di una stringa vuota al valore funziona.

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

Nessuno ha parlato di 'CString', che è una funzione VB.NET. Concatenare una stringa vuota letterale per creare una stringa è un metodo di conversione piuttosto zoppo. Usa 'CStr' per le conversioni di tipo esplicito - questa è una conversione implicita del tipo e solleva le sopracciglia di chiunque legga quel codice. Scusa se ho trovato questa risposta così tardi, dopo che è stata postata, vorrei averla svalutata molto prima. –

0

La via più breve senza dichiarare la variabile è con i suggerimenti Tipo:

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

Questo non verrà compilato con Option Explicit. I tipi non saranno Variant ma String e Integer

2

Se la stringa si sta tirando a caso è un numero esadecimale, come E01, quindi Excel tradurlo come 0 anche se si utilizza la funzione CStr, e anche se per prima cosa lo depositi in un tipo di variabile String. Un modo per aggirare il problema è aggiungere "all'inizio del valore.

Per esempio, quando si tira i valori di una tabella di Word, e portarli a Excel:

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