............ Foro Excel
Si no lo has hecho aún: REGISTRATE!!!

¿Como hacer que una celda contenga fórmulas desde VBA?

Ver el tema anterior Ver el tema siguiente Ir abajo

¿Como hacer que una celda contenga fórmulas desde VBA?

Mensaje por joseang1965 el Sáb Ago 20, 2011 11:12 pm

Necesito ayuda con un problema (en realidad son dos pero en el mismo contexto) para una aplicación VBA asociada a un CommandButton que estoy desarrollando.

He aquí el primer problema:

Supóngase que almaceno el valor de una celda en una variable del código de un "commandButton1_Click()", como sigue

Código:


Dim Mi_Valor as Integer
Dim Mi_Formula as String

Windows("Mi_Libro.xls").Activate
Sheets("hoja1").Select
Range("B3").Select
Mi_Valor = ActiveCell.Value

Hasta aquí, todo muy bien. Quiero ahora insertar una fórmula en una celda en blanco, en otra hoja (llamémosla "Hoja4"), que se refiera a otra celda de dicha hoja, multiplicada por la variable "Mi_Valor", para lo cual hago lo siguiente:

Código:

Sheets("Hoja4").Activate
With Sheets("Hoja4")
      Mi_Formula = "=L26*" + LTrim(Trim(Str(Mi_Valor)))
      .Range("L66").FormulaR1C1 = Mi_Formula
End With

Aparentemente, todo bien (no se produce error, pero cuando inspecciono la fórmula así creada me encuentro que la celda L66 contiene un valor de error "#¿Nombre?" y su contenido es lo siguiente:

Código:

='L26'*0,0911

Obsérvese que insertó comillas sencillas alrededor de L26, cosa que no es lo deseado.

El segundo error es aún más artificioso, se trata de hacer lo mismo, pero en lugar de una fórmula sencilla como la anterior, deseo insertar una función de Excel, como sigue:

Código:

Dim Mi_Valor as Integer
Dim Mi_Formula as String

Windows("Mi_Libro.xls").Activate
Sheets("hoja1").Select
Range("B3").Select
Mi_Valor = ActiveCell.Value
Sheets("Hoja4").Activate
With Sheets("Hoja4")
      Mi_Formula = "=Multiplo.Superior(D63*" + LTrim(Trim(Str(Mi_Valor))) + ";8)"
      .Range("L66").FormulaR1C1 = Mi_Formula
End With

Lo anterior genera un mensaje de error en tiempo de ejecución (tan explicativos como siempre):


Código:

Se ha producido el error '1004' en tiempo de ejecución:

Error definido por la aplicación o el objeto

Ya sé que en ambos casos estoy haciendo algo incorrecto, pero lo del primer caso me causa perplejidad por lo de las comillas sencillas.

Gracias una vez más

joseang1965

Masculino Cantidad de envíos : 6
Edad : 52
Ciudad - Pais : Caracas - Venezuela
Version de Excel : 2003
Fecha de inscripción : 18/08/2011

Volver arriba Ir abajo

Re: ¿Como hacer que una celda contenga fórmulas desde VBA?

Mensaje por Tatayayan el Dom Ago 21, 2011 1:06 pm

Hola el post es largo y no lo vi completo (por tiempo), prueba con:
Range("C2").FormulaLocal = "=A2+B2"
Claro es un ejemplo.
Range("D2").FormulaLocal = "=PROMEDIO(A2:B2)"
Otro ejemplo
avatar
Tatayayan
Moderador
Moderador

Masculino Cantidad de envíos : 319
Ciudad - Pais : Chamical- La Rioja - ARG
Fecha de inscripción : 20/11/2008

Volver arriba Ir abajo

Re: ¿Como hacer que una celda contenga fórmulas desde VBA?

Mensaje por Cacho R el Dom Ago 21, 2011 6:32 pm

Hola! José.
Por el primer error te sugiero que leas en la ayuda del VBA lo referente a las propiedades: FormulaR1C1 y Formula.
Al cabo reemplazarás:
.Range("L66").FormulaR1C1 = Mi_Formula

por:
.Range("L66").Formula = Mi_Formula

y notarás la diferencia.
_____________

Asimismo creo que te será de interés analizar la diferencia entre:

Código:
Dim Mi_Valor As Double
Dim Mi_Formula As String
Windows("Libro3").Activate
Sheets("hoja1").Select
Range("B3").Select
Mi_Valor = ActiveCell.Value

Sheets("Hoja4").Activate
With Sheets("Hoja4")
      Mi_Formula = "=L26*" + Str(Mi_Valor)
      .Range("L66").Formula = Mi_Formula
End With
y

Código:
Windows("Libro3").Activate
Sheets("Hoja4").Range("L66").Formula = "= L26 * " + Str(Sheets("Hoja1").Range("B3").Value)
______________________________

Por el segundo error (que es básicamente lo mismo que el primero), te sugiero leer en la ayuda del VBA sobre FormulaR1C1 y FormulaLocal.

Al cabo terminarás reemplazando:
.Range("L66").FormulaR1C1 = Mi_Formula

por:
.Range("L66").FormulaLocal = Mi_Formula

o puedes reemplazar:
Mi_Formula = "=Multiplo.Superior(D63*" + LTrim(Trim(Str(Mi_Valor))) + ";8)"
.Range("L66").FormulaR1C1 = Mi_Formula


por:
.Range("L66").Formula = "=CEILING(D63 * " & Str(Mi_Valor) & ", 8)"

Saludos Cacho R.
avatar
Cacho R
Moderador
Moderador

Masculino Cantidad de envíos : 210
Ciudad - Pais : Buenos Aires
Version de Excel : Desde Multiplan (pre-Excel) hasta 2010
Fecha de inscripción : 29/06/2011

Volver arriba Ir abajo

Re: ¿Como hacer que una celda contenga fórmulas desde VBA?

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.