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.
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 de dtorrado
1