2010-09-08 4 views
12

¿Cómo debo definir cadenas grandes en VBA? ¿Hay una mejor manera que codificar algo como el de abajo?¿La mejor manera de definir una cadena vba grande, es decir, el equivalente heredoc?

Dim largeString as String 
largeString = "This is a long block of text that I want to fill " & _ 
       "into a form field. I need to make sure I pay attention " & _ 
       "to spacing and carriage return issues while doing so. " & _ 
       "I also have to use quotes liberally, the concatenation " & _ 
       "operator, and the continuance underscore to make sure " & _ 
       "VBA can parse my code." & vbCr & vbCr & _ 
       "It's kind of a pain in the ass and I wish I could use " & _ 
       "a heredoc instead, letting me copy and paste the block" & _ 
       "of text I need from another source and shove it into " & _ 
       "a string." 

Editar: Uf, y hay un límite de 25 líneas de continuación también? Tanto para sangrado agradable y 80 caracteres de ancho, que solo me da suficiente espacio para un par de párrafos decentes.

+0

o crea un String on fly 'Dim s como String' y' s = String (1337, "a") ' –

Respuesta

11

No, esto es tan bueno como se pone.

Para cadenas muy largas, puede ser una opción para mantener la cadena en un archivo separado, o utilizar alguna función de la aplicación. Por ejemplo, en Word, es posible que desee almacenar la cadena en una variable de documento, como texto oculto o Autotexto. En Excel, puede considerar una hoja oculta para almacenar constantes largas de cadena.

+0

Sí, estaba considerando algo así. Otra opción sería hacer un formulario que nunca se muestre que contenga cuadros de texto que contengan el texto que quiero y luego simplemente use el .Valor() de ellos. El único inconveniente es que puedo ver el mantenimiento de una solución como esa siendo una gran pesadilla. Sin embargo, el mantenimiento de VBA no es como caminar en el parque:/ – Oesor

+0

Me gusta esta respuesta, pero tal vez algo así como una secuencia de texto en un archivo de texto. Tal vez eso es demasiado sin embargo? –

+0

@Chris: No estoy seguro de a qué te refieres. En realidad, mantener la cadena en un archivo de texto fue la primera opción que mencioné. –

9

Yo prefiero hacerlo de esta manera:

Dim lStr As String 
lStr = "" 

lStr = lStr & "This is a long block of text that I want to fill " 
lStr = lStr & "into a form field. I need to make sure I pay attention " 
lStr = lStr & "to spacing and carriage return issues while doing so. " 
lStr = lStr & "I also have to use quotes liberally, the concatenation " 
lStr = lStr & "operator, and the continuance underscore to make sure " 
lStr = lStr & "VBA can parse my code." & vbCr & vbCr 
lStr = lStr & "It's kind of a pain in the ass and I wish I could use " 
lStr = lStr & "a heredoc instead, letting me copy and paste the block" 
lStr = lStr & "of text I need from another source and shove it into " 
lStr = lStr & "a string." 

Creo que este método es más fácil de trabajar que el método de continuación de línea y no hay límite de número de línea para entrar con esta forma. Puede comentar líneas individuales, lo que es útil para depurar cadenas de SQL.

Al manejar cadenas largas, me resulta más fácil utilizar nombres cortos de variables porque VBA no tiene el equivalente del operador +=. largeString = largeString & "" ocupa demasiado espacio y se vuelve repetitivo, por lo que acortar el nombre de la cadena hace que el formato sea algo soportable.

Para bloques de texto muy grandes, escríbalo en un editor de texto y cópielo y péguelo en su procedimiento. Luego copie

lStr = lStr & " 

y péguelo al comienzo de cada línea. El editor de VBA agregará automáticamente las comillas al final de la línea, haciendo que el proceso sea simple.

+1

Me gusta esta sintaxis para la continuación de la línea, pero pregunto "¿Por qué"? ¿Por qué alguien necesitaría una cadena tan grande que no podría colocarse en otro lugar? Y esto me recuerda a todos esos bandidos de VBA que piensan que la altura de la programación es la concatenación. –

+1

@ChrisHayes tal vez porque se le pide a uno que mantenga la consulta * dentro * del archivo Excel, y uno pretenda tener en este modo que como un valor de celda? – pablete

+1

El límite aquí es de 64k: así de grande puede ser un solo módulo de código VBA. – Blackhawk

Cuestiones relacionadas