problema al grabar macro

11/12/2007 - 17:31 por Guillermo | Informe spam
Antes de nada quiero felicitar a Hector Miguel por su maravillosa
labor, sin saberlo ya me ha ayudado muchas veces, sólo leyendo las
soluciones que ha ido presentando a todos los problemas de los
usuarios de este grupo he aprendido numerosas técnicas que me han dado
un nivel bastante bueno en el uso del progrma :D . Gracias por tu
esfuerzo.

Yo actualmente me he iniciado en labores de programación VBA que nunca
creí que iba a necesitar, pero me he puesto a grabar una macro para
reemplazar formulas y si no me equivoco me ha parecido entender que no
puedo reemplazarlas sino que tengo que o meter el valor o utilizar una
formula prediseñada ya, vamos a ver si me explico:

Por supuesto replace no funcionó esa era la primera opción que probé.

si uso range.value ya tengo que introducir la solución definitiva

pero si uso range.formula y no uso referencias a celdas sino a
parámetros de VBA pues no va la fórmula

Por ej.

Sub replace4()
'nofunciona alternar formula con parámetros
Dim truerange As Range
Dim str As String
Dim num As Double
Set truerange = Range("a11", Cells(1084, 107))
If IsArray(truerange) Then
ar = truerange
row1 = truerange.Row
column1 = truerange.Column
lastrow = row1 + UBound(ar, 1) - 1
lastcolumn = column1 + UBound(ar, 2) - 1
For irow = row1 To lastrow
For icol = column1 To lastcolumn
str = Cells(irow, icol).Formula
If Mid(str, 1, 1) = "<" Then
num = CDbl(Mid(str, 2, 1000))
formu = "=" & num & "/2"
Cells(irow, icol).Formula = formu
End If
Next icol
Next irow
End If
End Sub

Con la siguiente macro yo quería cambiar unos valores inferiores a un
mínimo por la mitad de ese mínimo. El caso es que la macro no funciona
y supongo que es porque no puede incorporar el parámetro num a la
función dividir.

En otra ocasión quería reemplazar promedio por fcamg siendo fcamg una
función prediseñada por mi, pero no va tampoco me pregunto si podré
que hacer que fcamg funcione dentro de la macro con los argumentos de
promedio.

En algunos casos me gustaría dejar constancia de la formula utilizada
para así saber como he obtenido el valor. Quiero decir que al menos el
problema está resuelto para el signo < y creo que puedo hacerlo para
lo de la función promedio, pero me quedo sin saber que valores he
obtenido por mis calculos y que fórmula he utilizado para ello, hasta
ahora la manera más sencilla ha sido dejar la fórmula pero, ¿puedo
seguir haciendo esto si utilizo una macro? .

Por favor, cualquiera que pueda aportarme algo sobre este tema tan
interesante quedo a la espera de su respuesta. Pongo este mismo Post
en el grupo microsoft.public.excel.programming
 

Leer las respuestas

#1 Héctor Miguel
12/12/2007 - 03:48 | Informe spam
hola, Guillermo ! (no por que los omita, dejo de agradecer tus comentarios) ;)

__ 1 __
... me he puesto a grabar una macro para reemplazar formulas y si no me equivoco me ha parecido entender que
no puedo reemplazarlas sino que tengo que o meter el valor o utilizar una formula predisenada ya, vamos a ver si me explico:
Por supuesto replace no funciono esa era la primera opcion que probe.
si uso range.value ya tengo que introducir la solucion definitiva
pero si uso range.formula y no uso referencias a celdas sino a parametros de VBA pues no va la formula
Con la siguiente macro yo queria cambiar unos valores inferiores a un minimo por la mitad de ese minimo.
El caso es que la macro no funciona y supongo que es porque no puede incorporar el parametro num a la funcion dividir.



1) (hasta aqui)... solo comentarte que si es posible dividir (o modificar) formulas ya depositadas en sus celdas (p.e. /2) pero...
es mejor usar un procedimiento +/- como el siguiente:
a) introduce en alguna celda libre, el numero por el que necesitas dividir (p.e. 2)
b) usa el metodo tradicional para copiar: -> ctrl+C
c) selecciona (p.e.) todas las celdas que contengan formulas (o algun rango determinado)
c.1) ctrl+i / (boton) especial...
c.2) marca: celdas con formulas (y deja marcada solo la opcion de numeros) y acepta
d) elige (menu) edicion / pegado especial... -> marca la opcion de "valores" y marca la opcion de "dividir" (y acepta)
-> pulsa {esc} y revisa las formulas "nuevas" y sus resultados ;)

__ 2 __
En otra ocasion queria reemplazar promedio por fcamg siendo fcamg una funcion predisenada por mi
pero no va tampoco me pregunto si podre que hacer que fcamg funcione dentro de la macro con los argumentos de promedio.



2) seria necesario "ver" el codigo y que expongas (de preferencia +/- exactamente) el uso pretendido del mismo -???-

__ 3 __
En algunos casos me gustaria dejar constancia de la formula utilizada para asi saber como he obtenido el valor.
Quiero decir que al menos el problema esta resuelto para el signo < y creo que puedo hacerlo para lo de la funcion promedio
pero me quedo sin saber que valores he obtenido por mis calculos y que formula he utilizado para ello
hasta ahora la manera mas sencilla ha sido dejar la formula pero, puedo seguir haciendo esto si utilizo una macro?.



3) aqui tambien se necesita que comentes detalles mas concretos (uso pretendido de los codigos, obtencion de la formula, etc.)
recuerda que "lo que se ve" (desde este lado del mensaje) es solamente lo que comentas (y con la misma "claridad") :))

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ codigo expuesto __
Sub replace4()
'no funciona alternar formula con parametros
Dim truerange As Range
Dim str As String
Dim num As Double
Set truerange = Range("a11", Cells(1084, 107))
If IsArray(truerange) Then
ar = truerange
row1 = truerange.Row
column1 = truerange.Column
lastrow = row1 + UBound(ar, 1) - 1
lastcolumn = column1 + UBound(ar, 2) - 1
For irow = row1 To lastrow
For icol = column1 To lastcolumn
str = Cells(irow, icol).Formula
If Mid(str, 1, 1) = "<" Then
num = CDbl(Mid(str, 2, 1000))
formu = "=" & num & "/2"
Cells(irow, icol).Formula = formu
End If
Next icol
Next irow
End If
End Sub

Preguntas similares