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 !

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 ultima 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 informacion y empieza un ciclo
para intentar que la variable pase a llamarse cvar1, cvar2, cvar3, etc. hasta llegar al número de la ultima fila
y que tome cada variable tome el valor de una celda...



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 __
Este es el paso que no puedo realizar. Paso el codigo, 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)
Respuesta Responder a este mensaje
#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:#
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

Respuesta Responder a este mensaje
#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:%
hola, luis !

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
ultima 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 informacion y empieza un ciclo
para intentar que la variable pase a llamarse cvar1, cvar2, cvar3, etc.
hasta llegar al número de la ultima fila
y que tome cada variable tome el valor de una celda...



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 __
Este es el paso que no puedo realizar. Paso el codigo, 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)




Respuesta Responder a este mensaje
#4 Héctor Miguel
30/06/2007 - 06:11 | Informe spam
hola, luis !

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 ocurrio 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) podia 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 opcion de hacerlo automatico
ya que a todos les aconsejan hacerlo a mano. Hasta una proxima consulta. Gracias nuevamente. Luis



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.
Respuesta Responder a este mensaje
#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:
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:#
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

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida