Recientemente me encontré ante una situación de trabajo algo laboriosa, y es que debía redirigir la celda vinculada de bastantes controles de formulario en mi hoja de trabajo...
He de reconocer que inicialmente, y por las prisas del momento, lo realicé manualmente (por suerte eran solo 15-20 controles)...
pero en mi cabeza rondaba una macro para ahorrar tiempo de procesamiento.
El problema era que los controles de formulario tipo Barra de desplazamiento (scroll bars) tenían como celda vinculada la celda de otra hoja, y el objetivo era redirigirlas hacia la hoja activa...
Tenemos los siguientes controles en nuestra 'Hoja1'
Insertamos el siguiente procedimiento 'Sub' en un módulo estándar:
Tras ejecutar nuestra macro comprobamos el éxito conseguido, solo los controles tipo barras de desplazamiento se han visto afectados por el cambio...
He de reconocer que inicialmente, y por las prisas del momento, lo realicé manualmente (por suerte eran solo 15-20 controles)...
pero en mi cabeza rondaba una macro para ahorrar tiempo de procesamiento.
El problema era que los controles de formulario tipo Barra de desplazamiento (scroll bars) tenían como celda vinculada la celda de otra hoja, y el objetivo era redirigirlas hacia la hoja activa...
Tenemos los siguientes controles en nuestra 'Hoja1'
Insertamos el siguiente procedimiento 'Sub' en un módulo estándar:
Sub RecorreScrollBars()
Dim formas As Shape
'recorremos todos los controles y objetos y formas de la hoja activa
For Each formas In ActiveSheet.Shapes
    'determinamos si es un control de formulario
    If formas.Type = msoFormControl Then
        'vemos si es un ScrollBar
        If formas.FormControlType = xlScrollBar Then
            'asigno el valor actual del vínculo (celda vinculada)
            enlace = formas.ControlFormat.LinkedCell
            'y lo llevo a la celda de la izquierda del control
            formas.TopLeftCell.Offset(0, -1).Value = enlace
            'finalmente asigno nuevo valor de Celda vinculada
            'quitando del vínculo el nombre de la hoja
            formas.ControlFormat.LinkedCell = Replace(enlace, "Hoja2!", "")
        End If
    End If
Next formas
End SubTras ejecutar nuestra macro comprobamos el éxito conseguido, solo los controles tipo barras de desplazamiento se han visto afectados por el cambio...




Hola Ismael. Gracias por esto. Muy util.
ResponderEliminarSupongo que en vez de:
Dim sb As Shape
es
Dim formas As Shape
No?
Saludos
;-)
Eliminarcorrecto. queda corregido
Es lo malo de ir aprovechando retazos de otros ejemplos
:D