2012-07-21 33 views

Respuesta

168

cstr (45) Creo que es todo lo que necesita (convertir la serie)

84

Pruebe la función CStr()

Dim myVal as String; 
Dim myNum as Integer; 

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

mayoría de las veces, usted no tendrá que "convertir"; VBA hará una conversión de tipo implícita segura para usted, sin el uso de convertidores como CStr.

El siguiente código funciona sin problemas, porque la variable es de Tipo Cadena, y la conversión de tipo implícita se realiza automáticamente.

Dim myVal As String 
Dim myNum As Integer 

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

Resultado:

"Mi número es: 0"

Ni siquiera tiene que conseguir que la fantasía, esto también funciona:

Dim myString as String 
myString = 77 

"77"

La única vez que tendrá que convertir es cuando la variable Tipo es ambigua (por ejemplo, tipo de variante, o una célula de Value (que es Variante)).

Incluso entonces, no tendrá que usar la función CStr si está componiendo con otra variable de cadena o constante. De esta manera:

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

"Mi número favorito es el 7"

Así que, realmente, la única rara caso es cuando realmente se desea almacenar un valor entero, en una variante o valor de la celda, cuando no también la composición con otra cadena (que es un caso bastante raro lado, debo añadir):

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

No entiendo por qué esta respuesta no tiene más votos, dado que es cierto. Vale la pena señalar que la conversión de tipo no * siempre * se lleva a cabo, depende del operador en uso. Por ejemplo, la operación + no siempre ensanchará un entero a una cadena. –

+0

@MarkCh Sé que esto es viejo, pero ... tal vez porque las desagradables conversiones implícitas de VBA y las llamadas predeterminadas de los miembros son lo que hace que el código de VBA sea tan frágil, sorprendente y propenso a errores. No habría la mitad de preguntas de VBA en SO si no se tratara de conversiones implícitas, accesibilidad implícita, acceso de miembro implícito predeterminado, matrices implícitas basadas en 1 con 'Option Base 1', tipeo implícito con' Def [Type] ' (¡Muchacho, eso es MALO!), implícito ... lo entiendes - la única buena cosa implícita en VBA es la sintaxis de llamada implícita que hace que la 'Llamada' explícita sea obsoleta. –

4

En mi caso, no se encontró el CString función. Pero agregar una cadena vacía al valor también funciona.

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

Nadie habló de 'CString', que es una función de VB.NET. Concatenar un literal de cadena vacío para hacer una cadena es un método de conversión bastante cojo. Utilice 'CStr' para las conversiones de tipo explícitas; esta es una conversión de tipo implícita y levanta las cejas de cualquiera que lea ese código. Lamento haber encontrado esta respuesta tan tarde después de su publicación, ojalá pudiera haberlo votado mucho antes. –

0

El camino más corto sin declarar la variable es con sugerencias Tipo:

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

Esto no va a compilar con Option Explicit. Los tipos no serán Variant pero String y Integer

2

Si la cadena que se está tirando en pasa a ser un número hexadecimal como E01, a continuación, Excel lo traducirá como 0, incluso si se utiliza la función CStr, e incluso si primero lo deposita en un tipo de variable String. Una forma de resolver el problema es agregar 'al comienzo del valor.

Por ejemplo, cuando se tira de los valores de una tabla de Word, y traerlos a Excel:

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