Asignar un nombre a una columna

16/09/2007 - 15:58 por Daniel Pozzi | Informe spam
Hola, hay manera de asignarle un nombre a una columna de excel para hacer
referencia a ella desde vb usando el nombre y no la letra de la columna?
Gracias!

Preguntas similare

Leer las respuestas

#6 Daniel Pozzi
18/09/2007 - 15:18 | Informe spam
El código es largo, busca columnas q en la 1º línea tenga el mismo nombre q
lo q esta antes de "=" (Ej.: Type, Ej.:Routeparam) y agrega en la celda de
la línea correspondiente el valor q esta despues del "=", nada complicado.
Pero pensaba q quiza asignandole un nombre a la columna me podría ser mas
facil. En lugar de usar cells(L,15)=xxxxx podría usar algo como
cells(L,(Type))
Gracias por tu atencion!

Daniel


"Héctor Miguel" escribió en el mensaje
news:%23oF7QJf%
hola, Daniel !

si asumimos que el pase de datos lo estas haciendo por codigo...
podrias exponer la macro ?

saludos,
hector.

__ la consulta original __
Estoy pasando un txt a excel, con datos de este tipo:

[RGN40]
Type=0x4
Label=C 21
CityIdx4
RoadID"44
RouteParam=3,2,0,0,0,0,0,0,0,0,0,0
Data0=(-32.68378,-61.53327),(-32.68306,-61.53120),(-32.68256,-61.52972),(-32.68198,-61.52806),(-32.68140,-61.52647),(-32.68070,-61.52442),(-32.68025,-61.52331),(-32.67978,-61.52209),(-32.67909,-61.52037),(-32.67864,-61.51921),(-32.67819,-61.51803),(-32.67763,-61.51659),(-32.67735,-61.51588),(-32.67718,-61.51543),(-32.67671,-61.51421),(-32.67630,-61.51309),(-32.67611,-61.51258),(-32.67604,-61.51245),(-32.67587,-61.51200),(-32.67555,-61.51116),(-32.67525,-61.51045),(-32.67497,-61.50979)
Nod1=0,21717,0
Nod2=1,21888,0
Nod3=2,21890,0
Nod4=3,21891,0
Nod5=4,21892,0
Nod6=5,5735,0
Nod7=6,5740,0
Nod8=7,5746,0
Nod9=8,21963,0
Nod10=9,21966,0
Nod11,21956,0
Nod12,21958,0
Nod13,21834,0
Nod14,21769,0
Nod15,21954,0
Nod16,21773,0
Nod17,21866,0
Nod18,21823,0
Nod19,21832,0
Nod20,21827,0
Nod21 ,21829,0
Nod22!,20188,0
[END-RGN40]

Cuando encuentra [RGN40] ingresa los datos en una hoja llamada RGN40, y
con columnas por cada item:
Type, Label, CityIdx, etc... donde van los datos q estan despues del =.
Seria mas facil si pudiese tener un "nombre" para cada columna en lugar
de hacer referencia a su indice o a su letra.
Espero haber sido claro en el ejemplo...




Respuesta Responder a este mensaje
#7 Héctor Miguel
18/09/2007 - 21:43 | Informe spam
hola, Daniel !

El codigo es largo, busca columnas q en la 1º linea tenga el mismo nombre q lo q esta antes de "="
(Ej.: Type, Ej.:Routeparam) y agrega en la celda de la linea correspondiente el valor q esta despues del "="
nada complicado. Pero pensaba q quiza asignandole un nombre a la columna me podria ser mas facil.
En lugar de usar cells(L,15)=xxxxx podría usar algo como cells(L,(Type)) ...



puedes exponer [al menos] la parte de codigo que *busca* la columna correspondiente para lo que esta antes del "=" ?
y la contraparte que agrega en *la celda* lo que esta despues del "=" ?

saludos,
hector.
Respuesta Responder a este mensaje
#8 Daniel Pozzi
19/09/2007 - 03:57 | Informe spam
Function miracol(Texto)
c = 1
inicol:
If Cells(1, c) = Texto Then
miracol = c
Exit Function
Else
If Cells(1, c) = "" Then
Cells(1, c) = Texto
miracol = c
Exit Function
Else
c = c + 1
GoTo inicol
End If
End If
End Function

con esto tengo el indice de la columna, si no existe, la crea.
despues le doy valor a la celda




"Héctor Miguel" escribió en el mensaje
news:uuqbywi%
hola, Daniel !

El codigo es largo, busca columnas q en la 1º linea tenga el mismo nombre
q lo q esta antes de "="
(Ej.: Type, Ej.:Routeparam) y agrega en la celda de la linea
correspondiente el valor q esta despues del "="
nada complicado. Pero pensaba q quiza asignandole un nombre a la columna
me podria ser mas facil.
En lugar de usar cells(L,15)=xxxxx podría usar algo como cells(L,(Type))
...



puedes exponer [al menos] la parte de codigo que *busca* la columna
correspondiente para lo que esta antes del "=" ?
y la contraparte que agrega en *la celda* lo que esta despues del "=" ?

saludos,
hector.

Respuesta Responder a este mensaje
#9 Héctor Miguel
19/09/2007 - 04:42 | Informe spam
hola, Daniel !

con esto tengo el indice de la columna, si no existe, la crea. despues le doy valor a la celda ...



si lo que quieres es evitar que cada *busqueda* por algun titulo en columnas se re/inicie desde la columna 1
y asumiendo que no habra celdas vacias de por medio [segun el codigo que expones] -?-
prueba usando las funciones de hoja de calculo del objeto Application, que son [generalmente] *rapidas* :))
-> en el caso de VB, recuerda que se cambia al *Application* por la variable de su instanciacion [oExcel ?]

haz pruebas con la siguiente funcion [modificada/adaptada/...]

Function miracol(Texto) As Byte
With Application
If .CountIf(.Rows("1:1"), Texto) Then
miracol = .Match(Texto, .Rows("1:1"), 0)
Else
miracol = .CountA(.Rows("1:1")) + 1
.Cells(1, miracol) = Texto
End If
End With
End Function

saludos,
hector.

__ el codigo expuesto __
Function miracol(Texto)
c = 1
inicol:
If Cells(1, c) = Texto Then
miracol = c
Exit Function
Else
If Cells(1, c) = "" Then
Cells(1, c) = Texto
miracol = c
Exit Function
Else
c = c + 1
GoTo inicol
End If
End If
End Function
Respuesta Responder a este mensaje
#10 Daniel Pozzi
19/09/2007 - 23:32 | Informe spam
Gracias! funciona, ahora me queda probar si es mas rapido.
Saludos

Daniel



"Héctor Miguel" escribió en el mensaje
news:etdV9am%
hola, Daniel !

con esto tengo el indice de la columna, si no existe, la crea. despues le
doy valor a la celda ...



si lo que quieres es evitar que cada *busqueda* por algun titulo en
columnas se re/inicie desde la columna 1
y asumiendo que no habra celdas vacias de por medio [segun el codigo que
expones] -?-
prueba usando las funciones de hoja de calculo del objeto Application, que
son [generalmente] *rapidas* :))
-> en el caso de VB, recuerda que se cambia al *Application* por la
variable de su instanciacion [oExcel ?]

haz pruebas con la siguiente funcion [modificada/adaptada/...]

Function miracol(Texto) As Byte
With Application
If .CountIf(.Rows("1:1"), Texto) Then
miracol = .Match(Texto, .Rows("1:1"), 0)
Else
miracol = .CountA(.Rows("1:1")) + 1
.Cells(1, miracol) = Texto
End If
End With
End Function

saludos,
hector.

__ el codigo expuesto __
Function miracol(Texto)
c = 1
inicol:
If Cells(1, c) = Texto Then
miracol = c
Exit Function
Else
If Cells(1, c) = "" Then
Cells(1, c) = Texto
miracol = c
Exit Function
Else
c = c + 1
GoTo inicol
End If
End If
End Function




email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida