Saltar al contenido
publicado

Buenas noches, tengo un problema con un libro de excel, va lento en la Hoja 1

He bajado el tamaño de todas las fotos y he conseguido un peso de 926 Kb, la tercera parte de cualquier otro de los que suelo hacer. Sigo sin encontrar la forma de que funcione normalmente. Las macros de los filtros van muy lentas, pero solo las de esa Hoja 1, el resto me funciona con normalidad. Es verdad que la Hoja 1 contiene más macros de las habituales (25 en lugar de 20), pero son muy sencillas.

Sin embargo, si elimino el resto de las hojas, y dejo solo la Hoja 1, funcionan bien los filtros de las macros y la velocidad general de cambio de celda y demás.

¿Me podéis dar una idea de qué mirar o por donde atacarle?

No puedo subir el archivo porque no me da el tamaño.

Featured Replies

publicado
  • Autor

Puede deberse a la cantidad (una por cuadrado) de nombres que tengo creados, con su correspondiente fórmula, en el administrador? (Esta no es la Hoja 1)

Imagen nombres3-min.jpg

Editado el por Maku

publicado

Hola Maku,

Parece que tu problema se encuentra en las fórmulas. Un exceso de fórmulas en la hoja (sobre todo si usas funciones volátiles) puede ralentizar mucho el archivo.

Presta atención también a las macros, que no realicen acciones que no tengan que hacer.

También puedes eliminar las filas y columnas que no uses.

Estas acciones pueden mejorar mucho tu archivo.

Espero que se solucione. Si no es así, aquí estamos para ayudarte.

publicado
  • Autor
hace 3 horas, Sergio dijo:

Hola Maku,

Parece que tu problema se encuentra en las fórmulas. Un exceso de fórmulas en la hoja (sobre todo si usas funciones volátiles) puede ralentizar mucho el archivo.

Presta atención también a las macros, que no realicen acciones que no tengan que hacer.

También puedes eliminar las filas y columnas que no uses.

Estas acciones pueden mejorar mucho tu archivo.

Espero que se solucione. Si no es así, aquí estamos para ayudarte.

He comprobado que al eliminar ese listado de nombres, con sus correspondientes fórmulas (aunque INDICE y COINCIDIR no creo que son volátiles), el archivo vuelve a la normalidad. No pierde apenas peso en Kb pero si gana ligereza.
Me pregunto si hay otro modo de hacerlo o simplemente me tengo que dar por vencida.


La idea es que dependiendo del número que consigo en la celda me cambia a una imagen u otra. El recuadro tapa la celda con el número.

¿Alguna idea?

números-min.png

Editado el por Maku

publicado
  • Autor

Creo que he encontrado la solución dando nombre a las imágenes y haciendo una macro con la que me pone encima esa imagen, dependiendo del número.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim celda As Range

Dim imgNombre As String

Dim imgOriginal As Shape

Dim imgCopia As Shape

Dim imgExistente As Shape

Dim contador As Integer

contador = 1

' Solo actuar si el cambio es en una celda individual

If Target.CountLarge > 1 Then Exit Sub

Set celda = Target

' Eliminar imagen existente en esa celda (si hay alguna)

For Each imgExistente In Me.Shapes

If imgExistente.Top = celda.Top And imgExistente.Left = celda.Left Then

imgExistente.Delete

Exit For

End If

Next imgExistente

' Determinar qué imagen usar según el valor

Select Case celda.Value

Case 1: imgNombre = "PruebaEuropa"

Case 2: imgNombre = "PruebaAsia"

Case 3: imgNombre = "PruebaÁfrica"

Case 4: imgNombre = "PruebaAmérica"

Case 5: imgNombre = "PruebaOceanía"

Case 6: imgNombre = "PruebaMarrón"

Case Else: Exit Sub ' No hacer nada si el valor no es válido

End Select

' Buscar la imagen original

On Error Resume Next

Set imgOriginal = Me.Shapes(imgNombre)

On Error GoTo 0

If imgOriginal Is Nothing Then

MsgBox "No se encontró la imagen '" & imgNombre & "'.", vbExclamation

Exit Sub

End If

' Copiar la imagen y colocarla sobre la celda

imgOriginal.Copy

Me.Paste

Set imgCopia = Me.Shapes(Me.Shapes.Count)

With imgCopia

.Top = celda.Top

.Left = celda.Left

.Height = celda.Height

.Width = celda.Width

.LockAspectRatio = msoFalse

.Name = "Imagen_" & celda.Address

End With

End Sub

No, no me funciona porque no me cambia las imágenes al cambiar el número

Editado el por Maku

publicado
  • Autor

Ahora sí, aquí lo dejo por si a alguien le viene bien.

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim celda As Range

    Dim imgNombre As String

    Dim imgOriginal As Shape

    Dim imgCopia As Shape

    Dim nombreImagenCelda As String

 

    ' Solo actuar si el cambio es en una celda individual

    If Target.CountLarge > 1 Then Exit Sub

 

    Set celda = Target

    nombreImagenCelda = "Imagen_" & celda.Address(False, False)

 

    ' Eliminar imagen existente en esa celda (si existe con ese nombre)

    On Error Resume Next

    Me.Shapes(nombreImagenCelda).Delete

    On Error GoTo 0

 

    ' Determinar qué imagen usar según el valor

    Select Case celda.Value

        Case 1: imgNombre = "PruebaEuropa"

        Case 2: imgNombre = "PruebaAsia"

        Case 3: imgNombre = "PruebaÁfrica"

        Case 4: imgNombre = "PruebaAmérica"

        Case 5: imgNombre = "PruebaOceanía"

        Case 6: imgNombre = "PruebaMarrón"

        Case Else: Exit Sub ' No hacer nada si el valor no es válido

    End Select

 

    ' Buscar la imagen original

    On Error Resume Next

    Set imgOriginal = Me.Shapes(imgNombre)

    On Error GoTo 0

 

    If imgOriginal Is Nothing Then

        MsgBox "No se encontró la imagen '" & imgNombre & "'.", vbExclamation

        Exit Sub

    End If

 

    ' Copiar la imagen y colocarla sobre la celda

    imgOriginal.Copy

    Me.Paste

    Set imgCopia = Me.Shapes(Me.Shapes.Count)

 

    With imgCopia

        .Top = celda.Top

        .Left = celda.Left

        .Height = celda.Height

        .Width = celda.Width

        .LockAspectRatio = msoFalse

        .Name = nombreImagenCelda

    End With

End Sub

Crear una cuenta o conéctate para comentar