tag:blogger.com,1999:blog-4623278671508370136.post7562782592060890318..comments2023-08-01T13:39:53.991+02:00Comments on EXCEL FORO: Un blog de Excel: VBA: Maneras de acelerar nuestras macros de Excel.Excelforo - Ismael Romerohttp://www.blogger.com/profile/17680553534095355222noreply@blogger.comBlogger37125tag:blogger.com,1999:blog-4623278671508370136.post-63965335324710039742019-05-16T09:06:19.983+02:002019-05-16T09:06:19.983+02:00Gracias a tí,
a veces un sencillo espacio en blanc...Gracias a tí,<br />a veces un sencillo espacio en blanco tiene esta importancia en programación<br />SaludosExcelforo - Ismael Romerohttps://www.blogger.com/profile/17680553534095355222noreply@blogger.comtag:blogger.com,1999:blog-4623278671508370136.post-14146982799531915652019-05-15T23:57:00.702+02:002019-05-15T23:57:00.702+02:00Funcionó Ismael, al dar espacio en blanco entre ca...Funcionó Ismael, al dar espacio en blanco entre cada ampersand y entre cada comilla doble.<br />Disculpa, pero lo pude descubrir después de haberte planteado la consulta. Un abrazo!!!Cristian Espinoza Chttps://www.blogger.com/profile/08537839858120887071noreply@blogger.comtag:blogger.com,1999:blog-4623278671508370136.post-43690709157572471822019-05-15T22:17:53.070+02:002019-05-15T22:17:53.070+02:00hola Ismael, tengo una consulta si me pudieras ayu...hola Ismael, tengo una consulta si me pudieras ayudar por favor:<br />Resulta que quiero poner la variable i, que representa la última celda con datos, dentro de una fórmula, pero me da error de sintaxis:<br /><br />Range("D1").FormulaLocal = "=SUMAR.SI(Base!D3:D" & i & ";Nómina_prev!A1;Base!O3:O19)"<br /><br />Creo que estoy concatenando la i de mala manera, pero nosé donde se produce el problema.<br /><br />Gracias de antemano, un abrazo.<br />Cristian Espinoza Chttps://www.blogger.com/profile/08537839858120887071noreply@blogger.comtag:blogger.com,1999:blog-4623278671508370136.post-63112762865983748872019-05-10T17:39:23.587+02:002019-05-10T17:39:23.587+02:00Hola!
Es raro que se 'enganche' en la 8ª c...Hola!<br />Es raro que se 'enganche' en la 8ª consulta y no en las anteriores...<br />quizá algo en las condiciones de esa consulta esté pasando algo raro con los datos en sí<br />Si vas liberando memoria según pasan las consultas, no se me ocurre otra opción...<br /><br />Saludos y siento no poder decirte algo másExcelforo - Ismael Romerohttps://www.blogger.com/profile/17680553534095355222noreply@blogger.comtag:blogger.com,1999:blog-4623278671508370136.post-24979936625342347252019-05-09T05:26:27.083+02:002019-05-09T05:26:27.083+02:00Veo que este tema ya tiene años, pero mi problema ...Veo que este tema ya tiene años, pero mi problema es vigente… Gracias Ismael por compartir grandes conocimientos…<br /><br />Resulta que tengo un código que hace un llamado de datos de Excel a Access, el problema es que en algunas computadoras funciona super bien y en otras no… y no comprendo porque todas son dell optiplex 990, core i5, con 4 GB de memoria, office 2010, Windows 10, etc.<br /><br />En las que no funcionaba modifiqué el código y mejoró a medias, porque uno hace las primeras 7 consultas, y la respuesta es increíble, ya la consulta 8 se queda una eternidad, que puede estar pasando?<br /><br />Antes de la modificación desde la primera consulta que quedaba trabado y no respondía… que será lo que pasa, porque en unas funciona de maravilla y en otras se queda trabada???<br /><br />La hoja Excel esta en la estación de cada usuario, el archivo de Access se encuentra en un servidor y allí está direccionado la consulta.<br /><br />Gracias por la atención… saludos cordiales.Autodidactahttps://www.blogger.com/profile/04067061520323858498noreply@blogger.comtag:blogger.com,1999:blog-4623278671508370136.post-46121991880732528882019-04-17T01:18:23.315+02:002019-04-17T01:18:23.315+02:00Así es estimado Ismael, toda la razón. Es mejor pr...Así es estimado Ismael, toda la razón. Es mejor primero ordenar los datos (paso fundamental), y luego aplicar el Quitar duplicados propio de excel.<br />Saludos.Cristian Espinoza Chttps://www.blogger.com/profile/08537839858120887071noreply@blogger.comtag:blogger.com,1999:blog-4623278671508370136.post-66858892004244165982017-09-30T10:08:54.681+02:002017-09-30T10:08:54.681+02:00Hola Silvestre,
yo emplearía la herramienta del si...Hola Silvestre,<br />yo emplearía la herramienta del sistema: <b>Quitar duplicados</b><br />te hará lo mismo en décimas de segundo y de manera más segura,... y sin necesidad de que los datos estén ordenados por la columna B<br /><br />SaludosExcelforo - Ismael Romerohttps://www.blogger.com/profile/17680553534095355222noreply@blogger.comtag:blogger.com,1999:blog-4623278671508370136.post-87027346012830378602017-09-29T17:52:44.134+02:002017-09-29T17:52:44.134+02:00Hola tengo una macro para elimina registros duplic...Hola tengo una macro para elimina registros duplicados!! y uso el siguiente código: <br /><br />Sub EliminarRepetidos()<br /><br /> Dim Row As Long<br /> Dim ws As Worksheet<br /><br /> Set ws = ActiveSheet<br /> Row = 1<br /> While ws.Cells(Row, 2).Value <> ""<br /> If ws.Cells(Row, 2).Value = ws.Cells(Row + 1, 2).Value Then<br /> Range("B" & (Row + 1)).EntireRow.Delete<br /> Else<br /> Row = Row + 1<br /> End If<br /> Wend<br /><br />End Sub<br /><br /><br />Hice pruebas con 1000 registros y ejecutó bien la macro pero ahora lo ejecuto con 434 104 registros y ya lleva 40 min y no acaba, es normal que se tarde mucho? o alguna forma de optimizar la ejecución del macro?Anonymoushttps://www.blogger.com/profile/06574974384469531887noreply@blogger.comtag:blogger.com,1999:blog-4623278671508370136.post-13191697270995588422017-09-17T09:52:24.876+02:002017-09-17T09:52:24.876+02:00No creo sea posible... yo al menos desconozco el c...No creo sea posible... yo al menos desconozco el cómo<br />Lo siento<br /><br />Un saludo y suerteExcelforo - Ismael Romerohttps://www.blogger.com/profile/17680553534095355222noreply@blogger.comtag:blogger.com,1999:blog-4623278671508370136.post-8223338336698864122017-09-16T20:47:05.092+02:002017-09-16T20:47:05.092+02:00te copio el codigo porque no sé como hacer para qu...te copio el codigo porque no sé como hacer para que se ejecute cada linea con limite de tiempo <br /><br />Sub actualizar()<br /> Application.Calculation = xlManual<br /> ActiveWorkbook.Connections("tabla1").Refresh<br /> ActiveWorkbook.Connections("tabla2").Refresh<br /> ActiveWorkbook.Connections("tabla3").Refresh<br /> ActiveWorkbook.Connections("tabla4").Refresh<br /> Application.Calculation = xlautomatic<br />end sub<br /><br /><br />la idea es que cada actualizacion se ejecute 6 segundos y si pasa ese tiempo volver a ejecutar la misma linea que se tardó ese tiempo y si vuelve a demorarse pasar a la siguiente repetir lo mismo que la anterior pero que nunca vuelva al inicio del proceso si no que siga con las restantes tablas haciendo lo mismo, hasta que yo decida volver a ejecutar esa macro de nuevo.<br /><br />Manualmente me sucede que se cuelga la actualizacion pero la suspendo con el boton ESC, la vuelvo a ejecutar y se actualiza bien, o sea que la segunda vez que actualizo termina resultando bien. Por eso queria automatizar el procedimiento de esa manera, no toma mas de 6 u 8 segundos la segunda actualizacion.<br /><br /><br />graciasAnonymoushttps://www.blogger.com/profile/10427765644503530424noreply@blogger.comtag:blogger.com,1999:blog-4623278671508370136.post-45042689237425303572017-09-08T09:00:14.631+02:002017-09-08T09:00:14.631+02:00Hola,
quizá empleando el método OnTime puedas logr...Hola,<br />quizá empleando el método OnTime puedas lograrlo:<br /><a href="http://excelforo.blogspot.com.es/2014/02/vba-repetir-una-macro-cada-x-tiempo.html" rel="nofollow">http://excelforo.blogspot.com.es/2014/02/vba-repetir-una-macro-cada-x-tiempo.html</a><br /><br />Aunque dudo tal cosas sea posible, ya que hasta donde yo se, las actualizaciones son complicadas de detener una vez comenzadas<br /><br />SaludosExcelforo - Ismael Romerohttps://www.blogger.com/profile/17680553534095355222noreply@blogger.comtag:blogger.com,1999:blog-4623278671508370136.post-86268867240316453142017-09-08T04:46:55.847+02:002017-09-08T04:46:55.847+02:00hola
hice una macro con la grabadora que me actual...hola<br />hice una macro con la grabadora que me actualiza varias tablas con datos de internet.<br />quisiera porner un codigo para que limite el tiempo de ejecucion de la actualizacion a 6 segundos por cadena de texto, y si pasa ese tiempo que vuelva a ejecutar ese mismo codigo y en caso de volver a pasar 6 segundos que siga con la siguiente linea de codigo.<br /><br />graciasAnonymoushttps://www.blogger.com/profile/10427765644503530424noreply@blogger.comtag:blogger.com,1999:blog-4623278671508370136.post-34263278862630546062017-03-24T08:50:26.253+01:002017-03-24T08:50:26.253+01:00;-)
Slds;-)<br />SldsExcelforo - Ismael Romerohttps://www.blogger.com/profile/17680553534095355222noreply@blogger.comtag:blogger.com,1999:blog-4623278671508370136.post-14953294158872709252017-03-23T21:14:07.954+01:002017-03-23T21:14:07.954+01:00Hola, si tiene razón sobre la celda activa. La dem...Hola, si tiene razón sobre la celda activa. La demora se dá cuando la hoja activa es la misma hoja donde la macro está escribiendo los datos. ejecuté la macro en otra hoja que la macro no toca y hay si no hay demorasAnonymoushttps://www.blogger.com/profile/05566379789000621913noreply@blogger.comtag:blogger.com,1999:blog-4623278671508370136.post-31984368642779752332017-03-19T09:35:18.389+01:002017-03-19T09:35:18.389+01:00Hola Valen,
habría que ver el código en su context...Hola Valen,<br />habría que ver el código en su contexto, pero no parece que se pueda hacer mucho..<br />Quizá evitar usar el Userform y rellenar directamente las celdas en la hoja de cálculo.. no parece que aporte mucho al proceso trabajar desde el formulario..<br />SaludosExcelforo - Ismael Romerohttps://www.blogger.com/profile/17680553534095355222noreply@blogger.comtag:blogger.com,1999:blog-4623278671508370136.post-7830309737392132412017-03-19T03:08:09.959+01:002017-03-19T03:08:09.959+01:00Hola, ismael, estoy creando una plantilla para el ...Hola, ismael, estoy creando una plantilla para el trabajo y tarda mucho aunque depende de si relleno los textbox o no. Me explico, cree las celdas en la hoja de esta manera: A1 contiene la etiqueta y B1 contendra el texto del textbox1 cuando escriba en la plantilla y asi unas cuantas celdas luego las concatene en una sola es decir que yo entro al excel y directamente me muestra la plantilla en macro, despues relleno los campos y al pulsar el boton guardar se ejecuta de la siguiente manera: boton guardar>escribe el texto de los textbox en las celdas>la celda combinada con la funcion concatenar recoge la info de todas las celdas en el orden que le di>un textbox multi linea recoge la info de la celda combinada y me muestra en otro userform el texto completo> de ahi pulso el boton copiar y lo copia al portapapeles de manera que asi puedo pegarlo en el diario de trabajo de otr app. Sin necesidad de tocar el excel para nada. Mi problema es cuando relleno todos los textbox con datos y test tecnicos largos, al pulsar el boton guardar y ejecutar la cadena de acciones que cito arroba, pasa de tardar(sin texto) 5 segundos a tardar(con texto) entre 40 segundos y 1 minuto. Como cada textbox esvribe en una celda, las funciones estan una por una asi: Range("A1").Value = TextBox1 luego TextBox1.Value = "" y asi por unas 50 celdas.. se que se puede mejorar pero no se como. Agradeceria una mano. Grcias de antemanoAnonymoushttps://www.blogger.com/profile/14424355830347413869noreply@blogger.comtag:blogger.com,1999:blog-4623278671508370136.post-13414994118507325022017-03-16T13:27:16.277+01:002017-03-16T13:27:16.277+01:00Hola,
no debería haber diferencias entre el lugar ...Hola,<br />no debería haber diferencias entre el lugar de inicio de la ejecución (hoja o editor de VB).<br />Quizá el problema esté donde esté la celda activa en el momento de ejecutar la macro¿¿??<br />Peor quedamos a la espera de otros comentarios...<br />SaludosExcelforo - Ismael Romerohttps://www.blogger.com/profile/17680553534095355222noreply@blogger.comtag:blogger.com,1999:blog-4623278671508370136.post-88644973905546310102017-03-15T15:24:59.434+01:002017-03-15T15:24:59.434+01:00Tengo una macro que es muy rápida y tiene muchas d...Tengo una macro que es muy rápida y tiene muchas de las recomendaciones para agilizar ya implementadas. La macro abre otro archivo de excel para leer datos y los trae al archivo donde está la macro, el cual es binario (xlsb), además le tengo inhabilitado el cálculo automático durante la macro y también bloqueada la actualización de la pantalla. Ambos archivos son grandes y tienen mucha formulación avanzada en sus celdas, tablas dinámicas y gráficas.<br />El problema es que por una razón que no comprendo aún, si pongo a correr la macro desde la hoja de cálculo usando un botón que la llama, el proceso se demora muchísimo más, que cuando voy al editor de visual basic y la pongo a correr directamente desde allí. También demora menos si la pongo a correr desde la hoja de cálculo pero colocando en algún lugar del código un punto de interrupción, de modo que al llegar a dicho punto la macro para, pero al presionar la tecla "F5" para que la macro continué normalmente, termina muy rápido en comparación con hacerlo sin el punto de interrupción.<br />Es como si la macro funcionara más rápido cuando se corre directamente desde el editor de visual basic que cuando se llama desde la hoja de calculo con un botón.<br />A alguien le ha pasado algo similar?<br />Hay alguna manera de hacer que la macro corra sobre el editor de visual para que sea más rápida, tal vez una función visual que haga eso?Anonymoushttps://www.blogger.com/profile/05566379789000621913noreply@blogger.comtag:blogger.com,1999:blog-4623278671508370136.post-56398752253217868872016-05-28T18:21:08.816+02:002016-05-28T18:21:08.816+02:00Tienes razón Ismael, ya me di cuenta de mi error, ...Tienes razón Ismael, ya me di cuenta de mi error, la columna tenia una descripción diferente a los nombres de las hojas. <br /><br />Muchas gracias! Me has ayudado un montón. Que tengas un buen fin de semana.Anonymoushttps://www.blogger.com/profile/06376300070375731823noreply@blogger.comtag:blogger.com,1999:blog-4623278671508370136.post-50488261567747510052016-05-28T18:07:12.473+02:002016-05-28T18:07:12.473+02:00DA igual donde esté el rango.. pero se requiere qu...DA igual donde esté el rango.. pero se requiere que los valores de ese rango respondan exactamente a los distintos nombres de las hojas<br />SaludosExcelforo - Ismael Romerohttps://www.blogger.com/profile/17680553534095355222noreply@blogger.comtag:blogger.com,1999:blog-4623278671508370136.post-12913144571465426072016-05-28T17:55:00.245+02:002016-05-28T17:55:00.245+02:00Cuando cambio el rango ("A1:A250") por o...Cuando cambio el rango ("A1:A250") por otra columna, me sale error 9 "subindice fuera de intervalo" y resaltado:<br /><br />Worksheets(Target.Value).Visible = True<br />Anonymoushttps://www.blogger.com/profile/06376300070375731823noreply@blogger.comtag:blogger.com,1999:blog-4623278671508370136.post-66117739976561067052016-05-28T17:49:52.544+02:002016-05-28T17:49:52.544+02:00Gracias por tu rpta Ismael. Ya lo hice y funciona ...Gracias por tu rpta Ismael. Ya lo hice y funciona muy bien. Pero requiero que eso se realice a partir de K8. <br />Disculpando la insistencia ¿Hay alguna forma de modificar el código para realizar ese ajuste y que se ejecute de una columna difetente a "A"?.<br /><br />Gracias por tu tiempo y apoyo.Anonymoushttps://www.blogger.com/profile/06376300070375731823noreply@blogger.comtag:blogger.com,1999:blog-4623278671508370136.post-54483177503445485702016-05-28T09:08:39.128+02:002016-05-28T09:08:39.128+02:00Hola,
imagina en el rango A1:A250 tienes un listad...Hola,<br />imagina en el rango A1:A250 tienes un listado con los nombres de las 250 hojas:<br />C-0001<br />C-0002<br />...<br />en la ventana de código de esa hoja añade:<br />Private Sub Worksheet_SelectionChange(ByVal Target As Range)<br />If Not Intersect(Target, Range("A1:A250")) Is Nothing Then<br />Worksheets(Target.Value).Visible = True<br />Sheets(Target.Value).Select<br />End If<br />End Sub<br />SaludosExcelforo - Ismael Romerohttps://www.blogger.com/profile/17680553534095355222noreply@blogger.comtag:blogger.com,1999:blog-4623278671508370136.post-21812031356242809322016-05-28T09:01:13.759+02:002016-05-28T09:01:13.759+02:00Hola,
a veces no es un problema de las macros y sí...Hola,<br />a veces no es un problema de las macros y sí del número de elementos a calcular... si las macros están optimizadas y el tiempo que necesitan es alto, el asunto será el número de cálculos que realiza.<br />Poco se puede hacer con esto... quizá Excel no sea la herramienta que necesitas<br />SaludosExcelforo - Ismael Romerohttps://www.blogger.com/profile/17680553534095355222noreply@blogger.comtag:blogger.com,1999:blog-4623278671508370136.post-12613654764816472362016-05-27T22:28:48.148+02:002016-05-27T22:28:48.148+02:00Ismael, buenas tardes, agradecería tu ayuda con un...Ismael, buenas tardes, agradecería tu ayuda con un pequeño problema. Soy algo nuevo empleando macros y estoy elaborando un kardex de productos en Excel -250 productos (hojas) hasta ahora-. Debido a la cantidad de hojas, las tengo ocultas y solo tengo visible la hoja resumen "Inventario". Probé con hipervínculos, pero no me sirve al requerir la hoja visible. <br />Por eso estaba configurando el poder visualizar cada hoja oculta mediante el código de hoja (selection_change). Así cuando doy clic a una celda específica dentro de la columna K (a partir de K8 hacia abajo) en “Inventario”, se muestra la hoja oculta correspondiente. <br />Este es el código que uso:<br /><br />Private Sub Worksheet_SelectionChange(ByVal Target As Range) <br />If Target.Address = "$K$8" Then <br />Worksheets("C-0001").Visible = True <br />Sheets("C-0001").Select <br />End If <br /><br />If Target.Address = "$K$9" Then <br />Worksheets("C-0002").Visible = True <br />Sheets("C-0002").Select <br />End If <br /><br />End Sub <br /><br />El código me funciona a la perfección. Pero para aplicarlo a las 250 hojas, debería duplicarlo hasta llegar a la cantidad requerida y es un trabajo súper extenso…<br />¿Hay alguna macro o código que pueda aplicar para generar el enlace de cada celda a cada hoja sin tener que realizar los 250 códigos? Mi conocimiento no llega a más por ahora. Espero puedas ayudarme. <br /><br />Gracias anteladasAnonymoushttps://www.blogger.com/profile/06376300070375731823noreply@blogger.com