Visual Basic para Aplicaciones - Vinculación mútua entre rangos de distintas hojas

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 10
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Vinculación mútua entre rangos de distintas hojas

Publicado por jordi (3 intervenciones) el 08/04/2021 20:11:01
Muy buenas, Lectores.

¿Hay alguna forma en vba que me permita a una "vinculación mútua" entre unas columnas de diferentes hojas (rangos)?

...Que pueda insertar valores en una u otra Hoja y que se repita el valor en la Hoja no activa que se de.

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de MIGUEL
Val: 424
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Vinculación mútua entre rangos de distintas hojas

Publicado por MIGUEL (121 intervenciones) el 13/04/2021 04:39:12
Buenas jordi

Es complicado pero si, aunque cambien los nombres de las hojas sin querer queriendo, bueno lo complicado seria dependiendo de cuantas hojas sean y el tamaño de los rangos y si trabajas con versiones diferentes del Excel ósea español e ingles.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Norberto
Val: 115
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Vinculación mútua entre rangos de distintas hojas

Publicado por Norberto (34 intervenciones) el 20/04/2021 10:37:31
Hola:

En la hoja principal debes poner este código para el evento WorkSheet_Change:

1
2
3
4
5
6
7
8
9
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim HojaDestino As Worksheet, Celda As Range
 
    Set HojaDestino = ThisWorkbook.Worksheets(2) 'Deberás especificar el índice o el nombre de la hoja de destino
    For Each Celda In Target    'Para cada celda cambiada en la hoja actual
        HojaDestino.Range(Celda.Address).Formula = Celda.Text 'Ponemos el contenido en la otra hoja
    Next
 
End Sub

Si quieres que los cambios producidos en una de las dos se refleje en la otra, deberás poner en cada una de ellas este código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim HojaDestino As Worksheet, Celda As Range
 
    Set HojaDestino = ThisWorkbook.Worksheets(2) 'Deberás especificar el índice o el nombre de la hoja de destino
 
    If HojaDestino.Name <> ActiveSheet.Name Then    'Para evitar la recursividad
        For Each Celda In Target    'Para cada celda cambiada en la hoja actual
            HojaDestino.Range(Celda.Address).Formula = Celda.Text 'Ponemos el contenido en la otra hoja
        Next
    End If
 
    Set HojaDestino = Nothing
 
End Sub

Teniendo en cuenta que en la expresión ThisWorkbook.Worksheets(2) deberás poner el índice/nombre de la otra hoja.

Si son varias las hojas vinculadas podrías poner el código en el evento Workbook_SheetChange tal que así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Static Recursivo As Boolean
    Dim HojaDestino As Worksheet, Celda As Range
    Const HojasExcluidas = "Hoja4" 'Aquí pones los nombres de las hojas que no estén vinculadas
 
    If InStr(HojasExcluidas, Sh.Name) Then Exit Sub 'Si los cambios se producen en una hoja excluída, salimos
 
    If Not Recursivo Then
        Recursivo = True 'Para evitar la recursividad
        For Each HojaDestino In ThisWorkbook.Worksheets
            If HojaDestino.Name <> ActiveSheet.Name And _
               InStr(HojasExcluidas, HojaDestino.Name) = 0 Then 'Para omitir la propia hoja
                                                                'y las excluidas
                For Each Celda In Target    'Para cada celda cambiada en la hoja actual
                    HojaDestino.Range(Celda.Address).Formula = Celda.Text 'Ponemos el contenido en la otra hoja
                Next
            End If
        Next
        Recursivo = False
    End If
    Set HojaDestino = Nothing
 
End Sub

Un saludo,

Norberto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 10
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Vinculación mútua entre rangos de distintas hojas

Publicado por jordi (3 intervenciones) el 21/04/2021 20:32:26
Muchas Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar