rango (??)

19/01/2004 - 15:16 por dorian+ | Informe spam
hola a todos !

desde mi aplicación en acces tengo que ingresar una fórmula en una celda que me sume el siguiente rango:

la primerr celda del rango esta dada por (3,xlcolumna) y la última por (fila,xlcolumna)

lo hice de la siguiente forma:

Set rangeSuma = appExcel.sheets(1).Range(appExcel.sheets(1).cells(3, xlColumna), appExcel.sheets(1).cells(fila, xlColumna))
appExcel.sheets(1).cells(fila + 2, xlColumna).Formula = "=Sum(" & rangeSuma & ")"


pero conseguí mas una ensalada que lo que estaba buscando\ y por supuesto no logro que funcione\ alguien me puede dar una mano?\ muchas gracias\ dorian+

Preguntas similare

Leer las respuestas

#6 dorian+
04/02/2004 - 20:01 | Informe spam
hola, héctor

muchas gracias, como siempre por tu ayuda y explicaciones mas que didáctitas\ contigo uno aprende mas de lo que pregunta :)))

te agradezco la sugerencia sobre los bucles for... to ... next / for ... each... in ... next \ y de hecho los he reemplazado, siempre que me ha sido posible, en todo mi proyecto... utilizando las propiedades .fields.count y .recordcount (es muy común ver rutinas que recorren un recordset utilizando la instrucción for... each... )\

supuse que mi problema podía deberse a que las variables para .cells tomaban valores menores que uno, pero te soy sincero que revisé bien el código y no encontré conflictos, por lo que precisamente estaba bastante desorientado en cuanto al origen del erro
héctor, hay un problema en como queda la planilla cargada con el código que me pasaste; pues en cada pasada (en cada fila de la planilla) se "come" un campo\ ejemplo (queda algo así)

XXXXX XXXXX XXXXX XXXX
XXXXX XXXXX XXXX
XXXXX XXXX

el error debe estar en esta parte del código

Do While Not rst.EOF And columna <= rst.Fields.Coun
For columna = 1 To rst.Fields.Coun
For fila = 1 To rst.RecordCoun
.Cells(1, columna) = rst.Fields(columna - 1).Nam
.Cells(fila + 2, columna) = rst.Fields(columna - 1).Valu
rst.MoveNex
Nex
rst.MoveFirs
Nex
Loo

pero por mas que lo estoy haciendo "en papel" no encuentro el error :((

otro problema que tuve fue con esos puntos suspensivos en el código que te pasé que correspondían a instrucciones de formato que tuve que modificar a causa de los cambios propuestos igual quedó bien\ el único problema lo he tenido con la siguiente parte

With .Range(.Cells(rst.RecordCount, 1), .Cells(rst.RecordCount, rst.Fields.Count)).Addres
.LineStyle = xlContinuou
.Weight = xlThic
.ColorIndex = xlAutomati
End Wit

que al ejecutarse me dice que "el objeto no admite esta própiedad o método"\ cómo lo puedo solucionar ? (o hay algun de "tipeo"?

espero tu respuesta y te agradezco tu ayud
dorian+
Respuesta Responder a este mensaje
#7 Héctor Miguel
05/02/2004 - 04:50 | Informe spam
hola, dorian !

... en cada pasada (... fila ...) se "come" un campo ... queda algo así:
XXXXX XXXXX XXXXX XXXXX
XXXXX XXXXX XXXXX
XXXXX XXXXX
el error debe estar en esta parte del codigo:
Do While Not rst.EOF And columna <= rst.Fields.Count
For columna = 1 To rst.Fields.Count
For fila = 1 To rst.RecordCount
.Cells(1, columna) = rst.Fields(columna - 1).Name
.Cells(fila + 2, columna) = rst.Fields(columna - 1).Value
rst.MoveNext
Next
rst.MoveFirst
Next
Loop
pero por mas que lo estoy haciendo "en papel" no encuentro el error :(((



=> [asi... 'en papel']... tampoco lo encuentro <\°-°/>
es 'como si'... se estuviera repitiendo [algun] otro bucle 'recortando' [en cada pasada] el 'alcance' de un 'For...Next'
'disminuyendo' LA SIGUIENTE variable [p.e. fila = fila -1...Next y/o... columna = columna - 1...Next]
=> lo que [ahora] veo es... una 'machacadera' en la fila 1 de cada columna, 'poniendo' [por cada fila] el 'Name' del rst...Name :((
___________ cambia lo siguiente ...
For columna = 1 To rst.Fields.Count
For fila = 1 To rst.RecordCount
.Cells(1, columna) = rst.Fields(columna - 1).Name
For columna = 1 To rst.Fields.Count
.Cells(1, columna) = rst.Fields(columna - 1).Name
For fila = 1 To rst.RecordCount
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
... esos puntos suspensivos en el codigo que te pase ... correspondian a instrucciones de formato
... igual quedo bien, el unico problema lo he tenido con la siguiente parte:
With .Range(.Cells(rst.RecordCount, 1), .Cells(rst.RecordCount, rst.Fields.Count)).Address
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
... al ejecutarse me dice que "el objeto no admite esta propiedad o metodo", como lo puedo solucionar ? (o hay algun "tipeo"?)



=> el objeto que NO 'admite' las propiedades que aplicas 'dentro' del bloque 'With' es... =>una cadena DE TEXTO< que es 'el resultado' de ['rescatar'] la propiedad 'Address' de un objeto 'Range' :((
elimina [al final de la linea With] =>.Address<= [punto+Address]
[me parece que tambien] puedes eliminar el punto [antes de] en cada propiedad 'Cells' dentro del objeto 'Range' [?]

¿comentas?
saludos,
hector.
Respuesta Responder a este mensaje
#8 Héctor Miguel
06/02/2004 - 02:13 | Informe spam
hola, dorian !

... foro de access ... sugirieron otra forma de pasar todo el recordset con un par de instrucciones:
.Range("A3").Select
.ActiveCell.CopyFromRecordset rst



=> una manera mas 'directa' seria: =>.Range("a3").CopyFromRecordSet rst<= [una sola instruccion] :))

funciona o.k. [???]
... unico inconveniente ... algunos campos (... los de fecha e importe) no me quedan con los formatos que necesito
... (como podria solucionar esto?)
... por otra parte ... (y es lo mas importante) es que al llegar a la instruccion: .ActiveCell.CopyFromRecordset rst
... mensaje 438 en tiempo de ejecucion: "el objeto no admite esta propiedad o metodo"
... puede ser que se trate de un error de sintaxis?



=> [creo que]... aqui me he quedado 'perdido' :( o... ¿funciona ok? o... ¡ presenta el error 438 !!! [???]
la instruccion 'CopyFromRecordSet' [al menos, en excel] es 'aplicable' a un objeto [DAO] Recordset
no te la 'sugeri' porque en el codigo que expusiste 'note' que cambiabas la declaracion de la variable [rst] ...
a un tipo de datos 'Object' en lugar del tipo de datos 'requerido' para ello =>Dim rst As Object 'DAO.Recordset< ademas de que no se 'aprecian' las cadenas que [posiblemente] 'construyes' para...
- la consulta [para indicarle a excel 'como' y 'de donde' 'lea' de la base de datos]
- la 'clase' de conexion entre los 'servidores/proveedores' de las aplicaciones
- el 'tipo' de acceso a la base de datos [...]
=> quizas 'regresandole' el tipo de datos 'DAO.Recordset' a la variable 'rst' se solucione lo del error 438 <
la discusión en el foro de acces la puedes ir siguiendo en el siguiente hilo:



=> deja darme 'una vuelta' por el foro :))

por el momento volvi a...l bucle for each... in :((((((( para salir del paso
pero sigo consultando para resolverlo ... aunque sigo rompiendome la cabeza trantando de encontrar ... el error.



=> ¿estas seguro de que NO 'quedo' [alg]una instruccion 'recortando el alcance'? [p.e. fila = fila - 1 o... columna columna - 1]

con referencia al otro problema ... no solo era ... un cut & paste ... sino ... agregar "sobre que?" debia dar el formato (... un


borde)

=> creo que yo [tambien] lo 'obvie' demasiado :(( [disculpa] :))

y si... los puntos antes de Cells son necesarios pues sino me da mensajes de error :(



=> era una suposicion que [segun yo] 'valia la pena' de probar :((

[seguimos en contacto] :))
saludos,
hector.
Respuesta Responder a este mensaje
#9 dorian+
09/02/2004 - 20:06 | Informe spam
héctor

inexplicablemente funciona bien en la primer pasada, es decir cuando hace la primer pasada copia los datos sin problemas, pero para la segunda ya empiezan los problemas\ en realidad, disculpa por confundirte :

los errores son esos que seà±alé

• algunos campos (sobre todo los de fecha e importe) no me quedan con los formatos que necesito... (cómo podrà­a solucionar ésto?)• por otra parte tengo el siguiente código

..Range("A3").Selec
.ActiveCell.CopyFromRecordset rs

à

..Range("A3").CopyFromRecordset rst (como tu sugeriste

y al llegar a la instrucción: .ActiveCell.CopyFromRecordset rs

me sale el mensaje 438 en tiempo de ejecución ("el objeto no admite esta propiedad o método)\ puede ser que se trate de un error de sintaxis



por otra parte si en vez de comenzar en la celda "a3" quisiera comenzar en la "celda activa" trato de utilizar este código

With appExcel.Sheets(1
.Selec

fila = ActiveCell.Ro
Columna = ActiveCell.Colum
While Not rst.EO
For Each fld In rst.Field
.Cells(fila, Columna) = fld.Valu
Columna = Columna +
Nex
Columna =
fila = fila +
rst.MoveNex
Wen
End Wit

pero al ejecutarse me dice que "se requiere un objeto" \ cual es el problema si estoy utilizando el mismo código, solamente cambie la forma de asignar los valores iniciales para fila y columna ( o està¡ allà­ el problema ?

(sigo utilizando en bucle for .. ich... en lugar del for ...to ... next... pues todavà­a no encontré solución al problema de que se fuera "comiendo" una columna en cada pasada) :((

un abrazo\ y como siempre, muchas gracias
Respuesta Responder a este mensaje
#10 Héctor Miguel
10/02/2004 - 04:41 | Informe spam
hola, dorian !

(1) -
inexplicablemente funciona bien en la primer pasada ... para la segunda ya empiezan los problemas [...]
algunos campos ... no me quedan con los formatos que necesito... (como podría solucionar esto?)



- considerando que haces 'el pase' a un libro 'nuevo'... los campos 'toman' el formato 'general'
[y puesto que NO 'existen' formatos/estilos 'aplicados' a las celdas que 'reciben'] habria que 'darles' el formato 'apropiado'

(2) -
.Range("A3").Select
.ActiveCell.CopyFromRecordset rst
o
.Range("A3").CopyFromRecordset rst (como tu sugeriste)
al llegar a la instrucción: .ActiveCell.CopyFromRecordset rst
me sale el mensaje 438 en tiempo de ejecucion ("el objeto no admite esta propiedad o metodo)
puede ser que se trate de un error de sintaxis?



- la instruccion 'CopyFromRecordSet' [al menos, en excel] es 'aplicable' a un objeto [DAO] Recordset
no te la 'sugeri' porque en el codigo que expusiste 'note' que cambiabas la declaracion de la variable [rst] ...
a un tipo de datos 'Object' en lugar del tipo de datos 'requerido' para ello =>Dim rst As Object 'DAO.Recordset< ademas de que no se 'aprecian' las cadenas que [posiblemente] 'construyes' para...
- la consulta [para indicarle a excel 'como' y 'de donde' 'lea' de la base de datos]
- la 'clase' de conexion entre los 'servidores/proveedores' de las aplicaciones
- el 'tipo' de acceso a la base de datos [...]
quizas 'regresandole' el tipo de datos 'DAO.Recordset' a la variable 'rst' se solucione lo del error 438

(3)-
sigo utilizando for...ich en lugar for...to...next pues todavia no encontre solucion de que se fuera "comiendo" una columna [...]



- ¿estas seguro de que NO 'quedo' [alg]una instruccion 'recortando el alcance'? [p.e. fila = fila - 1 o... columna = columna - 1]

(4)
por otra parte si en vez de comenzar en la celda "a3" quisiera comenzar en la "celda activa" trato de utilizar este codigo:
With appExcel.Sheets(1)
.Select
fila = ActiveCell.Row
Columna = ActiveCell.Column
While Not rst.EOF
For Each fld In rst.Fields
.Cells(fila, Columna) = fld.Value
Columna = Columna + 1
Next
Columna = 1
fila = fila + 1
rst.MoveNext
Wend
End With
pero ... dice que "se requiere un objeto" cual es el problema si estoy utilizando el mismo codigo
solamente cambie la forma de asignar los valores iniciales para fila y columna (o esta alli el problema?)



- probablemente [sobre todo, si estas 'usando' excel 'desde' access]... el punto ANTES de 'ActiveCell' [???]

referente a la discusion en el foro de access [y como 'pudiste ver'] NO hay falla 'aparente' ;)
[aunque]... como 'solamente' estas exponiendo PARTES de un codigo mas 'complejo' :\
no hay forma de 'detectar' si existe/n otro/s procedimiento/s que se esten interfiriendo :(

si el codigo es muy largo [y si lo prefieres] podrias enviarmelo al correo [solo quita el 'NO...SPAM...PLS']
saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida