Discussion:
Novata en Macros!!!
(demasiado antiguo para responder)
vayta
2006-08-24 20:53:52 UTC
Permalink
Hola:

Necesito ayuda por favor!!!!!!!!!! Alguno de ustedes sería tan amable
de decirme como puedo meter fórmulas de Excel en Visual Basic?????

Resulta que necesito las fórmulas de BUSCARV, SUMA.SI, SI..... y
algunas otras ..... pero no se como ponerlas en Visual !!!!!

De antemano.. les agradezco su atención.
zz
2006-08-24 21:06:36 UTC
Permalink
primero necesitamos saber dos cosillas:

necesitas ejecutar las formulas y procesar el resultado en VBA

o necesitas escribirlas en una celda


"vayta" <***@gmail.com> wrote in message news:***@i3g2000cwc.googlegroups.com...
Hola:

Necesito ayuda por favor!!!!!!!!!! Alguno de ustedes sería tan amable
de decirme como puedo meter fórmulas de Excel en Visual Basic?????

Resulta que necesito las fórmulas de BUSCARV, SUMA.SI, SI..... y
algunas otras ..... pero no se como ponerlas en Visual !!!!!

De antemano.. les agradezco su atención.
vayta
2006-08-24 21:10:27 UTC
Permalink
Necesito escribir la fórmula en visual..... y que el resultado lo
mande a una celda en Excel..... espero que me haya explicado bien o....
de plano.... no te entendi (ja ja ja)
zz
2006-08-24 21:20:09 UTC
Permalink
ok

para llamar una formula de excel y guardarla en una variable:

myVariable= Application.WorksheetFunction."aqui te aparece una lista con las
funciones"


ejemplo:
copia y pega esto en el ide de visual basic

Private Sub calcula_grafica()
grafica= Application.WorksheetFunction.Rept("|", 10)
MsgBox myvar
End Sub

te debe aparecer una ventanita con un monton de "|"


recuerda, mi separador de arguementos es la ",", no ";", ademas, los nombres
de las formulas estan en ingles.

buscar= lookup
buscarv=vlookup
buscarh=hlooup
si=if
repetir=rept
sumar=sum
...

etc.


"vayta" <***@gmail.com> wrote in message news:***@75g2000cwc.googlegroups.com...
Necesito escribir la fórmula en visual..... y que el resultado lo
mande a una celda en Excel..... espero que me haya explicado bien o....
de plano.... no te entendi (ja ja ja)
vayta
2006-08-24 21:35:54 UTC
Permalink
Si me sale el cuadrito que mencionas.... pero traté de poner
VLookup..... y me sale un cuadrito con un error....que dice: No se
puede obtener la propiedad VLookup de la clase WorksheetFunction......
zz
2006-08-24 21:42:36 UTC
Permalink
no logro reproducirlo, quiza puede ser debido a los argumentos que le pasas
a la formula,

puedes , por favor , pegar el codigo donde te marca el error?



"vayta" <***@gmail.com> wrote in message news:***@i3g2000cwc.googlegroups.com...
Si me sale el cuadrito que mencionas.... pero traté de poner
VLookup..... y me sale un cuadrito con un error....que dice: No se
puede obtener la propiedad VLookup de la clase WorksheetFunction......
vayta
2006-08-24 21:47:22 UTC
Permalink
Como mencioné antes... soy una novata en estos asuntos... seguramente
lo estoy poniendo mal.... pero.. tu decidirás eso... aqui va:

Range("C5") = Application.WorksheetFunction.VLookup(B5, cliente, 11, 0)
= True
zz
2006-08-24 21:52:17 UTC
Permalink
Post by vayta
Range("C5") = Application.WorksheetFunction.VLookup(B5, cliente, 11, 0)
= True

el problema esta en el true, el argumento "ordenado" "cierto /falso" de la
formula, debe estar dentro de los parentesis.

la variable "cliente" , esta definido dentro del entorno de visual basic?,

al argumento al que le asignas el valor "0", prueba a dejarlo en blanco .


pruebas y comentas, sale? =)




"vayta" <***@gmail.com> wrote in message news:***@i3g2000cwc.googlegroups.com...
Como mencioné antes... soy una novata en estos asuntos... seguramente
lo estoy poniendo mal.... pero.. tu decidirás eso... aqui va:

Range("C5") = Application.WorksheetFunction.VLookup(B5, cliente, 11, 0)
= True
vayta
2006-08-24 22:00:12 UTC
Permalink
Ya pusé el True entre paréntisis.. solo... acompañado.... y
nada!!!!!, tambien quité el "0".. y nada!!!!!

La variable "cliente" es una "matriz" que tengo en excel... con el
nombre de todos los clientes (obvio verdad....) que va de A5:AA358
zz
2006-08-24 22:10:41 UTC
Permalink
puede ser por eso.

prueba con esta modificacion:

with activesheet
Range("c5").FormulaLocal = "buscarv(B5, cliente, 11, , True)" ' de este
modo, la formula se escribe directamente dentro de la celda que quieres.
end with

el detalle es la variable cliente, al no estar declarada dentro del entorno
de VBA, sino en el de application.

imagina que el programa busca el nombre "cliente" dentro de la base de
datos llamados "clientes", pero tu lo tienes guardado en una base de datos
llamada "aplicacion", al no encontrarla , se genera el error




"vayta" <***@gmail.com> wrote in message news:***@i42g2000cwa.googlegroups.com...
Ya pusé el True entre paréntisis.. solo... acompañado.... y
nada!!!!!, tambien quité el "0".. y nada!!!!!

La variable "cliente" es una "matriz" que tengo en excel... con el
nombre de todos los clientes (obvio verdad....) que va de A5:AA358
vayta
2006-08-24 22:22:46 UTC
Permalink
Soy un fraude con estas cosas.......

Ya hice la modificación.... efectivamente... me escribe la fórmula en
la celda... pero no me hace la operación.....

Si el problema es la variable cliente... como hago para que VBA
reconozca este grupo de celdas.... hay alguna manera en que pueda
nombrar este rango en VBA???
zz
2006-08-24 22:27:58 UTC
Permalink
prueba a declarar la variable con el tipo "range" al inicio del
procedimiento

Dim Nombre as range
Nombre="tu rango de celdas va aquí"


y al dejar de utilizar la variable



set Nombre= nothing



"vayta" <***@gmail.com> wrote in message news:***@74g2000cwt.googlegroups.com...
Soy un fraude con estas cosas.......

Ya hice la modificación.... efectivamente... me escribe la fórmula en
la celda... pero no me hace la operación.....

Si el problema es la variable cliente... como hago para que VBA
reconozca este grupo de celdas.... hay alguna manera en que pueda
nombrar este rango en VBA???
vayta
2006-08-24 22:42:25 UTC
Permalink
+ ignorancia!!!!

Ahora me sale el error 91..... Variable de objeto o bloque With no
establecido
zz
2006-08-24 22:46:07 UTC
Permalink
disculpa , pero ahorita ya voy de salida de mi trabajo, si gustas que te
siga ayudando me puedes poner tu correo [ dizfrazado por supuesto] y lo
vemos mas a detalle cuando llegue a mi casa, te parece?
Post by vayta
+ ignorancia!!!!
Ahora me sale el error 91..... Variable de objeto o bloque With no
establecido
Héctor Miguel
2006-08-25 04:23:48 UTC
Permalink
hola, ???

recapitulando un poco en relacion con tus comentarios en las consultas, expones lo siguiente:

1) ... como puedo meter formulas de Excel en Visual Basic
... necesito las formulas de BUSCARV, SUMA.SI, SI... y algunas otras
... pero no se como ponerlas en Visual !

2) ... escribir la formula en visual.... y que el resultado lo mande a una celda en Excel

3) ... Range("C5") = Application.WorksheetFunction.VLookup(B5, cliente, 11, 0) = True

4) ... La variable "cliente" es una "matriz" que tengo en excel... con el nombre de todos los clientes... que va de A5:AA358

a) si quieres que por codigo se 'deposite' una formula con funciones de hojas de calculo en celdas, tienes [al menos] dos opciones:
a) usar la propiedad .Formula = "=aqui escribes la formula con las funciones EN ingles y la coma como separador de argumentos...'
b) usar la propiedad .FormulaLocal = "=aqui escribes la formula con las funciones EN el idioma donde se vaya a ejecutar tu macro Y...
-> conociendo [+/- exactamente] el separador de argumentos del excel donde se ejecute tu macro
-> ya sea por idioma o configuracion regional <= OJO
ejemplo con las funciones en ingles:
-> Range("c5").Formula = "=vlookup(b5,cliente,11,0)"
ejemplo con funciones en castellano y punto_y_coma como separador de argumentos:
-> Range("c5").FormulaLocal = "=buscarv(b5;cliente;11;0)"

c) o puedes usar la grabadora de macros, mientras escribes la formula 'a mano', y revisas despues el codigo que se ha generado :))

b) si lo que necesitas es 'usar' las funciones de excel desde vba para 'depositar' SOLO EL RESULTADO en celdas de hojas de calculo... -?-
[la propiedad WorksheetFunction te mostrara las funciones en ingles y como 'argumentos' deberas pasar los objetos 'completos'] ejemplo:
-> Range("c5") = Application.WorksheetFunction.VLookup(Range("b5"), Range("cliente"), 11, False)
o... si el rango 'cliente' [A5:AA358] se encuentra en una hoja distinta de la celda donde se depositara el rasultado...
-> Range("c5") = Application.WorksheetFunction.VLookup(Range("b5"), Worksheets("otra hoja").Range("cliente"), 11, False)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
vayta
2006-08-25 19:17:49 UTC
Permalink
Hola Héctor

Oye muchas gracias por tus repuestas.

Fijate que con la información que me diste hice 5 macros diferentes.

1. Usé la grabadora de macros y obtuve este resultado:
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],cliente,11)"
la duda que me surgió en esta opción es porque pone RC(-1)?????? no
se que significa eso.

2. Use: Range("c6").Formula = "=vlookup(b6,cliente,11,0)" y funcionó
perfectamente...

3. En la siguiente puse: Range("c5").FormulaLocal =
"=buscarv(b5;cliente;11;0)" y fijate que en esta me marcó un error:
"Error definido por la aplicación o el objeto", asi es que esta macro
no funcionó.... o a la mejor meti mal un dato....

4. En esta opción copié lo siguiente: Range("c8") =
Application.WorksheetFunction.VLookup(Range("b8"), Range("cliente"),
11, False)
y tambien funcionó!!!!

5. Y por último.... esta: Range("c9") =
Application.WorksheetFunction.VLookup(Range("b9"),
Worksheets("Clientes").Range("cliente"), 11, False), que me dió el
resultado sin mayor problema.

Solo quiero comentarte algo...... en las opciones que marqué como 1 y
2.... a la hora de que cambio mi valor de la columna "c"....
pareciera.. como si la macro corriera automáticamente.... solo tengo
que capturar otro número y me da el resultado de inmediato....
Cosa que no sucede con la opción 4 y 5... aqui debo cambiar mi valor
de la columna "c" e irme a VBA o bien con un fabuloso botón... y es
asi como me da el resultado.... o sea... en resumen.... no me da el
resultado automaticamente.

Les agradezco la atención que le pusieron a mi petición de auxilio!!!
tienen toda mi admiración.... muchas gracias.

Atte. Valery
Héctor Miguel
2006-08-26 00:39:55 UTC
Permalink
hola, Valery !
1. ... grabadora de macros... resultado: ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],cliente,11)"
la duda... es porque pone RC(-1)?????? no se que significa eso.
2. ... Range("c6").Formula = "=vlookup(b6,cliente,11,0)" y funciono perfectamente...
3. ... Range("c5").FormulaLocal = "=buscarv(b5;cliente;11;0)"
y... marco un error: "Error definido por la aplicacion o el objeto"
asi es que esta macro no funciono.... o a la mejor meti mal un dato.... [...]
... en las opciones que marque como 1 y 2... a la hora de que cambio mi valor de la columna "c"...
pareciera.. como si la macro corriera automaticamente.... solo tengo que capturar otro numero y me da el resultado de inmediato...
Cosa que no sucede con la opción 4 y 5... aqui debo cambiar mi valor de la columna "c" e irme a VBA o bien con un fabuloso boton...
y es asi como me da el resultado.... o sea... en resumen.... no me da el resultado automaticamente.
1) la grabadora de macros, las referencias a rangos [por omision] las hace usando un estilo de notacion de R1C1/L1C1/F1C1/...
supongo que al ser el estilo que utilizan propiedades de referencia a rangos de algunos objetos 'especiales' [tablas dinamicas, graficos]
vba se 'prepara' para no tener que andar haciendo conversiones posteriores, y es la razon por la que utiliza .FormulaR1C1 -?-

2) la instruccion RC[-1] significa que la referencia es a la celda que se encuentra una columna MENOS en la misma fila que 'ActiveCell'
es parte del estilo de notacion y referencias R1C1/L1C1/F1C1/... [segun el idioma del excel] ;)

3) la falla que obtienes con la numero 3: -> Range("c5").FormulaLocal = "=buscarv(b5;cliente;11;0)"
probablemente es por el 'separador de argumentos LOCAL' [coma ?... punto y coma ?... otro ?] -???-
[revisa los comentarios en el inciso b del punto a en la propuesta anterior] :))

si cualquier duda... comentas ?
saludos,
hector.
vayta
2006-08-28 22:17:38 UTC
Permalink
Hola Héctor ..

Muchas gracias por la explicación del RC(-1), como menciono en mi
primer mensaje soy una NOVATA en estas cosas de las macros... asi es
que... necesito investigar un poco mas para poder entender esos
términos...

En cuanto a la sugerencia que me haces con respecto al error que me
dió al introducir una de las fórmulas.... tenias toda la razón...
solo cambie las ";" por "," y funcionó perfectamente, muchas gracias.

Y aprovechandome de tu amabilidad.. quisiera preguntarte otra
cosita.... resulta que dentro de este mismo archivo... tengo una hoja
en excel en la cual.. en la primer columna (o sea "A"), tengo valores
en diferentes celdas... por ejemplo... en A1 engo un valor en A10
otro... en A15 otro y asi sucesivamente....no es un número de
renglones constante... hay alguna manera de que por medio de una
macro..... me busque la primer celda de la columna A con un valor....
copie ese valor, lo pegue en otra hoja... regrese a buscar el siguiente
valor que encuentre en la columna A lo copie de nuevo.... y asi
sucesivamente "n" número de veces????

Cualquier sugerencia que puedieras darme... te lo agradecería mucho.

Atte. Valery
Héctor Miguel
2006-08-29 03:34:30 UTC
Permalink
hola, Valery !
... dentro de este mismo archivo... tengo una hoja.. en la primer columna... tengo valores en diferentes celdas
... por ejemplo... en A1 engo un valor en A10 otro... en A15 otro y asi sucesivamente...no es un numero de renglones constante
... manera de que... una macro.... me busque la primer celda de la columna A con un valor... copie ese valor
lo pegue en otra hoja... regrese a buscar el siguiente valor que encuentre en la columna A lo copie de nuevo.... y asi sucesivamente ...
suponiendo que necesitas copiar -solo- de la columna A de la hoja1 a la siguiente fila 'disponible' en la columna A de la hoja2...

Worksheets("hoja1").Range("a:a").SpecialCells(xlCellTypeConstants).Copy _
Worksheets("hoja2").Range("a" & Rows.Count).End(xlUp).Offset(1)

si necesitas que los 'valores' que se copian a la hoja2 sea solo numericos... o solo valores de texto... o ???
complementa la parte del 'specialcells(...)' +/- como sigue:
- solo valores numericos... -> SpecialCells(xlCellTypeConstants, xlNumbers)
- solo valores de texto... -> SpecialCells(xlCellTypeConstants, xlTextValues)

podria haber mas variantes y alternativas :)) [si comentas algun detalle adicional] ;)

saludos,
hector.
vayta
2006-08-29 20:39:36 UTC
Permalink
Héctor!!!!!..... seguro ya me sueñas con tantas preguntas que te
hago.....

Creo que no te di muchos detalles..... pero aqui van....

Tengo... Hoja1
No. de Fila Columna A
1 10
2
3 1
4 6
5
6
7
8 200
9
10 5

Entonces..... como podrás ver, los números de la columna "A", pueden
estar separados desde una, dos, tres o mas filas. Ahora lo que yo
quiero es:

En... Hoja2
No. de Fila Columna A
1
2
3 10
4 1
5 6
6 200
7 5
8
9
10


Si por medio de una macro.... puedo hacer que busque el primer valor de
la columna A de la hoja 1 y lo copie en la hoja 2, despues regrese a la
hoja 1, busque el siguiente número de la columna A, ignorando
obviamente las celdas en blanco, copie el siguiente número y lo ponga
en la hoja 2 debajo del número anterior y asi sucesivamente....

Espero haberme dado a entender.

Con respecto a la respuesta que me das.... la puse en VBA y me dice:
"No se encontraron celdas"......

Te agradecería mucho tu ayuda.... otra vez .

Atte. Valery
Héctor Miguel
2006-08-30 01:00:41 UTC
Permalink
hola, Valery !

necesito preguntarte una o dos cosas mas :))

-> por que el salto en hoja 2 de dos filas facias antes de depositar los valores que encuentre la macro ?
-> los valores de la hoja 1... son 'resultado' de formulas ?... son valores de entrada directa en las celdas ?... ambos casos ?
-> las filas que 'se ven' como vacias en la hoja 1... estan 'realmente' vacias ? [o hay alguna formula del tipo =si(...."",....) ?

algun otro detalle 'en el tintero' ?

saludos,
hector.

__ la consulta original __
Creo que no te di muchos detalles... pero aqui van... Tengo... Hoja1
No. de Fila Columna A
1 10
2
3 1
4 6
5
6
7
8 200
9
10 5
... los numeros de la columna "A", pueden estar separados desde una, dos, tres o mas filas.
Ahora lo que yo quiero es: En... Hoja2
No. de Fila Columna A
1
2
3 10
4 1
5 6
6 200
7 5
8
9
10
Si por medio de una macro... puedo hacer que busque el primer valor de la columna A de la hoja 1 y lo copie en la hoja 2
despues regrese a la hoja 1, busque el siguiente numero de la columna A, ignorando obviamente las celdas en blanco
copie el siguiente numero y lo ponga en la hoja 2 debajo del número anterior y asi sucesivamente...
Con respecto a la respuesta que me das.... la puse en VBA y me dice: "No se encontraron celdas"...
vayta
2006-08-30 21:16:32 UTC
Permalink
Hola Hector

En la hoja 2 me salto dos filas porque son las filas correpondientes a
los títulos de mi hojita.
Los valores de la hoja 1 estoy tratando de que sean por fórmulas....
de hecho es una fórmula tipo =SI(... bla bla bla...), combinada con
BUSCARV y efectivamente, todas las filas deben de tener esa fórmula.
Héctor Miguel
2006-08-31 01:05:59 UTC
Permalink
hola, Valery !
En la hoja 2 me salto dos filas porque son las filas correpondientes a los titulos de mi hojita.
Los valores de la hoja 1 estoy tratando de que sean por formulas...
de hecho es una formula tipo =SI(... bla bla bla...), combinada con BUSCARV y efectivamente
todas las filas deben de tener esa formula.
segun los datos que expones, prueba con una macro +/- como la siguiente:
deberas adaptar/corregir/modificar/... donde los datos 'reales' sean diferentes de cualquier supuesto
[p.e. estoy suponiendo que las filas 1 y 2 de la hoja 2 YA tienen sus titulos] :))

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

Sub Traspasa_datos()
Application.ScreenUpdating = False
With Worksheets("hoja1")
If .AutoFilterMode Then .Cells.AutoFilter
.[a1].AutoFilter Field:=1, Criteria1:=">0"
With .AutoFilter.Range
With .Offset(1).Resize(.Rows.Count - 1)
.Copy Worksheets("hoja2").[a65536].End(xlUp).Offset(1)
End With
End With
.[a1].AutoFilter
End With
End Sub
vayta
2006-08-31 22:30:34 UTC
Permalink
Hello Hector

Muchas gracias por tu ayuda, funcionó muy bien.

Atte. Valery

Continúe leyendo en narkive:
Loading...