Algo largo pero es la forma que utilizo... Si cambias la aplicación de ubicación, te saldrá un dialogo para que busques la BD de tablas.
Al abrir el formulario principal pongo lo siguiente:
Private Sub Form_Open(Cancel As Integer)
Dim CAMPO As String
On Error GoTo ErrorOpen
Me.RecordSource = "UNA DE LAS TABLAS"
ErrorOpen:
If Err = 3024 Or Err = 3043 Or Err = 3044 Then
CAMPO = VTACCESS()
End If
Resume Next
End Sub
-------------------------------------------------------------------------------------------------------
En un módulo creo estas funciones:
Function VTACCESS() As Boolean
Dim ActualDB As Database
Dim ETabla As TableDef
Dim ModuloServidorFile As String
Dim Contador As Integer
ModuloServidorFile = OpenFileAccesos()
If ModuloServidorFile <> "" Then
VTACCESS = True
Set ActualDB = CurrentDb()
For Contador = 0 To ActualDB.TableDefs.Count - 1
Set ETabla = ActualDB.TableDefs(Contador)
If ETabla.Connect <> "" And Right(ETabla.Connect, 12) = "GESPERBD.MDE" Then
ETabla.Connect = ";DATABASE=" & ModuloServidorFile
Err = 0
ETabla.RefreshLink
If Err <> 0 Then
MsgBox "La conexión con el Módulo Servidor ha sido insatisfactoria." & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "'" & ModuloServidorFile & "' no contiene la tabla '" & ETabla.SourceTableName & "' requerida por la aplicación.", vbCritical + vbOKOnly, "Conexión con el Servidor"
VTACCESS = False
Exit For
End If
End If
Next Contador
Else
MsgBox "La conexión con el Módulo Servidor ha sido cancelada.", vbCritical + vbOKOnly, "Conexión con el Servidor"
VTACCESS = False
End If
End Function
Private Function OpenFileAccesos() As String
Dim of As OPENFILENAME
of.hwndOwner = Application.hWndAccessApp
of.hInstance = 0
of.lpstrCustomFilter = 0
of.nMaxCustrFilter = 0
of.lpfnHook = 0
of.lpTemplateName = 0
of.lCustrData = 0
of.lpstrFilter = "GESPERBD" & vbNullChar & "*.mde" & vbNullChar & vbNullChar
of.nFilterIndex = 1
of.lpstrFile = Left$("GESPERBD.MDE" & String$(512, 0), 512)
of.nMaxFile = 511
of.lpstrFileTitle = String$(512, 0)
of.nMaxFileTitle = 511
of.lpstrTitle = "Vincular B.D."
of.lpstrInitialDir = "C:PROGRAMGESPER"
of.lpstrDefExt = ""
of.flags = OFN_EXPLORER + OFN_FILEMUSTEXIST + OFN_NOCHANGEDIR + OFN_PATHMUSTEXIST + OFN_HIDEREADONLY
of.lStructSize = Len(of)
If GetOpenFileName(of) Then
OpenFileAccesos = Trim(Left$(of.lpstrFile, InStr(of.lpstrFile, vbNullChar) - 1))
Else
OpenFileAccesos = ""
End If
End Function
Adapta estas lineas a tus necesidades
of.lpstrFilter = "GESPERBD" & vbNullChar & "*.mde" & vbNullChar & vbNullChar
of.lpstrFile = Left$("GESPERBD.MDE" & String$(512, 0), 512)
of.lpstrInitialDir = "C:PROGRAMGESPER"