Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2011, 13:09   #1
HTR
 
Регистрация: 27.03.2009
Сообщений: 8
По умолчанию Замена ссылок в книге

Доброго времени суток, уважаемые форумчане!
Есть 2 файла Результат и Исходные данные. На Листе1 файла Результат есть ссылки, записанные в таком виде, например:='{File_name}data'!$B$18. Лист data есть в файле Исходные данные. Необходимо, чтобы процедура заменяла именно ссылку '{File_name}data' на ссылку на файл, выбранный пользователем и не трогала другие ссылки (внутренние связи) в книге Результат. Как можно поправить следующий код?

Private Sub new_change_data()

alinks = ActiveWorkbook.LinkSources(xlExcelL inks)
FileOldLink = alinks(1)
FileToLink = Application.GetOpenFilename("Exl files(*.xls),*.xls")
If FileToLink = False Then
Exit Sub
End If
ActiveWorkbook.ChangeLink FileOldLink, FileToLink, xlExcelLinks

End Sub

Заранее спасибо!
Вложения
Тип файла: rar Пример.rar (12.6 Кб, 10 просмотров)
HTR вне форума Ответить с цитированием
Старый 02.04.2011, 17:20   #2
was3110
Форумчанин
 
Аватар для was3110
 
Регистрация: 25.04.2010
Сообщений: 254
По умолчанию

Можно поработать со строкой...
Цитата:
Sub new_change_data()
Dim lstr As String, repl As String, p As Integer
lstr = ActiveCell.Formula

alinks = Application.ActiveWorkbook.LinkSour ces(xlExcelLinks)
FileOldLink = alinks(1)
FileToLink = Application.GetOpenFilename("Exl files(*.xls),*.xls")
If FileToLink = False Then
Exit Sub
End If
p = LastSl(FileToLink)
repl = Left(FileToLink, p) & "[" & Mid(FileToLink, p + 1) & "]"
ActiveCell = Replace(lstr, "{File_name}", repl)
End Sub

Private Function LastSl(ByVal astr As String) As Integer
Dim i As Integer, p As Integer
p = 3
Do While p
i = p
p = InStr(p + 1, astr, "\")
Loop
LastSl = i
End Function
помогать студентам - моя вторая профессия
was3110 вне форума Ответить с цитированием
Старый 04.04.2011, 11:12   #3
HTR
 
Регистрация: 27.03.2009
Сообщений: 8
По умолчанию

Спасибо интересное решение. Только проблема в том, что это в примере только 3 ссылки, а в реальности их очень много по всем листам и соответственно такой способ займет много времени если перебирать все листы во всей книге.
HTR вне форума Ответить с цитированием
Старый 04.04.2011, 20:17   #4
was3110
Форумчанин
 
Аватар для was3110
 
Регистрация: 25.04.2010
Сообщений: 254
По умолчанию

Цитата:
Сообщение от HTR Посмотреть сообщение
... , чтобы процедура заменяла именно ссылку '{File_name}data' на ссылку на файл, выбранный пользователем и не трогала другие ссылки
А если надо все, так ваш вариант все и заменял.
помогать студентам - моя вторая профессия
was3110 вне форума Ответить с цитированием
Старый 05.04.2011, 17:22   #5
HTR
 
Регистрация: 27.03.2009
Сообщений: 8
По умолчанию

Проблема в том, что код как-то нестабильно работает на разных файлах, причем на одном и том же компьютере. В одном файле меняет '{File_name}data без проблем, в другом заодно меняет на другом листе внутреннюю ссылку, в третьем, в частности в приложенном примере заменяет ссылки лишь со второго нажатия Ок окна Select sheet. Сломала голову уже
Изображения
Тип файла: jpg Select sheet.jpg (21.3 Кб, 133 просмотров)
Вложения
Тип файла: doc Select sheet.doc (30.0 Кб, 12 просмотров)
HTR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
массовая замена ссылок в куче файлов kzld Microsoft Office Excel 0 22.11.2010 12:48
Замена кода программы с Delhi5 на Delhi7 либо замена базы данных с Acessa на MySQL DorianLeroy Фриланс 8 18.02.2009 18:52
Поиск в книге Andr Microsoft Office Excel 1 20.11.2007 21:47
Поиск в книге asale Microsoft Office Excel 7 26.01.2007 07:29