Страницы: 1
RSS
VBA, Изменение ссылки в на другую книгу с заданным интервалом
 
Добрый день. Долго искал, крутил, не накрутил.
Ситуация следующая.
Имеется "Книга1", в которую подсасываются данные из "Книги2",
Ссылки в ячейках "Книги1" имеют следующий вид
"=[Книга2.xlsx]Лист1!$G$126"

Регулярно раз в месяц данные ссылки необходимо менять. НЕ МЕНЯЯ СТРОКИ  на "Книгу2" ссылка должна быть сдвинута на 16 столбцов в "Книге2" вправо.
Т.е. строка постоянна, столбец каждый раз на + 16.
в ячейке "Книги1" допустим "C9" должна появиться ссылка  
"=[Книга2.xlsx]Лист1!$W$126" вместо "=[Книга2.xlsx]Лист1!$G$126"

Вопрос, как это сделать автоматически?
Думал попытаюсь вытащить номер столбца, чтобы поменять в обычном формате Cells (126, 7) через цикл, вытаскивает значение из "Книги1" "номер столбца 3 или "С", что логично.
Из формата Range("C9") = "=[Книга2.xlsx]Лист1!R126C7" кручу кручу тоже не могу додумать как сказать переменной что нужно взять C7 и потом прибавить + 16.

Очень прошу подсказать. :cry:
 
Попробуйте:
Код
=Cells (126, 7).offset(,16).address(0,0,xla1)
Я сам - дурнее всякого примера! ...
 
попробовал
Код
Sub zamena() 
    Range("C9") = Cells(126, 7).Offset(, 16).Address(0, 0, xlA1)
End Sub
в ячейке получилось значение W126. Т.е. передался адрес ячейки из Книги2, а не путь(ссылка) к этой ячейки
Изменено: Василий - 25.08.2016 20:35:35
 
Цитата
Василий написал:
не могу додумать как сказать переменной что нужно взять C7 и потом прибавить + 16.
- что не так? А если нужен полный путь, так и указывайте полный путь параметру address. Да справку по нему почитайте. Или Вас из ложечки кормить? :)
Я сам - дурнее всякого примера! ...
 
Спасибо большое, правда. Не знаю еще поможет ли. Был бы признателен если бы вместо много букв чуть чуть показать на примере, чтобы я мог поиграться, говорю же опыта недостаточно.
 
Цитата
Василий написал:
Долго искал, крутил, не накрутил.
Ага, оно и видно.  :evil:
Код
    Range("C9").Formula = "=" & Workbooks("Книга2.xlsx").Sheets("Лист1").Cells(126, 7).Offset(, 16).Address(0, 0, 1, -1)
Изменено: kuklp - 25.08.2016 21:22:29
Я сам - дурнее всякого примера! ...
 
Подождите ну тогда же получается мы просто руками, как текст указываем программе полный путь текущей ячейки в "Книге2", а не берем изначальный адрес из ссылки в "Книге1", чтобы от него оттолкнуться и сместится на 16 ячеек.
Т.е. я правильно понимаю, что адрес ячейки от которой нужно сместиться на + 16 нужно указывать руками?
 
Василий, Вы меня изводите.  :D Если Вы не в курсе, я в глаза не видел ни книги 1, ни книги 2, ни Вашего макроса. И в принципе не понимаю, что Вам надо.
Кто Вам не дает например, обрезать строку:
"=[Книга2.xlsx]Лист1!$G$126" по восклицательный знак и пришить к ней Cells (126, 7).offset(,16).address(0,0,xla1) из ответа №2 этой темы? Для этого подойдут директивы left, или replace. И чтоб в дальнейшем не играть в "угадайку", потрудитесь пожалуйста прочесть Правила, особое внимание на пп2.3.
Изменено: kuklp - 25.08.2016 22:14:00
Я сам - дурнее всякого примера! ...
 
извините если так.
kuklp написал:
"=[Книга2.xlsx]Лист1!$G$126" по восклицательный знак и пришить к ней Cells (126, 7).offset(,16).address(0,0,xla1) из ответа №2
Потому что машина не знает, что книга1 ссылается на Cells (126, 7) в книге2
Мне нужно чтобы в книге 1, адрес ссылки из книги2 сместился на 16 ячеек вправо, и соотвественно подтянул значение "922", вот и всё почему я сам мучаюсь и мучаю Вас  :)
Вот файлики
Изменено: Василий - 25.08.2016 22:30:34
 
Код
Public Sub www()
    Dim s$, l&
    s = [c9].Formula: l = InStr(1, s, "!") + 1
    Range("C9").Formula = Left(s, l) & Range(Mid(s, l)).Offset(, 16).Address(0, 0, 1)
End Sub
Я сам - дурнее всякого примера! ...
 
Вариант:
Код
Public Sub www()
    Dim s$
    s = Evaluate([c9].Formula).Address(0, 0, 1)
    Range("C9").Replace s, Range(s).Offset(, 16).Address(0, 0, 1), xlPart
End Sub
Я сам - дурнее всякого примера! ...
 
kuklp, спасибо большое первый вариант работает второй нет, я даже таких операторов в учебнике не видел. Буду изучать по символьно справку на каждый. Еще раз спасибо.
Страницы: 1
Наверх