Insertar una fórmula de excel desde vba

Acudo a la sabiduría popular ante un problema que me va a volver loco y no doy como solucionar... Os comento un poco, tengo una base de datos access y estoy modificando con código la acción de algunos botones... Uno de los cuales lo que quiero que haga es modificar una hoja de calculo, lo hace todo bien, todo funciona excepto lo que os paso a comentar, cuando intento insertar la fórmula "bdsuma" en una celda que ya la contiene pero la que yo quiero insertar está algo modificada, es decir sustituir una por otra... No hay forma me da errores en tiempo de ejecución os pongo el código de la sub para que ol hagáis una idea vale:
Sub OrganizaHoja(cadSQL As String, _
libro As String, _
hoja As String)
Dim appExcel As Object 'Excel.Application
Dim rst As Recordset 'DAO.Recordset
Dim db As Database
Dim fld As Object 'DAO.Field
Dim fila As Integer
Dim columna As Integer
Dim contador As Integer
Dim tamtabla As Integer
Dim dif As Integer
' abrimos excel, lo hacemos invisible y abrimos el libro
' que nos interesa
Set appExcel = CreateObject("Excel.Application")
appExcel.Visible = True
appExcel.Workbooks.Open Filename:="C:\Documents and Settings\rafael\Escritorio\mantenimiento\Partes_04.xls"
' abrimos la tabla temporal para poder trabajar en un momento dado con ella
Set db = CurrentDb()
Set rst = db.OpenRecordset("SELECT Count(tabla_mes_elegido_temporal.numero) AS CuentaDenumero FROM tabla_mes_elegido_temporal;")
rst.MoveFirst
tamtabla = rst!CuentaDenumero
'tamtabla = db.OpenRecordset("Select count * from tabla_mes_elegido_temporal")
' MsgBox (tamtabla)
'abrimos la hoja del libro
With appExcel.Sheets("MAYO")
'contamos el numero de filas que tiene la hoja
'fila termina estando situada en la primera vacia
fila = 3
columna = 2
contador = 0
While .Cells(fila, columna) <> ""
fila = fila + 1
contador = contador + 1
Wend
' MsgBox (contador)
'si vamos a meter mas registros de los que habia en la hoja
'copiamos la formula en la columna G (la 6)y metemos la suma en la ultima fila de dicha columna
If contador < tamtabla Then
.Cells(tamtabla + 3, 7) = .Cells(contador + 3, 7) 'metemos la suma de la columna G en su celda
While fila <> tamtabla + 3
.Cells(fila, 7) = .Cells(fila, 6) * 0.1456
fila = fila + 1
Wend
End If
'si vamos a meter menos registros de los que habia en la hoja
'borramos los registros antigüos y subimos la formula de la suma
If contador > tamtabla Then
.Cells(3 + tamtabla, 7) = .Cells(fila, 7) 'metemos la formula de la suma
While fila <> tamtabla + 2 ' borramos las filas desde fila-1 hasta 2
.Cells(fila, 1) = ""
.Cells(fila, 2) = ""
.Cells(fila, 3) = ""
.Cells(fila, 4) = ""
.Cells(fila, 5) = ""
.Cells(fila, 6) = ""
fila = fila - 1
Wend
End If
' calculamos el numero de incidencias registradas este mes segun su campo autonumérico.
.Cells(4, 13) = tamtabla
'Dim num
' Establece una variable para la celda B5 en Sheet1.
'Set num = .Range("L7")
'num.Select
' Inserta una fórmula en la celda B5.
.Range("L7").Clear
.Range("L7").Formula = "=BDSUMA($E$2:$G$" & tamtabla + 3 & ";" & Chr(34) & "MANP" & Chr(34) & ";P7:P8)"
End With
rst.Close
' activar estas dos lineas si se quiere cerrar
' y guardar los cambios automáticamente
'appExcel.ActiveWorkbook.Close True
'appExcel.Quit
Set appExcel = Nothing
End Sub
'*********************************************************
También he probado .cells(7,12).fórmula y nada, también probé a hacer un .range().select y luego un activecell. Fórmula o formulaR1C1 y nada... En fin estoy desesperado si alguien me puede orientar de porqué está fallando se lo agradecería, porque no hay forma de insertar esta fórmula en la dichosa celda.

1 respuesta

Respuesta
1
Prueba a introducir el valor de la fórmula en una variable y aplicarlo luego a la celda, creo que así ya no debería dar error, algo así:
Dim str As String
str = "=BDSUMA($E$2:$G$" & tamtabla + 3 & ";" & Chr(34) & "MANP" & Chr(34) & ";P7:P8)"
.Range("L7").Formula = str
Gracias dani pero eso también está probado... en realidad es lo mismo porque la variable cadena va a guardar lo mismo. También falla.
A ver, que he dejado la respuesta a medias.
He probado tu código y está correcto, el error que devuelve es un error de Excel no de Access, y es que la fórmula es probable que no esté correcta (sin tener el resto de la hoja no me es posible saber por qué).
Lo que trataba de decirte es: da valor a la variable y mediante el debug para la ejecución en la línea que da el error. Inspecciona (con la aplicación parada) el valor de la variable y cópialo en Excel en la celda L7 y comprueba si la fórmula es correcta o da algún error en Excel. Esto creo que te puede dar la pista definitiva.
Si tienes más dudas pregúntame.
Suerte,
Dani
Pues gracias por tu esfuerzo pero... también he estado probando estos días eso, pensé que podría ser porque en vba debes poner el nombre en ingles de la fórmula que creo que es dsum si no me equivoco y tampoco, daba el mismo fallo, la fórmula si que está correcta porque poniéndole en lugar de un = delante le pones @ y te lo mete como cadena, actuliazando luego en la hoja de excel a mano esa celda con un simple enter ya te coge el valor que le corresponda ... en fin... creoq ue voy a optar por eso, no veo otra forma de insertar la fórmula como tal. Gracias. Espero tus reproches je je.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas