Vincular dos celdas y actualización bidireccional en Excel 2010

Quiero vincular una celda con otra, muy fácil, pongo en A2 la fórmula =A1 y cuando modifico A1, se modifica en A2.
Pero lo que quiero hacer es eso mismo y, además, pueda modificar la celda A2 y se actualice la celda A1.
Yo le llamaría a eso "actualización bidireccional de celdas vinculadas".
¿Hay alguna solución para esto?

1 Respuesta

Respuesta
1

[Hola

En realidad con fórmulas no lo podrás hacer, debes usar macros. En el módulo de la hoja respectiva pega esto:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Address = "$A$1" Then
    Range("A2").Value = Range("A1").Value
ElseIf Target.Address = "$A$2" Then
    Range("A1").Value = Range("A2").Value
End If
Application.EnableEvents = True
End Sub

Con eso obtendrás el efecto que esperas.

Abraham Valencia

Hola.

Gracias por la respuesta, funciona muy bien.

Pero el objetivo de la pregunta iba más allá, pues tengo una tabla vinculada Access - Excel para poder hacer cambios bidireccionales. La tabla de Access tiene muchos campos y es muy complicado trabajar con tantos, aunque se hagan consultas pues se diseñó mal hace años, y lo que quiero es abrir en un libro de excel tantas hojas como grupo de campos quiera crear, a modo de consulta, es decir, utiilizar Excel como base de datos, pues en mi organización access desaparecerá pronto. Habrá una hoja, que es la que está vinculada con Access y las demás hojas estarán vinculadas con ella a través del código que me has aconsejado. Por ello, ¿Cómo sería el código a incluir en el código de Visual Basic de cada hoja en el caso de vincular un rango, por ejemplo $A$1:$B$3 de la hoja vinculada con Access, con $A$1:$B$3 de la siguiente hoja?.  Gracias.

[Hola nuevamente

Algunas cosas:

- No tiene lógica usar Excel en lugar de Access, pero entiendo que no es tu decisión. Lo lógico es seguir usando Access o migrar a SQL Server o MySQL (u otra).

- Sobre Excel como base de datos, igual sugiero leer esto:

https://abrahamexcel.blogspot.com/2018/10/excel-como-base-de-datos.html 

- Suponiendo que en tu "Hoja1" están tus datos cambiantes y que en "Hoja2" deben cambiarse antes los cambio en la primera hoja en celdas del mismo rango, entonces en el módulo de la "Hoja1" coloca esto:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A1:B3")) Is Nothing Then
    Worksheets("Hoja2").Range(Target.Address).Value = Target.Value
End If
End Sub

Saludos]

Abraham Valencia

Hola. he hecho como me dices, y cuando cambio un valor dentro del rango en la hoja1, se cambia también la misma celda en la hoja2, pero cuando cambio un valor del rango en la hoja2, no se cambia, como quiero, en la hoja1.

He probado a pegar el código que me envías en la hoja2 como sigue, cambiando Hoja2 por Hoja1:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A1:B3")) Is Nothing Then
    Worksheets("Hoja1").Range(Target.Address).Value = Target.Value
End If
End Sub

Pero me da el siguiente cuadro de diálogo de error:

Microsoft Visual Basic

Se ha producido el error '-2147417848 (80010108) en tiempo de ejecución:

Error en el método 'Range' de objeto '_Worksheet'

Finalizar Depurar Ayuda

También he intentado poner tu código en la Hoja2. En este caso, cuando cambio un valor en el rango de la hoja2, se cambia en la Hoja1, pero cuando cambio un valor de la hoja1 no se realiza en la Hoja2. Gracias por tu ayuda.


                    

En el módulo de la "Hoja1":

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A1:B3")) Is Nothing Then
    Application.EnableEvents = False
    Worksheets("Hoja2").Range(Target.Address).Value = Target.Value
    Application.EnableEvents = True
End If
End Sub

En el módulo de la "Hoja2":

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A1:B3")) Is Nothing Then
    Application.EnableEvents = False
    Worksheets("Hoja1").Range(Target.Address).Value = Target.Value
    Application.EnableEvents = True
End If
End Sub

Abraham Valencia

PD: Entiendo tu necesidad pero, me parece un poco engorroso hacer eso en varias hojas.

¡Gracias! , pero, al no tener Access dentro de poco, tengo que crear consultas por hojas de excel. Iré mirando las posibilidades de Base de LibreOffice para ver si puedo trabajar con ella, aunque con menos posibilidades de Access.

Hola, ahora Hoja1 y Hoja2 están sincronizadas en ambos sentidos, pero lo que ocurre es que cuando hago una modificación en un registro de la Tabla de Access vinculada con la Hoja1 de Excel, este cambio no se traslada a la Hoja2. Parece que solamente el código de cada hoja hace su función cuando se teclea o se copia y pega algo en el rango. He intentado con el botón actualizar todo, pero tampoco funciona. Gracias.

[Hola nuevamente

¿Es posible que coloques ambos archivos en un "Drive" y compartas por aquí el enlace? Hay varias posibilidades de respuesta y es mejor no "dar vueltas" y ver directamente el problema. Elimina todo lo que no creas necesario compartir.

Abraham Valencia

https://mega.nz/#!Xx8WxAJZ!pOjC0JrFHZiJXRJJBr_G8UH97GJEzWosBPMb7wqvxX4
https://mega.nz/#!nokyzKiB!2-qL8mHvOAlJufievoRknmi65hVQSkhBppOyTMEF8fw 

La vinculación la hago con Access 2000 y Excel 2010. Son las versiones que que tengo instaladas en la oficina.

En mi casa tengo versiones más avanzadas de Access y Excel que permiten vincular solamente en dirección Excel > Access, ya que en versiones posteriores de Access, en el asistente para obtener datos externos desde Excel, en la tercera opción de vincular, te advierte que "  ...  sin embargo, los datos de origen no se pueden modificar en Access".

En los archivos que envío, si se hace una modificación en Hoja2, se traslada a Hoja1 y también a Access 2000, pero si la modificación la hago en Access, solamente se traslada a Hoja1, pero no a Hoja2.

Gracias por tu inestimable ayuda.

[Hola

Como bien comentas en versiones más recientes de Access, ya no se puede vincular hacia Excel; yo uso Office 2016 pero igual quería ver/examinar bien tus archivos para saber/entender que pasaba.

Sobre tu dilema, pues al modificar datos en Access y actualizarse la "Hoja1" de manera automática, es muy probable que no se actualice la "Hoja2" (por razones de versiones yo no puedo reproducir ese dilema) por cuestiones de las versiones que usas (de lo que recuerdo de antaño pues uso Access desde 1997) y lamentablemente quizá no se puede resolverlo del modo que intentas (aunque me sigue pareciendo extraño) y encontrar a alguien que pueda reproducir el dilema (estando en pleno 2018, casi 2019) y dar la respuesta exacta, es la verdad es hoy en día casi imposible.

Si no puedes/pueden cambiar de versiones, sugiero intentar otra cosa que sí se pueda, además, a adaptar a versiones más modernas. Lo siento, no veo otra salida.

Abraham Valencia

¡Gracias! He pensado en hacer una macro que cuando inicie el archivo, copie el rango de celdas de la hoja vinculada a otra hoja, y ya desde ésta, poder vincularla con los códigos que me facilitaste, a otras hojas. Lo intentaré mañana y te diré si se puede así. Saludos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas