Страницы: 1
RSS
При открытии книги необходимо указать новый путь для связей
 
Друзья, добрый день.
Создаю генератор отчетов.
Есть 2 файла:
1) Генератор (с одной связью)
2) Исходные данные (связанный файл)

В файл генератор - подтягиваются данные из файла Исходные данные. Т.к. файл Исходные данные может называться как угодно и лежать где угодно, при запуске добавляю выбор пути. Сейчас при запуске выдает ошибку "Type mismatch", а вот где несоответствие типа понять не могу. Нужен свежий взгляд.
Код
Private Sub Workbook_Open()

MsgBox "Укажите файл - источник данных" _
    & vbNewLine, vbInformation, "Путь к источнику данных"
  
   ' Запрос пользователю на новый источник данных
With Application.FileDialog(msoFileDialogFilePicker)
.Show
 strwPath = .SelectedItems(1) 'сохраняем путь в переменную
End With

'Тут копируем выбранный файл в папку с файлом из которого запущен макрос
'Переиминовывам скопированный файл

'Обновления пути связи
With ActiveWorkbook
.ChangeLink Name:=.LinkSources(xlExcelLinks), NewName:=strwPath, Type:=xlExcelLinks
.UpdateLinks = xlUpdateLinksUserSetting
End With

'Открытие файла для подтягивания данных
Workbooks.Open Filename:=strwPath

'Закрытие файла связи  
ClsBK = ActiveWorkbook.ExpressData
Workbooks(ClsBK).Close

'Тут удаляем скопированный файл

End Sub  

Так же вопрос, что и в какой момент стоит дописать что бы файл Исходные данные:
1) Копировался в папку с файлом Генератор
2) Переиминовывался в файл из связи
3) Потом уже подтягивал, обновлял пути
4) После подтягивания данных закрывался + Удалялся.

Есть кто может объяснить в чем ошибка, верно ли я понял алгоритм действий, как должны выглядеть действия?

Заранее спасибо
невозможное делаем сразу, чудо - требует небольшой подготовки.
 
Цитата
phelex написал: Нужен свежий взгляд.
А куда глядеть-то? На какой строке ошибка? А лучше файл-пример приложите
Согласие есть продукт при полном непротивлении сторон
 
ДИАЛОГОВОЕ ОКНО ВЫБОРА ФАЙЛОВ/ПАПКИ
КАК СРЕДСТВАМИ VBA ПЕРЕИМЕНОВАТЬ/ПЕРЕМЕСТИТЬ/СКОПИРОВАТЬ ФАЙЛ
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал: На какой строке ошибка?
А вот и непонятно в какой строке ошибка. Просто говорит типы не те, хотя вроде визуально те.\
Спасибо за ссылки, но что то не нашел проблемы...
невозможное делаем сразу, чудо - требует небольшой подготовки.
 
Цитата
phelex написал:
А вот и непонятно в какой строке ошибка
это как? Вы когда Start(запуск кода) нажимаете - куда перекидывает? Наверное, ActiveWorkbook.ExpressData выделяет? Вы откуда взяли это свойство для книги? Оно что-то нигде в свойствах объекта Workbook не описано. Что Вы хотели этим получить? Закрыть книгу? Так это делается проще:
Код
ActiveWorkbook.Close
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков,
Нашел проблему:
Код
aLinks = ActiveWorkbook.LinkSources(xlLinkTypeExcelLinks)
ActiveWorkbook.ChangeLink aLinks(1), Generator & "/ExpressData.xlsx", xlLinkTypeExcelLinks
Вот эта aLinks переменная создает проблему Type mismatch. Что я пишу не так?
невозможное делаем сразу, чудо - требует небольшой подготовки.
 
Цитата
phelex написал:
Что я пишу не так?
Вы привели всего две строки и опять не указали в какой именно ошибка. В самих этих строках эта ошибка появляется не может, все типы данных указаны верно, если только aLinks не объявлена aLinks() As String, например. Надо объявить просто:
Код
Dim aLinks
других идей нет
Изменено: Дмитрий(The_Prist) Щербаков - 13.05.2019 14:18:19
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Итак, я нашел причину :)
Вообщем если связей нет (например если удаляешь листы содержащие связи), то возникает ошибка типа т.к. значение пустое.

Всем больше спасибо.
невозможное делаем сразу, чудо - требует небольшой подготовки.
 
Тогда проверяйте перед изменением связей:
Код
If isArray(aLinks) then
ActiveWorkbook.ChangeLink aLinks(1), Generator & "/ExpressData.xlsx", xlLinkTypeExcelLinks
end if
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх