He probado algunas de las respuestas anteriores , especialmente la respuesta de Martin Thompson con la que obtuve algunos errores, y así la modifiqué de la siguiente manera:
Public Function reLinkTables() As Boolean
On Error GoTo ErrorRoutine
Dim sMyConnectString As String
Dim tdf As TableDef
Dim db_name As String
' The Main Answer is by Martin Thompson
' Modified by Dr. Mohammad Elnesr
'We will link all linked tables to an accdb Access file located in the same folder as this file.
'Replace the DATA file name in the following statement with the name of your DATA file:
sMyConnectString = ";DATABASE=" & CurrentProject.Path & "\"
For Each tdf In CurrentDb.TableDefs
If Len(tdf.Connect) > 0 Then
'It's a linked table, so re-link:
'First, get the database name
db_name = GetFileName(tdf.Connect)
' Then link the table to the current path
tdf.Connect = sMyConnectString & db_name
tdf.RefreshLink
End If
Next tdf
ExitRoutine:
MsgBox "All tables were relinked successfully"
Exit Function
ErrorRoutine:
MsgBox "Error in gbLinkTables: " & Err.Number & ": " & Err.Description
Resume ExitRoutine
End Function
Function GetFileName(FullPath As String) As String
Dim splitList As Variant
splitList = VBA.Split(FullPath, "\")
GetFileName = splitList(UBound(splitList, 1))
End Function
Después fininshing esto, Goto acceso Ribon> Crear> Macro En el menú desplegable, seleccione "EjecutarCódigo", a continuación, en el tipo de nombre de la función "RelinkTables" que hemos escrito aquí. A continuación, guarde la macro con el nombre "AutoExec". Cada vez que abra la base de datos, todas las tablas vinculadas se volverán a vincular a la ruta original. Esto es muy útil si coloca sus bases de datos en un medio portátil.
Qué ridículo que Access no admita las rutas relativas de la caja. ¿Cómo se supone que alguien debe enviar a un cliente una base de datos dividida con rutas absolutas? –
Es probable que la limitación se deba a que Access es multiusuario, ya que varios usuarios pueden usar el mismo archivo y hay un bloqueo de archivos; luego se requiere una ruta completa. La solución simple es al inicio, su front-end comprueba si el back-end está disponible (y ese control puede ser relativo). Si el enlace es incorrecto, entonces su código simplemente se vuelve a vincular al inicio. En efecto, esto significa que su aplicación se ejecutará bien si se mueve. –