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

Preguntas similare

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
Respuesta Responder a este mensaje
#2 Guillermo
19/12/2007 - 16:20 | Informe spam
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



Gracias Hectormiguel:

El tema se sigue en
http://groups.google.com/group/micr...4d96cd1032

En cuanto a 1, no son formulas al principio sino valores como <0,01 o
<0,2, por eso no puedo usar ir a:

En cuanto a 2,yo creo que da igual cual sea la funcion si fuera otra
función tb vale, pero ya la he escrito allí.

En cuanto a 3 es que si meto la formula en la celda mato dos pajaros
de un tiro y salvo el valor y el procedimiento y eso es precisamente
lo que no puedo hacer (veras que las macros replace 5 &6 funcionan
pero no sirven para eso)". cell.formula="=1/2*num " no funciona al
introducir la fórmula

Yo prefiero este foro por ser en español pero dado que aquel es más
apropiado para el tema y para no estar dando vueltas pues sigo por
allí
Respuesta Responder a este mensaje
#3 Héctor Miguel
20/12/2007 - 03:07 | Informe spam
hola, Guillermo !

En cuanto a 1, no son formulas al principio sino valores como <0,01 o <0,2, por eso no puedo usar ir a:



solo cambia en el procedimiento sugerido para el siguiente punto e inciso:
de: -> c.2) marca: celdas con formulas (y deja marcada solo la opcion de numeros) y acepta
a: -> c.2) marca: constantes (y deja marcada solo la opcion de numeros) y acepta

En cuanto a 2, yo creo que da igual cual sea la funcion si fuera otra funcion tb vale, pero ya la he escrito alli.



toma en consideracion los dos tipos de procedimientos en vba: Sub o Function

a) los procedimientos Sub, SI pueden modificar rangos, objetos, propiedades, etc. etc. etc.
PERO... NO pueden ser "llamados" para ejecutarse desde condiciones de cambios por formulas en celdas
a menos que te la empieces a volver menos sencilla, administrando los eventos de la/s hoja/s (como el '_calculate')

b) los procedimientos Function, SOLO pueden devolver un resultado (y solamente) EN la celda desde la que son llamados
PERO... NO pueden modificar otras celdas, ni otros objetos, ni sus propiedades, (ni etc. etc. etc.)

En cuanto a 3 es que si meto la formula en la celda mato dos pajaros de un tiro y salvo el valor y el procedimiento
y eso es precisamente lo que no puedo hacer (veras que las macros replace 5 & 6 funcionan pero no sirven para eso)".
cell.formula="=1/2*num " no funciona al introducir la formula



por las razones expuestas en los incisos a) y b) del punto anterior, deberas tomar una decision...
- utilizar procedimientos Sub (SIN que puedan ser llamados desde formulas en celdas o usar tambien los eventos)...
- utilizar procedimientos Function (SIN que puedan modificar otras propiedades, celdas, objetos, etc.)

Yo prefiero este foro por ser en espanol pero dado que aquel es mas apropiado para el tema
y para no estar dando vueltas pues sigo por alli



(desde luego que) puedes participar en los foros que quieras/gustes/necesites/... ;)
lo de "aquel es mas apropiado"... lo tomo (exclusivamente) por su nombre ?... "programming"
"este"... (aunque su nombre sea mas "generico")... ya lleva incluido "el tema" (de la programacion) :D

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#4 Héctor Miguel
20/12/2007 - 03:22 | Informe spam
hola (de nuevo), Guillermo !

(por otro lado) veo que Bill esta "enfrascado" en una lucha por convencionalismos regionales :))

(tambien) es poco/nada recomendable usar espacios y tabulaciones para (solo tratar de)
-> "simular" una tabla (de hoja de calculo) en el cuerpo de los mensajes a los grupos de noticias :-((

-> tampoco el adjuntar archivos en los mensajes te da la "seguridad" de que alguien lo abrira (generalmente nadie)
y obtendras mas rapido alguna propuesta :-\

-> es mejor si comentas/expones/... cuales son los rangos, tipo de datos y las formulas que ya utilizas
todo esto, de preferencia -> +/- exactamente
(por obviedad entre lo que "se ve" desde este lado del mensaje y la situacion "real" que SOLO tu tienes "a la vista")

-> en el "peor" de los casos, si es realmente necesario adjuntar un archivo, solicita atencion por correo particular (no por el foro)
y/o sube tu archivo de ejemplo en algun sitio de hospedaje (gratuito ?) para que este disposicion de mas voluntarios ;)

saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida