Variable que cambie de nombre

29/06/2007 - 04:25 por luis | Informe spam
Hola amigos:

Tengo problemas en lograr con una misma variable la macro le pueda asignar
un nombre diferente en cada pasada.

Al inicio se obtiene el valor de la primera fila ocupada y luego el de la
última fila con datos (la diferencia entre esos valores son la cantidad de
variables que se necesitan para asignarles un valor). Enseguida se pasa a
valores dicha información y empieza un ciclo para intentar que la variable
pase a llamarse cvar1, cvar2, cvar3, etc. hasta llegar al número de la
última fila y que tome cada variable tome el valor de una celda . Este es el
paso que no puedo realizar. Paso el código, para ver si me puedo explicar
mejor:

pfil = Range("D6").Offset(0, 0).Address(RowAbsolute:=False,
ColumnAbsolute:=False)
ufil = ActiveCell.End(xlDown).Offset(0, 0).Address(RowAbsolute:=False,
ColumnAbsolute:=False)
cpfil = Val(Range(pfil).Row)
cufil = Val(Range(ufil).Row)

Do While cpfil <= cufil
cpfil = cpfil + 1
cvar & cpfil - 5 = Range("D" & cfil).Value
Loop
'(como la primera fila siempre es la 6 se le resta 5 para intentar empezar
desde cvar1)

Muchas gracias de antemano.
Luis

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
29/06/2007 - 07:41 | Informe spam
hola, luis !

Mostrar la cita
1) [hasta donde se]... los nombres de las variables NO se pueden crear/modificar/... *al vuelo*...
una vez iniciada la ejecucion del codigo, o usas las declaradas, o dejas *inventadas* algunas en medio del codigo
[depende de si al inicio de tus modulos usas la declaracion *Option Expicit* y/o tus *costumbres* de programacion] -?-

2) creo que lo que necesitas son variables *de matriz* donde puedes *rellenar* sus elementos con la informacion requerida

3) si expones/comentas/.. [+/- exactamente] que pretendes hacer con el contenido de las celdas de 'ese' rango...
[probablemente] se podria sugerir alguna alternativa para trabajar con sus contenidos -?-

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

___ el codigo expuesto __
Mostrar la cita
#2 Anonimo
30/06/2007 - 00:41 | Informe spam
Hola, luis, prueba este código modificado y me comentas:

pfil = Range("D6").Offset(0, 0).Address(RowAbsolute:=False,
ColumnAbsolute:=False)
ufil = ActiveCell.End(xlDown).Offset(0, 0).Address(RowAbsolute:=False,
ColumnAbsolute:=False)
cpfil = Val(Range(pfil).Row)
cufil = Val(Range(ufil).Row)

ReDim Variable(1 To cufil) 'Agregado

Do While cpfil <= cufil
cpfil = cpfil + 1
Variable(cpfil - 5) = Range("D" & cpfil).Value 'Modificado
Loop

Chao.



"luis" wrote in message
news:#
Mostrar la cita
#3 luis
30/06/2007 - 05:02 | Informe spam
Ante todo, muchas gracias por responder.

Lo que intento hacer es abrir distintos archivos en formato *.txt y que no
tienen separador (coma, tab, espacio, etc) ni el mismo ancho de caracteres.
Se me ocurrió que si ingresaba las posiciones donde excel debe "cortar" cada
campo en celdas (en el ejemplo "D6" en adelante y segun los campos del
archivo) podía hacer que la variable pasara con un bucle por dichas celdas y
fuese tomando el valor de cada una de ellas para abrir luego el archivo,
algo asi:

Workbooks.OpenText Filename:=cfile01, _
Origin:=xlMSDOS, StartRow:=1, DataType:=xlFixedWidth,
FieldInfo:=Array( _
Array(cvar1, 1), Array(cvar2, 1), _
Array(cvar3, 1), Array(cvar4, 1), Array(cvar5, 1), _
Array(cvar6, 1), Array(cvar7, 1), Array(cvar8, 1), _
Array(cvar9, 1)), TrailingMinusNumbers:=True

He revisado en conversaciones anteriores pero me parece que no tengo opción
de hacerlo automático, ya que a todos les aconsejan hacerlo a mano. Hasta
una próxima consulta. Gracias nuevamente.
Luis

"Héctor Miguel" escribió en el mensaje
news:%
Mostrar la cita
#4 Héctor Miguel
30/06/2007 - 06:11 | Informe spam
hola, luis !

Mostrar la cita
no tan aprisa, mi estimado Luis :))
si lo que necesitas es reemplazar una matriz [como quien dice]... *constante* para el *fieldinfo* del tipo *:=array(array(.*
por otra matriz [mas bien]... *dinamica* que pueda ser tomada de *ciertas* celdas en alguna hoja... [me parece que]...
-> te hizo falta revisar conversaciones como las siguientes:
http://tinyurl.com/2fc2lm
http://tinyurl.com/2f3dqf
http://tinyurl.com/2xkklb

y [probablemente] existe todavia la alternativa de utilizar una instruccion del tipo Evaluate(...)
para asignar a una matriz los *cortes* de columnas y los tipos de formato/... para los datos [matriz de 2 dimensiones] ;)

revisa las conversaciones sugeridas y...
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
#5 luis
30/06/2007 - 16:43 | Informe spam
Hola William

EL código que escribes logra el cometido de que vaya cambiando de valor (3,
4, 5, etc) pero lo que había pensado era algo asi: "variable & (x)", donde
(x) es el número que tiene que cambiar para asi las distintas variables que
se creen toman el nombre de variable3, variable4, variable5, etc; y de esa
manera tendre muchas a las que se les puede asignar un valor en cada pasada
ya que a la derecha del signo "=" el bucle va bajando de a una fila por vez
y designa una celda diferente (D6, D7, D8, etc).
Muchas gracias por tu tiempo.
Luis

escribió en el mensaje
news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida