Ayuda con código de macro

01/10/2008 - 01:32 por Mk | Informe spam
Hola!

De verdad que no lo entiendo...mi nivel de conocimiento en vb es muy
básico pero he estado haciendo pruebas y mirando por internet y no
encuentro la razón por la que me aparece siempre un error cuando ejecuto
una parte de una macro muy sencilla.

Escribo el código:

Rem Definimos el Nombre del artículo

Range("H4").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(R3C6,'C:\Seguimiento Comercial x Artículo
2009\BBDD\FY 09\[BAYPA.xls]Todos pvp'!C1:C2,2,0)"

Rem Definimos el Ba del artículo

'Range("K4").Select
'ActiveCell.FormulaR1C1 = _
' "=VLOOKUP(R3C6,'C:\Seguimiento Comercial x Artículo
2009\BBDD\FY 09\[BAYPA.xls]Todos pvp'!C1:C11,11,0)"

Rem Definimos el Pa del artículo

'Range("N4").Select
'ActiveCell.FormulaR1C1 = _
' "=VLOOKUP(R3C6,'C:\Seguimiento Comercial x Artículo
2009\BBDD\FY 09\[BAYPA.xls]Todos pvp'!C1:C13,13,0)"

Aparentemente lo único que hace esta parte de la macro es que en las 3
celdas anteriores (H4, K4 y N4) escribe la función Buscarv. Siempre que
la ejecuto me aparece un mensaje de error que dice:

"Recursos insuficientes. Seleccione menos datos o cierre aplicaciones."

Pues bien, acepto el mensaje, elijo la opción de depurar y siempre me
dirige al código de K4 ó en su defecto N4. Si anulo ese código funciona
correctamente por ejemplo en H4 y no me muestra ningún error.

Algo que tampoco entiendo es que abro el fichero que contiene la fuente
de datos y aparentemente todo está ok pero al intentar cerrarlo me
aparece de nuevo la ventana con el mensaje anterior.

Quizás la solución es algo muy simple para alguien que controla del tema
pero a mí me tiene desquiciado, ¿me podéis dar alguna idea?.

Muchas gracias y perdón por el ladrillo.

Mkastur

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
01/10/2008 - 02:29 | Informe spam
hola, 'anonimo/a' !

1) si estas aplicando la propiedad ".FormulaR1C1"
no deberias indicar el rango donde esta la tabla en el mismo estilo de notacion ? (R1C1)
porque en el codigo estas depositando una formula con estilos de referencias "combinadas"
- el dato que se busca... -> R3C6
- la tabla donde se busca > C1:C11 <= esta deberia ser en el mismo estilo: => R1C3:R11C3

2) OJO... si la tabla donde se busca incluye UNA SOLA COLUMNA (C1:C11 C1:C13)
como es que solicitas en devolucion el dato de la columna 2, 11 o 13 ??????

saludos,
hector.

__ OP __
De verdad que no lo entiendo...mi nivel de conocimiento en vb es muy basico pero he estado haciendo pruebas y mirando por internet
y no encuentro la razon por la que me aparece siempre un error cuando ejecuto una parte de una macro muy sencilla.
Escribo el codigo:

Rem Definimos el Nombre del articulo
Range("H4").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(R3C6,'C:\Seguimiento Comercial x Articulo 2009\BBDD\FY 09\[BAYPA.xls]Todos pvp'!C1:C2,2,0)"

Rem Definimos el Ba del artículo
'Range("K4").Select
'ActiveCell.FormulaR1C1 = _
' "=VLOOKUP(R3C6,'C:\Seguimiento Comercial x Articulo 2009\BBDD\FY 09\[BAYPA.xls]Todos pvp'!C1:C11,11,0)"

Rem Definimos el Pa del artículo
'Range("N4").Select
'ActiveCell.FormulaR1C1 = _
' "=VLOOKUP(R3C6,'C:\Seguimiento Comercial x Articulo 2009\BBDD\FY 09\[BAYPA.xls]Todos pvp'!C1:C13,13,0)"

Aparentemente lo unico que hace esta parte de la macro es que en las 3 celdas anteriores (H4, K4 y N4)
escribe la funcion Buscarv. Siempre que la ejecuto me aparece un mensaje de error que dice:
"Recursos insuficientes. Seleccione menos datos o cierre aplicaciones."

Pues bien, acepto el mensaje, elijo la opcion de depurar y siempre me dirige al codigo de K4
o en su defecto N4. Si anulo ese codigo funciona correctamente por ejemplo en H4 y no me muestra ningun error.

Algo que tampoco entiendo es que abro el fichero que contiene la fuente de datos y aparentemente todo esta ok
pero al intentar cerrarlo me aparece de nuevo la ventana con el mensaje anterior.

Quizas la solucion es algo muy simple para alguien que controla del tema pero a mi me tiene desquiciado, me podeis dar alguna idea?.
Respuesta Responder a este mensaje
#2 Mk
01/10/2008 - 10:47 | Informe spam
Héctor Miguel escribió:
hola, 'anonimo/a' !



Hola!

Como decía en mi primer post mi conocimiento de vb es practicamente nulo
y diría que simplemente fruto de la observación del código obtenido a
través de la grabadora de macros pero:

1) si estas aplicando la propiedad ".FormulaR1C1"
no deberias indicar el rango donde esta la tabla en el mismo estilo de notacion ? (R1C1)
porque en el codigo estas depositando una formula con estilos de referencias "combinadas"
- el dato que se busca... -> R3C6
- la tabla donde se busca > C1:C11 <= esta deberia ser en el mismo estilo: => R1C3:R11C3



Lo que yo intuyo que es ".FormulaR1C1" es basicamente una instrucción
para que se "escriba" la fórmula o datos especificados a continuación y
siempre en la celda que especifiques en la propia fórmula.

ActiveCell.FormulaR1C1 = _
"=VLOOKUP(R3C6,'C:\Seguimiento Comercial x Artículo\BBDD\FY 09\[Gama
FY09 GM0.xls]GAMA 09 ES'!C1:C5,5,0)"

En este caso interpreto que es escribir la función BuscarV en la fila 3
columna 6, es decir, la celda F3.

En la tabla que se busca yo he interpretado que no habría ningún
problema en definir la matriz simplemente por las columnas
(Columna1:Columna11) porque no veo la diferencia de especificarlo por
ejemplo como A1:K50000)


2) OJO... si la tabla donde se busca incluye UNA SOLA COLUMNA (C1:C11 C1:C13)
como es que solicitas en devolucion el dato de la columna 2, 11 o 13 ??????

saludos,
hector.




Esto último si que me ha descolocado, yo creía que al definirlo como
C1:C11 le estoy diciendo desde la columna 1 a la columna 11 por lo que
no veía ningún error en solicitar la devolución del dato de la columna
2, 11 ó 13. ¿Tengo que especificarlo de otro modo?

Muchas gracias
Respuesta Responder a este mensaje
#3 Juan M
01/10/2008 - 15:16 | Informe spam
Hola,

En tanto regresa Héctor, te comento.
Creo que llevas razón, las columnas que estás indicando son completas y en
el caso

\FY 09\[BAYPA.xls]Todos pvp'!C1:C11,11,0)"



te refieres al rango $A:$K, para buscar en la columna K,

En cuento al error, podrías indicar cual es el error que resulta?

Un saludo,
Juan

"Mk" escribió
Héctor Miguel escribió:
hola, 'anonimo/a' !



Hola!

Como decía en mi primer post mi conocimiento de vb es practicamente nulo y
diría que simplemente fruto de la observación del código obtenido a través
de la grabadora de macros pero:

1) si estas aplicando la propiedad ".FormulaR1C1"
no deberias indicar el rango donde esta la tabla en el mismo estilo
de notacion ? (R1C1)
porque en el codigo estas depositando una formula con estilos de
referencias "combinadas"
- el dato que se busca... -> R3C6
- la tabla donde se busca > C1:C11 <= esta deberia ser en el mismo
estilo: => R1C3:R11C3



Lo que yo intuyo que es ".FormulaR1C1" es basicamente una instrucción para
que se "escriba" la fórmula o datos especificados a continuación y siempre
en la celda que especifiques en la propia fórmula.

ActiveCell.FormulaR1C1 = _
"=VLOOKUP(R3C6,'C:\Seguimiento Comercial x Artículo\BBDD\FY 09\[Gama FY09
GM0.xls]GAMA 09 ES'!C1:C5,5,0)"

En este caso interpreto que es escribir la función BuscarV en la fila 3
columna 6, es decir, la celda F3.

En la tabla que se busca yo he interpretado que no habría ningún problema
en definir la matriz simplemente por las columnas (Columna1:Columna11)
porque no veo la diferencia de especificarlo por ejemplo como A1:K50000)


2) OJO... si la tabla donde se busca incluye UNA SOLA COLUMNA (C1:C11
C1:C13)
como es que solicitas en devolucion el dato de la columna 2, 11 o 13
??????

saludos,
hector.




Esto último si que me ha descolocado, yo creía que al definirlo como
C1:C11 le estoy diciendo desde la columna 1 a la columna 11 por lo que no
veía ningún error en solicitar la devolución del dato de la columna 2, 11
ó 13. ¿Tengo que especificarlo de otro modo?

Muchas gracias
Respuesta Responder a este mensaje
#4 Héctor Miguel
01/10/2008 - 19:32 | Informe spam
hola, (...) ???

Lo que yo intuyo que es ".FormulaR1C1" es... una instruccion para que se "escriba" la formula
o datos especificados a continuacion y siempre en la celda que especifiques en la propia fórmula.



es correcto que ".FormulaR1C1" es para depositar una formula por codigo (pero con los siguientes entendidos):
a) EN la celda activa (NO en la celda que "indiques en la propia formula")
b) usando la notacion R1C1 (o segun otro entendimiendo/idioma/version/... al estilo L1C1, F1C1, etc.)

ActiveCell.FormulaR1C1 = _
"=VLOOKUP(R3C6,'C:\Seguimiento Comercial x Articulo\BBDD\FY 09\[Gama FY09 GM0.xls]GAMA 09 ES'!C1:C5,5,0)"
En este caso interpreto que es escribir la funcion BuscarV en la fila 3 columna 6, es decir, la celda F3.



en este caso, la celda F3 es la celda NO donde se escribe la formula, sino de donde la funcion buscarv( "toma" el dato a buscar
la celda donde se deposita la formula es la "ActiveCell" que una instruccion antes "seleccionaste" +/- asi: -> Range("H4").Select

En la tabla que se busca yo he interpretado que no habria ningun problema en definir la matriz simplemente por las columnas
(Columna1:Columna11) porque no veo la diferencia de especificarlo por ejemplo como A1:K50000)



como comenta Juan M, llevas tu parte de razon (fue mi descostumbre con la propiedad FormulaR1C1) ;)

por otro lado, el mensaje que obtienes segun tu consulta original de:
-> "Recursos insuficientes. Seleccione menos datos o cierre aplicaciones."

me parece (mas seguro que probabe) que se debera a otro tipo de circunstancias
donde interviene algun codigo exhaustivo o "consume-recursos", exceso de formatos, formulas, vinculos, codigo, objetos, ... ???

(p.e.) es probable que la primera vez que ejecutas "la macro" no salte el error (pero cuando la ejecutas "repetidamente" o por bucles...)

saludos,
hector.
Respuesta Responder a este mensaje
#5 Mk
02/10/2008 - 02:11 | Informe spam
Héctor Miguel escribió:
hola, (...) ???



Hola otra vez!!

Lo que yo intuyo que es ".FormulaR1C1" es... una instruccion para que se "escriba" la formula
o datos especificados a continuacion y siempre en la celda que especifiques en la propia fórmula.



es correcto que ".FormulaR1C1" es para depositar una formula por codigo (pero con los siguientes entendidos):
a) EN la celda activa (NO en la celda que "indiques en la propia formula")
b) usando la notacion R1C1 (o segun otro entendimiendo/idioma/version/... al estilo L1C1, F1C1, etc.)

ActiveCell.FormulaR1C1 = _
"=VLOOKUP(R3C6,'C:\Seguimiento Comercial x Articulo\BBDD\FY 09\[Gama FY09 GM0.xls]GAMA 09 ES'!C1:C5,5,0)"
En este caso interpreto que es escribir la funcion BuscarV en la fila 3 columna 6, es decir, la celda F3.



en este caso, la celda F3 es la celda NO donde se escribe la formula, sino de donde la funcion buscarv( "toma" el dato a buscar
la celda donde se deposita la formula es la "ActiveCell" que una instruccion antes "seleccionaste" +/- asi: -> Range("H4").Select



Totalmente de acuerdo contigo, está claro que la celda F3 es el dato a
buscar por la fórmula BuscarV y como bien dices en realidad la fórmula
se escribe en la celda activa, por ello justo antes de este codigo
especifico:

Range("A1").Select

De ese modo se escribirá la fórmula en esa celda.
Gracias a tu pista de tu primer post de respuesta he cambiado el código
a otro mas apropiado del tipo:

ActiveCell.Formula"=VLOOKUP(F3,'C:etc)



En la tabla que se busca yo he interpretado que no habria ningun problema en definir la matriz simplemente por las columnas
(Columna1:Columna11) porque no veo la diferencia de especificarlo por ejemplo como A1:K50000)



como comenta Juan M, llevas tu parte de razon (fue mi descostumbre con la propiedad FormulaR1C1) ;)

por otro lado, el mensaje que obtienes segun tu consulta original de:
-> "Recursos insuficientes. Seleccione menos datos o cierre aplicaciones."

me parece (mas seguro que probabe) que se debera a otro tipo de circunstancias
donde interviene algun codigo exhaustivo o "consume-recursos", exceso de formatos, formulas, vinculos, codigo, objetos, ... ???

(p.e.) es probable que la primera vez que ejecutas "la macro" no salte el error (pero cuando la ejecutas "repetidamente" o por bucles...)

saludos,
hector.



De nuevo vuelves a tener razón, tras numerosas pruebas he llegado a la
conclusión de que es el fichero origen el que tiene algún tipo de error.
He probado a copiar los datos a otro fichero y he realizado mil pruebas
y al final lo único que me ha funcionado es segmentar ese fichero en
otros 3 para que la macro no se interrumpa con un mensaje de error.

Muchas gracias tanto a tí como a Juan por vuestro interés.

Mkastur
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida