Saltar al contenido

macro lenta


Onotera

Recommended Posts

Hola Onotera!

Le he dado una revisada a tu macro, el por qué va lento es porque estás usando mucho código grabado

No es recomendable usar mucho el Sheets("Nombre Hoja").Select, Copy y Paste (En especial estos dos últimos)

Usa mejor el with y define variables, va lento porque estás consumiento mucha memoria

Slds

Enlace a comentario
Compartir con otras webs

En 1/3/2019 at 16:53 , LuisRojas dijo:

Hola Onotera!

Le he dado una revisada a tu macro, el por qué va lento es porque estás usando mucho código grabado

No es recomendable usar mucho el Sheets("Nombre Hoja").Select, Copy y Paste (En especial estos dos últimos)

Usa mejor el with y define variables, va lento porque estás consumiento mucha memoria

Slds

Bufff... ahí ya me pierdo bastante.., puedes ayudarme?

Enlace a comentario
Compartir con otras webs

En 1/3/2019 at 16:53 , LuisRojas dijo:

Hola Onotera!

Le he dado una revisada a tu macro, el por qué va lento es porque estás usando mucho código grabado

No es recomendable usar mucho el Sheets("Nombre Hoja").Select, Copy y Paste (En especial estos dos últimos)

Usa mejor el with y define variables, va lento porque estás consumiento mucha memoria

Slds

lo he probado y parece que hace lo mismo, en mi ordenador bien, pero en cuanto al otro ordenador que está en red lento...

Enlace a comentario
Compartir con otras webs

Hace 7 minutos , Onotera dijo:

lo he probado y parece que hace lo mismo, en mi ordenador bien, pero en cuanto al otro ordenador que está en red lento...

Pues ya que la macro no va dirigida a archivos distintos y/o conectados a través de la red, ese no es el problema sino las características de la PCRam, procesador, etc. Probablemente es bastante antigua. Ah, o lo otro es que haya otras macros además de la que has dejado por aquí y en ellas esté el dilema.

Igual lee esto:

Enlace

Abraham Valencia

Enlace a comentario
Compartir con otras webs

Hace 10 minutos , avalencia dijo:

Pues ya que la macro no va dirigida a archivos distintos y/o conectados a través de la red, ese no es el problema sino las características de la PCRam, procesador, etc. Probablemente es bastante antigua. Ah, o lo otro es que haya otras macros además de la que has dejado por aquí y en ellas esté el dilema.

Igual lee esto:

Enlace

Abraham Valencia

el archivo lo tengo en mi ordenador y lo comparto a través de red al otro (puede que el otro ordenador sea antiguo). No hay más macros en ese procedimiento., pero bien, me gustaría poder aligerarlo si se puede..

gracias

Enlace a comentario
Compartir con otras webs

No es una buena costumbre compartir archivos de un ordenador a otro a través de la red, lo ideal es colocarlo en un servidor. Adempás de la posible "antigüedad" del ordenador del problema, hay otros factores que pueden afectar el proceso: Tipo de cable de red, velocidad del switch, etc.

Abraham Valencia

Enlace a comentario
Compartir con otras webs

En 5/3/2019 at 15:39 , avalencia dijo:

No es una buena costumbre compartir archivos de un ordenador a otro a través de la red, lo ideal es colocarlo en un servidor. Adempás de la posible "antigüedad" del ordenador del problema, hay otros factores que pueden afectar el proceso: Tipo de cable de red, velocidad del switch, etc.

Abraham Valencia

podrías ayudarme en mejorar la macro?

gracias

Enlace a comentario
Compartir con otras webs

En 5/3/2019 at 15:39 , avalencia dijo:

No es una buena costumbre compartir archivos de un ordenador a otro a través de la red, lo ideal es colocarlo en un servidor. Adempás de la posible "antigüedad" del ordenador del problema, hay otros factores que pueden afectar el proceso: Tipo de cable de red, velocidad del switch, etc.

Abraham Valencia

me he dado cuenta que si elimino lo siguiente va más rápido

'codigo para configurar todas las hojas del libro (margenes, etc..)
Dim Hj As Worksheet
    For Each Hj In Worksheets
     Hj.PageSetup.PrintArea = ""
       With Hj.PageSetup
        .LeftMargin = Application.InchesToPoints(0.5)
        .RightMargin = Application.InchesToPoints(0.25)
        .TopMargin = Application.InchesToPoints(0.2)
        .BottomMargin = Application.InchesToPoints(0.2)
    End With
    Range("A1:O51").Select
    Hj.PageSetup.PrintArea = "$A$1:$O$50"
    Range("A1").Select
    Application.ScreenUpdating = False
     Next Hj

se puede hacer de otra manera?, lo único es que me quepa la hoja con todos los datos a la hora de imprimirlos

Enlace a comentario
Compartir con otras webs

En 1/3/2019 at 16:26 , isidrod dijo:

me he dado cuenta que si elimino lo siguiente va más rápido

'codigo para configurar todas las hojas del libro (margenes, etc..)
Dim Hj As Worksheet
    For Each Hj In Worksheets
     Hj.PageSetup.PrintArea = ""
       With Hj.PageSetup
        .LeftMargin = Application.InchesToPoints(0.5)
        .RightMargin = Application.InchesToPoints(0.25)
        .TopMargin = Application.InchesToPoints(0.2)
        .BottomMargin = Application.InchesToPoints(0.2)
    End With
    Range("A1:O51").Select
    Hj.PageSetup.PrintArea = "$A$1:$O$50"
    Range("A1").Select
    Application.ScreenUpdating = False
     Next Hj

se puede hacer de otra manera?, lo único es que me quepa la hoja con todos los datos a la hora de imprimirlos

Enlace a comentario
Compartir con otras webs

Saludos @Onotera, te dejo tu mismo archivo, con un pequeño cambio, espero que te sirva.

realmente quite la parte que seleccionas todo, no es neceario estar en una hoja para copiar datos de ella, y tampoco es neceario seleccionar antes el rango que quieres copiar, simplemente lo copias y listo.

y lo otro, si ya tienes una plantilla, para que estar acomodando formato de hojas luego de copiar?, alli pierdes mucho tiempo, simplemente has una copia de la hoja plantilla y listo, luego copias alli los valores que necesitas de la hoja datos.

Suerte

 

Creacion hojas obra - copia.xlsb

Enlace a comentario
Compartir con otras webs

Hace 9 horas, bigpetroman dijo:

Saludos @Onotera, te dejo tu mismo archivo, con un pequeño cambio, espero que te sirva.

realmente quite la parte que seleccionas todo, no es neceario estar en una hoja para copiar datos de ella, y tampoco es neceario seleccionar antes el rango que quieres copiar, simplemente lo copias y listo.

y lo otro, si ya tienes una plantilla, para que estar acomodando formato de hojas luego de copiar?, alli pierdes mucho tiempo, simplemente has una copia de la hoja plantilla y listo, luego copias alli los valores que necesitas de la hoja datos.

Suerte

 

Creacion hojas obra - copia.xlsb 29 kB · 1 download

ok, muchísimas gracias, va perfecto..., no se ralentiza nada de nada en el otro ordenador. 

Enlace a comentario
Compartir con otras webs

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 96 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • Hi Trate de ver que hacían las fórmulas en cuestión pero a su libro le falta o le faltan hojas, por lo que solo podría participar con un par de ideas en general. Lo que entiendo es que según el valor de B3 en C3 debe poner una fórmula u otra, así que es posible que si combina DIRECCION() con INDIRECTO() pueda intercambiar de una fórmula a otra. =SI(B3="Xl",INDIRECTO(DIRECCION(3,5)),SI(O(B3=1,B3=2,B3=3),INDIRECTO(DIRECCION(4,5)),"")) Otra forma sería poner nombre a esas fórmulas en el cuadro de nombres para que las pueda mandar llamar a una o a la otra según el resultado de B3. Por favor tome en cuenta, es solo una idea.
    • Buenas tardes! Tengo el siguiente código: Private Sub btnCargaBancos_Click() Dim TasaCompra, TasaVenta As Double Dim InvBanesco, InvVzla, MontoBanesco, MontoVzla As Double Dim TasaDiaBan, TasaDiaVzla, TasaActual As Double 'Inversion = Val(txtInversion.Text) InvBanesco = Val(CDbl(txtInverBanesco.Text)) InvVzla = Val(CDbl(txtInverVzla.Text)) TasaCompra = Val(CDbl(txtTasaCompra.Text)) TasaVenta = Val(CDbl(txtTasaVenta.Text)) MontoBanesco = (InvBanesco / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) MontoVzla = (InvVzla / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) TasaDiaBan = (MontoBanesco / InvBanesco) * (1 - 0.055)      TasaDiaVzla = (MontoVzla / InvVzla) * (1 - 0.055) If TasaDiaBan < TasaDiaVzla Then     TasaActual = TasaDiaBan Else     TasaActual = TasaDiaVzla End If MontoBanesco = FormatNumber(MontoBanesco, 2, True, vbFalse) MontoVzla = FormatNumber(MontoVzla, 2, True, vbFalse) TasaActual = FormatNumber(TasaActual, 5, True, False) txtBcoBanesco.Value = MontoBanesco txtBcoVenezuela.Value = MontoVzla txtTasaDiaria.Value = TasaActual End Sub   Como se puede apreciar InvBanesco ,  InvVzla , TasaCompra y TasaVenta, son valores que introduce el usuario a través de los respectivos cuadros de texto. Tengo los siguientes problemas: a. Las fórmulas no se ejecutan correctamente (pareciese que no reconociese los números entrados vía cuadros de texto). b. Al darle valor cero (0) a cualquiera de los valores de InvBanesco o  InvVzla, me genera un error en TasaDiaBan o TasaDiaVzla (según sea el caso), aunque, como se puede apreciar, debería generar un valor cero (0). Como dije en mi presentación estoy empezando en esto de la codificación...y quiero aprender de Uds! Agradezco su ayuda! Nota: lamentablemente el fichero es mas grande de lo permitido y no pude anexarlo.  
    • Hola buenas tardes. En una hoja plantilla donde realizo diferentes consultas de datos. tengo ya establecido dos formulas diferentes con función SI y buscar. estos buscan diferentes rangos de datos y recibendiferentes resultados. Cada formula varia según una palabra o numero  ejemplo si pongo Xl pone la formula 1 y si pongo cualquier numero entre 1 y 3 pone la segunda formula. Lo que necesito hacer es que si en una celda de la columna B3 pongo XL debería de considerar la formula 1 y si pusiera el numero 1 me pondría la segunda formula, dentro de la misma formula. Ya agregue la función SI($C3="Xl",Formula1.. Pero no me funciona, espero me puedan ayudar.   Muchas gracias Mariano   Formula doble si en celda existe.xlsx
    • Sub control2558() Application.ScreenUpdating = False Dim I As Integer I = 4 While Sheets("FT-ADF-2558").Cells(I, 102) <> "" Sheets("FT-ADF-2558").Cells(6, 82) = Sheets("FT-ADF-2558").Cells(I, 102) Dim NombreArchivo, RutaArchivo As String NombreArchivo = "Hoja Control " & Sheets("FT-ADF-2558").Cells(I, 102) RutaArchivo = ActiveWorkbook.Path & "\" & NombreArchivo & ".xlsm" Dim NuevoLibro As Workbook Set NuevoLibro = Workbooks.Add Sheets("FT-ADF-2558").Copy Before:=NuevoLibro.Sheets(1) NuevoLibro.SaveAs Filename:=RutaArchivo NuevoLibro.Close I = I + 1 Wend MsgBox ("Proceso generado con éxito") Application.ScreenUpdating = True End Sub  
    • Ese error es porque no existe la hoja 10 con ese nombre, entonces cámbialo por FT-ADF-2558
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.