Macros corre lento

Anónimas
2023-02-27T20:48:00+00:00

Buenas tardes.

Tengo varios libros con formularios en los que al presionar el boton, se ejecuta una macro que abre otro libro mediante el metodo "excel.application" y "workbooks.open"

siempre me ha funcionado bien, pero ahora sin haber modificado nada, tarda mucho ejecutandose la Macros.

El codigo es:

Dim RangoDatosb As Range
Dim NuevaFilab As Integer
Dim HojaDestino
Dim Ruta As String
Dim x11 As Excel.Application
Dim ArchivoDestino As Excel.Workbook
Set x11 = CreateObject("Excel.Application")
Set ArchivoDestino = x11.Workbooks.Open("C:\Users\LicRu\Desktop\prueba2.xlsx")
Set HojaDestino = ArchivoDestino.Sheets("GRAL")
Set RangoDatosb = HojaDestino.Cells(1, 1).CurrentRegion
NuevaFilab = RangoDatosb.Rows.Count + 1
With HojaDestino
.Cells(NuevaFilab, 1).Value = TextBox1.Text
.Cells(NuevaFilab, 2).Value = TextBox4.Text
.Cells(NuevaFilab, 3).Value = TextBox3.Text
.Cells(NuevaFilab, 4).Value = TextBox2.Text
.Cells(NuevaFilab, 5).FormulaLocal = "=Texto(A" & NuevaFilab & ",""mmmm"")"
.Cells(NuevaFilab, 6).Value = "N/A"

End With  

ArchivoDestino.Save  
ArchivoDestino.Close

quisiera saber si hay algun motivo por el que ahora corra lento el codigo

Microsoft 365 y Office | Excel | Otros | Windows

Pregunta bloqueada. Esta pregunta se migró desde la Comunidad de Soporte técnico de Microsoft. Puede votar si es útil, pero no puede agregar comentarios o respuestas ni seguir la pregunta.

0 comentarios No hay comentarios
{count} votos
Respuesta aceptada por el autor de la pregunta
  1. Anónimas
    2023-02-28T19:21:56+00:00

    ...

    Esa linea contiene formula para extraer el mes, ya que en la la fila "A" queda una fecha ("DD/MM/YYYY") y quiero que en en la fila "E" diga el mes, si hay alguna otra forma de hacerlo, lo agradecería.

    ...

    Aquí escribe solo el mes en E (sin fórmula):

        .Cells(NuevaFilab, 5).Value = Format(Cells(NuevaFilab, "A"), "mmmm") 
    

    ► Abres el libro, escribes una (única) fila de datos, guardas/cierras el libro.

    ¿Sólo para una fila de datos, o es sólo para probar?

    1 persona ha encontrado útil esta respuesta.
    0 comentarios No hay comentarios

4 respuestas adicionales

Ordenar por: Muy útil
  1. Deleted

    Esta respuesta se ha eliminado debido a una infracción del Código de Conducta. La respuesta se informó o identificó manualmente a través de la detección automatizada antes de que se realizara la acción. Consulte nuestro Código de Conducta para obtener más información.


    Los comentarios se han desactivado. Más información

  2. Anónimas
    2023-02-28T11:54:29+00:00

    ¿Esta línea...

    .Cells(NuevaFilab, 5).FormulaLocal = "=Texto(A" & NuevaFilab & ",""mmmm"")"

    ... te funciona?

    ¿Es necesario almacenar la fórmula y no el valor?

    ¿Tal vez ha crecido demasiado el archivo?

    ¿... Otros...?

    0 comentarios No hay comentarios
  3. Anónimas
    2023-02-28T14:34:22+00:00

    Hola.

    Esa linea contiene formula para extraer el mes, ya que en la la fila "A" queda una fecha ("DD/MM/YYYY") y quiero que en en la fila "E" diga el mes, si hay alguna otra forma de hacerlo, lo agradecería.

    El archivo no es muy grande, ya que va empezando el año, el real apenas consta de 194 entradas actualmente.

    De igual manera ya intente ejecutar el código borrando la parte donde hace los registros el código, por lo que hice la deducción de que se tarda al abrir o cerrar el archivo.

    Agradezco la respuesta.

    0 comentarios No hay comentarios
  4. Anónimas
    2023-02-28T22:15:38+00:00

    Hola.

    Si, solo es una sola fila de datos por evento (botón).

    Te comento que logre resolverlo, el código ahora solo abre el libro sin "crear" una nueva aplicación:

    Dim RangoDatosb As Range
    Dim NuevaFilab As Integer
    Dim HojaDestino
    Dim Ruta As String
    Dim ArchivoDestino As Excel.Workbook
    Application.ScreenUpdating = False
    Set ArchivoDestino = Workbooks.Open("C:\Users\LicRu\Desktop\prueba2.xlsx", UpdateLinks:=3)
    Set HojaDestino = ArchivoDestino.Sheets("GRAL")
    Set RangoDatosb = HojaDestino.Cells(1, 1).CurrentRegion
    NuevaFilab = RangoDatosb.Rows.Count + 1
    With HojaDestino
    .Cells(NuevaFilab, 1).Value = TextBox1.Text
    .Cells(NuevaFilab, 2).Value = TextBox4.Text
    .Cells(NuevaFilab, 3).Value = TextBox3.Text
    .Cells(NuevaFilab, 4).Value = TextBox2.Text
    .Cells(NuevaFilab, 5).Value = Format(Cells(NuevaFilab, "A"), "mmmm")
    .Cells(NuevaFilab, 6).Value = "N/A"

    End With  
    
    ArchivoDestino.Save  
    ArchivoDestino.Close  
    

    Application.ScreenUpdating = True

    Muchas gracias por el tip de la formula, me va a ayudar para otros tantos archivo.

    Saludos.

    0 comentarios No hay comentarios