Вопрос по vba excel

donkyhot

Есть файл A.xlsx, в котором в некоторых ячейках содержатся ссылки на другие файлы 1.xlsx, 2.xlsx, 3.xlsx, ...
Пример ссылки на ячейку: ='C:\[1.xlsx]Лист1'!$B$2
Соответсвенно в файле 1.xlsx на листе 1 в ячейке B2 содержится некое числовое значение
Задача.
нам известно какое-то числовое значение id.
Мы наверняка знаем, что файл A.xlsx содержит данное значение через ссылку на некий файл из набора (1.xlsx, 2.xlsx, 3.xlsx, ...)
необходимо:
1. В файле A.xlsx найти ячейку со значением id(это понятно как делать). Сделать так, чтобы в данной ячейке осталось толькоз начение id без ссылки на внешний файл (в принципе тоже понятно)
2. В файле, на который была ссылка необходимо это значение удалить. (вот тут у меня возникли сложности)
:confused:

kill-still

[телепат мод]
удалить всмысле удалить ячейку и подтянуть на её место нижние? или просто значение затереть(хотя какие тут сложности могут быть)? или ты значение получаешь через впр?
[/телепат мод]

donkyhot

сложность открыть файл по ссылке, которая указана в ячейке и обратиться к нужной ячейк во внешнем файле.
Удалить активную ячейку или ячейку с определнными (x,y) не является проблемой
можно переформулировать задачу так:
как находясь в ячейке, имеющей ссылку на внешний файл перейти по этой ссылке и удалить значение ячейки куда эта ссылка ведет.
т.е. мы стоим на activecell

nawok

У ячейки есть свойство Formula. Извлекаем оттуда путь к файлу и адрес ячейки. Открываем файл с помощью Workbooks.Open(filepath удаляем в нем нужную ячейку.

donkyhot

Извлекаем оттуда путь к файлу и адрес ячейки
вот здесь я и засел.
Вернее так. Так как сам excel делает это изящно и непринужденно, и есть такая функция
ThisWorkbook.LinkSources (передает массив всех внешних файлов в данной книге) я думал можно как то просто это реализовать.
Тогда подскажите, пожалуйста, как из перемнной типа string вытащить то, что нужно
вот типичная формула:
='C:\Users\Администратор\Desktop\Склад\Курьеры\[Иванов Андрей.xlsx]Лист1'!$B$2
а если даже конкретнее вытащить "Иванов Андрей.xlsx" как имя файла (директория мне известна относительно исходного файла всегда) и $B$2 (и как к этому адресу обратиться в vba)?

nawok


Dim CellFormula As String
CellFormula = ActiveSheet.Cells(1, 2).Formula
Dim FileNameStartPos As String
Dim FileNameEndPos As String
FileNameStartPos = InStr(1, CellFormula, "[") + 1
FileNameEndPos = InStr(1, CellFormula, "]")
Dim FileName As String
FileName = Mid(CellFormula, FileNameStartPos, FileNameEndPos - FileNameStartPos)
MsgBox FileName

Dim CellAddress As String
CellAddress = Mid(CellFormula, Len(CellFormula) - 3, 4)
MsgBox ActiveSheet.Range(CellAddress).Value

donkyhot

уже сам сделал.
Но все равно спасибо.
Тему можно закрывать.

apl13

уже сам сделал.
Но все равно спасибо.
Тему можно закрывать.
В последней строке количество слогов поправь.

apl13

Упорно читаю в названии YOBA EXCEL.
Оставить комментарий
Имя или ник:
Комментарий: