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

#1 Héctor Miguel
20/01/2004 - 04:56 | Informe spam
hola, dorian !

desde ... acces ... ingresar una formula 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)
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 & ")"
... consegui mas una ensalada que lo que estaba buscando y ... no logro que funcione [...]



probablemente estas 'obteniendo' un error 13 en tiempo de ejecucion: 'el tipo no coincide' :((

1.- al usar la expresion =>ObjetoRango.Formula = "=Sum(" & rangeSuma & ")"< se 'entiende' que la variable =>rangeSuma<= ES de tipo texto [o 'posible de interpretar' como texto]

2.- al usar la instruccion =>Set rangeSuma = appExcel.sheets(1)[...]< la aplicacion [excel] 'espera' que la referencia que se establece 'corresponda' a un objeto [en este caso de tipo 'range']

3.- 'obviamente' la referencia establecida =>Set rangeSuma<= es de un 'tipo' [Range] que ...
NO 'coincide' con el tipo de variable 'esperado' [String] por la expresion =>.Formula = "=Sum(" & rangeSuma & ")"< => una variable de tipo texto que 'indique' la direccion del rango que sera el argumento de la funcion suma < ['convendria' declarar la variable 'rangeSuma' como 'String']
[dicho sea 'de paso'... NO es 'necesaria' una instruccion 'Set' para 'llenar' variables que NO sean de algun 'tipo' de objeto]

=> modifica el 'llenado' de la variable [rangeSuma] a:
With appExcel.Sheets(1).
rangeSuma = Range(.Cells(3, xlColumna), .Cells(fila, xlColumna)).Address
End With

lo que 'dejaria' una referencia al rango de tipo 'absoluta' [p.e. $A$3:$C$45]
si necesitas referencias 'relativas', agrega a la propiedad 'Address' =>False<= [o CERO] para los argumentos 'fila/columna_absoluta'
[p.e.] rangeSuma = Range(.Cells(3, xlColumna), .Cells(fila, xlColumna)).Address(False, False) 'dejaria' A3:C45

saludos,
hector.
Respuesta Responder a este mensaje
#2 dorian+
20/01/2004 - 15:01 | Informe spam
hola héctor !!

agradecerte, como siempre, tu tiempo y explicación, que ha sido por demás didáctica
un abrazo\ dorian+

p.s. si, si, el mensaje de error fue el que indicaste ( ...13 en tiempo de ejecucion...) y la solución... per-fec-ta !! ;)
Respuesta Responder a este mensaje
#3 Héctor Miguel
21/01/2004 - 03:56 | Informe spam
hola, dorian !

p.s. si, si, [...]



:)))

gracias por el 'feed-back'

saludos,
hector.
Respuesta Responder a este mensaje
#4 dorian+
03/02/2004 - 00:26 | Informe spam
héctor:

estoy teniendo un problemilla con esta función...

la planilla se carga con los datos que le llegan a traves de un bucle for... next desde access...

basicamente el código principal es el siguiente:


Sub ExportarAExcel(cadSQL As String, _
NombreCabeceraDestino As String)


Dim appExcel As Excel.Application 'Excel.Application
Dim rst As Object 'DAO.Recordset
Dim fld As Object 'DAO.Field
Dim fila As Integer
Dim columna As Integer
Dim xlColumna As Integer
Dim rangeSuma As String


Set rst = CurrentDb.OpenRecordset(cadSQL)

If Not (rst.EOF) Then



Set appExcel = CreateObject("Excel.Application")
appExcel.Visible = True
appExcel.Workbooks.Add




fila = 1
columna = 1
With appExcel.Sheets(1)
.Select
For Each fld In rst.Fields
.Cells(fila, columna) = fld.Name
columna = columna + 1
Next

xlColumna = columna - 1

fila = 3
columna = 1
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



With appExcel.Sheets(1)

.
.

.Cells(fila + 2, xlColumna - 1).Value = "TOTAL"
rangeSuma = Range(.Cells(3, xlColumna), .Cells(fila - 1, xlColumna)).Address
.Cells(fila + 2, xlColumna).Formula = "=Sum(" & rangeSuma & ")"
.Cells(fila + 2, xlColumna).Font.Bold = True
.Cells(fila + 3, 1).Select

.
.

End With


en la primer pasada se ejecuta sin problema, pero en la segunda me da error 1004 en tiempo de ejcución: error en el "método range" de objeto global en la instrucción:

rangeSuma = Range(.Cells(3, xlColumna), .Cells(fila - 1, xlColumna)).Address

cuando reviso las variables estan con los valores correctos asi que no entiendo porque sale este mensaje\ cual puede ser el problema??? pues realmente hice un cut & paste de la expresión que me sugeriste
como siempre te agradezco tu ayuda y tiempo !!

saludos\ dorian+











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+
Respuesta Responder a este mensaje
#5 Héctor Miguel
04/02/2004 - 06:59 | Informe spam
hola, dorian !

... problemilla ... con los datos que le llegan a traves de un bucle for... next desde access [...]
... en la primer pasada se ejecuta sin problema, pero en la segunda
... me da error 1004 en tiempo de ejcucion: error en el "metodo range" de objeto global en la instruccion:
... rangeSuma = Range(.Cells(3, xlColumna), .Cells(fila - 1, xlColumna)).Address
... cuando reviso las variables estan con los valores correctos [...]



te comento algunos puntos que [posiblemente] podrian 'agilizar' un poquitin el proceso :))
1.- un bucle del tipo 'For Contador = Inicio To Fin [...] Next' es mas 'rapido' que...
un bucle del tipo 'For Each Elemento In Coleccion [...] Next'
2.- la falla que obtienes al establecer la direccion del 'rangeSuma' se debe a que...
[probablemente] en 'algun momento' las variables para '.Cells' [fila -1] o [xlColumna] 'quedan' MENOR QUE UNO
[no se 'en que momento' las revisas... pero es probable que sea como 'supongo'] :((
3.- para que no tengas que [extra-]'manejar' las variables de filas y columnas...
pudieras 'aprovechar' las propiedades de un 'RecordSet' siguientes:
=> .Fields.Count => para el numero de columnas
=> .RecordCount => para el numero de filas
4.- prueba 'sustituyendo' en tu codigo a lo siguiente:
[desde donde 'inicializas' los valores a 1 para 'fila' y 'columna'... hasta donde estableces la propiedad 'Bold']
______
[... ...]
rst.MoveFirst
With appExcel.Sheets(1)
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
rangeSuma = Range(.Cells(3, rst.Fields.Count), .Cells(rst.RecordCount + 2, rst.Fields.Count)).Address
With .Cells(rst.RecordCount + 5, rst.Fields.Count)
.Offset(, -1) = "TOTAL"
.Formula = "=Sum(" & rangeSuma & ")"
.Font.Bold = True
.Offset(, -2).Select
End With
End With
[... ...]
¨¨¨¨¨¨¨¨¨¨¨¨¨¨
saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida