2015-09-23 5 views
0

Этот код отлично подходит для обновления внешней ссылки в vba, но есть ли способ изменить местоположение ссылки?Внешняя ссылка новое место VBA

Я могу сделать это с помощью связанного диспетчера таблиц при выборе «Всегда запрашивать новое местоположение», но я хотел бы сделать это через VBA, чтобы я мог создать кнопку для пользователей, чтобы нажать, чтобы найти новую книгу

Выбрать новую книгу, Переместить внешнюю книгу excel.

Function Relink() 

    Set db = CurrentDb 
    Set tdf = db.TableDefs("Sales") 
    tdf.Connect = "Excel 5.0;HDR=YES;IMEX=2;" & _ 
    "DATABASE=C:\Sales.xlsb" 
    tdf.RefreshLink 

End Function 

ответ

1

Я использую эту функцию, чтобы повторно связать мои таблицы из таблицы, на основе ли я работать на моем C: \ диска или в сети. Я думаю, вы можете изменить это, чтобы пользователь вводил местоположение файла или использовал диалоговое окно файла для перехода к местоположению.

Функция relink_tables()

If Left(CurrentDb().Name, 2) = "C:" Then 
    source = "local" 
    Else: source = "network" 
    End If 
Set RS = CurrentDb.OpenRecordset("select * from [linked table source] where source='" & source & "'") 
source = RS.Fields("path") 

For Each R In References 
    If InStr(R.Name, "Common Tables") > 0 Then Application.References.Remove R 
    Next R 
Application.References.AddFromFile source 

x = 0 
Set TDefs = CurrentDb().TableDefs 
For Each table In TDefs 
    If InStr(table.Connect, "Common Tables") = 0 Then GoTo NT 
    table.Connect = ";DATABASE=" & source 
    table.RefreshLink 
    x = x + 1 
NT: 
    Next table 
Finish: 
MsgBox "remapped " & x & " tables" 
End Function`enter code here` 
+0

Благодаря моим навыки VBA разве большие, но я постараюсь изменить код так, чтобы пользователи могли использовать диалоговый файл для просмотра на место, чтобы найти первенствовать файл – Elixir

1

Вот функция, я использую, чтобы позволить пользователю перейти к файлу и выберите его. Вы можете вызвать эту функцию, чтобы получить имя файла в предыдущей функции, а не получать ее из таблицы.

Public Function Get_File(Optional ftype = "xls") 

Dim fd As Object 
Const msoFileDialogFolderPicker = 4 
Const msoFileDialogFilePicker = 3 
Const msoFileDialogViewDetails = 2 

'Create a FileDialog object as a File Picker dialog box. 
Set fd = Application.FileDialog(msoFileDialogFilePicker) 
fd.AllowMultiSelect = False 
fd.ButtonName = "Select" 
fd.InitialView = msoFileDialogViewDetails 
fd.Title = "Select File" 
fd.InitialFileName = "MyDocuments\" 
fd.Filters.Clear 
fd.Filters.Add "Files", "*." & ftype & "*" 

'Show the dialog box and get the file name 
If fd.Show = -1 Then 
    Get_File = fd.SelectedItems(1) 
    Else 
    Get_File = "" 
    End If 

End Function 
+0

Чудесный большое спасибо – Elixir

+0

Привет Я пытаясь вызвать функцию, но мне не повезло, если бы я не разместил код в нужном месте. – Elixir

+1

В 1-м ответе выньте 1-й 2 блока кода - все выше строки «x = 0». Затем добавьте строку «source = getfile()». Это должно открыть диалоговое окно для перехода к файлу. Очевидно, у меня есть код, настроенный для переназначения всего, что сопоставляется с файлом под названием «Common Tables», и вы захотите также изменить эту часть функции релинка. –

Смежные вопросы