Помогите мне в такой проблеме. У меня документ в нем сейчас около 10 листов. Каждый лист ссылается на пару ячеек предыдущего. Примет: Лист2 ссылается на ячейку В2 и С5 листа1, Лист3 ссылается на В2 и С5 листа2 и тд. Имена листов не известны. Как ссылаться на предыдущий лист???
Помогите мне в такой проблеме. У меня документ в нем сейчас около 10 листов. Каждый лист ссылается на пару ячеек предыдущего. Примет: Лист2 ссылается на ячейку В2 и С5 листа1, Лист3 ссылается на В2 и С5 листа2 и тд. Имена листов не известны. Как ссылаться на предыдущий лист???ghost3085
Function SheetName(iSheetNo As Long) As String SheetName = Sheets(iSheetNo).Name End Function
[/vba]
Определяем номер листа [vba]
Код
Function SheetNo() Application.Volatile SheetNo = Application.Caller.Parent.Index End Function
[/vba]
И, соответственно,
Код
=ДВССЫЛ(sheetname(sheetno()-1)&"!A1")
В результате на чистом фале все работает, но когда переименовываю лист по типу 10-15,04 (с 10 по 15 апреля) в результате ЗНАЧ Подскажите где копать????
[admin]Оформляйте коды тегами![/admin]
Я тут немного поклацал. У меня 2 функции
Определяем имя листа [vba]
Код
Function SheetName(iSheetNo As Long) As String SheetName = Sheets(iSheetNo).Name End Function
[/vba]
Определяем номер листа [vba]
Код
Function SheetNo() Application.Volatile SheetNo = Application.Caller.Parent.Index End Function
[/vba]
И, соответственно,
Код
=ДВССЫЛ(sheetname(sheetno()-1)&"!A1")
В результате на чистом фале все работает, но когда переименовываю лист по типу 10-15,04 (с 10 по 15 апреля) в результате ЗНАЧ Подскажите где копать????
Можно функцией пользователя. Код поместить в Модуль1 [vba]
Код
Function PrevSheet(Cell As Range) As Variant PrevSheet = Sheets(IIf(ActiveSheet.Index = 1, 1, ActiveSheet.Index - 1)).Range(Cell.Address) End Function
[/vba] Чтобы при изменении значений в ячейке, которая является аргументом функции, функция пересчитывалась надо к формуле добавить: Если формула возвращает число +СЕГОДНЯ()*0, если формула возвращает текст &ЕСЛИ(СЕГОДНЯ()*0;;"") См.файл.
Можно функцией пользователя. Код поместить в Модуль1 [vba]
Код
Function PrevSheet(Cell As Range) As Variant PrevSheet = Sheets(IIf(ActiveSheet.Index = 1, 1, ActiveSheet.Index - 1)).Range(Cell.Address) End Function
[/vba] Чтобы при изменении значений в ячейке, которая является аргументом функции, функция пересчитывалась надо к формуле добавить: Если формула возвращает число +СЕГОДНЯ()*0, если формула возвращает текст &ЕСЛИ(СЕГОДНЯ()*0;;"") См.файл.AlexM
Спасибо!! Теперь вопрос как зделать автоматическое обновление данных при перемещение по ячейкам?? Данные не обновляться пока не обновлю ячейку с формулой.
Спасибо!! Теперь вопрос как зделать автоматическое обновление данных при перемещение по ячейкам?? Данные не обновляться пока не обновлю ячейку с формулой.ghost3085
Может я конечно что-то не так зделал, но у меня не срабатывает. Нужно чтоб обновлялись значения в ячейках автоматом как при обычних вычислениях. Изначально эта задача для человека который не очень знает компьютер, поэтому вручную обновлять ячейки не очень удобно...
Может я конечно что-то не так зделал, но у меня не срабатывает. Нужно чтоб обновлялись значения в ячейках автоматом как при обычних вычислениях. Изначально эта задача для человека который не очень знает компьютер, поэтому вручную обновлять ячейки не очень удобно...ghost3085
Сообщение отредактировал ghost3085 - Четверг, 30.05.2013, 14:11
Извиняюсь что не корректно выразился. Нужно автоматическое обновление данных/ссылок (как при обычных формулах) поменял значение в ячейке - формула пересчитала автоматом...
Извиняюсь что не корректно выразился. Нужно автоматическое обновление данных/ссылок (как при обычных формулах) поменял значение в ячейке - формула пересчитала автоматом...ghost3085
поменял значение в ячейке - формула пересчитала автоматом
Цитата (AlexM)
Чтобы при изменении значений в ячейке, которая является аргументом функции, функция пересчитывалась надо к формуле добавить: Если формула возвращает число +СЕГОДНЯ()*0, если формула возвращает текст &ЕСЛИ(СЕГОДНЯ()*0;;"") См.файл.
Цитата (ghost3085)
поменял значение в ячейке - формула пересчитала автоматом
Цитата (AlexM)
Чтобы при изменении значений в ячейке, которая является аргументом функции, функция пересчитывалась надо к формуле добавить: Если формула возвращает число +СЕГОДНЯ()*0, если формула возвращает текст &ЕСЛИ(СЕГОДНЯ()*0;;"") См.файл.
Извиняюсь еще раз!!! Вот пример моей задачи. Подскажите что делать с этой проблемой. Ссылки ссылаются на первый лист (по умолчанию), происходит дублирование, если обновить тогда пересчитует. Где копать????? также возникает цикличиская ссылка.... Добавил!!!
Извиняюсь еще раз!!! Вот пример моей задачи. Подскажите что делать с этой проблемой. Ссылки ссылаются на первый лист (по умолчанию), происходит дублирование, если обновить тогда пересчитует. Где копать????? также возникает цикличиская ссылка.... Добавил!!!ghost3085
Здраствуйте, у меня была такая же проблема, воспользовался вашим решением - работает, для работы циклической ссылки я включил итеративные вычисления, но при любых изменениях значения в ячейках со ссылкой "prevshit" сбиваются, и появляются несуществующие цифры, видимо это связано с тем, что циклическая может выдать неправильное значение, что она собственно и делает. как решить эту проблему? подскажите пожалуйста
Здраствуйте, у меня была такая же проблема, воспользовался вашим решением - работает, для работы циклической ссылки я включил итеративные вычисления, но при любых изменениях значения в ячейках со ссылкой "prevshit" сбиваются, и появляются несуществующие цифры, видимо это связано с тем, что циклическая может выдать неправильное значение, что она собственно и делает. как решить эту проблему? подскажите пожалуйстаСергей
Бьюсь с той же проблемой, ИМХО циклические ссылки возникают при количестве листов с ссылками на предыдущий более 2 х. Вот эта вот конструкция ActiveSheet.Index, дает нам индекс текущего листа. При этом если мы откроем последний лист, который будет в данный момент как раз активным, для всех ячеек содержащих данную формул он так же станет активным, формула замкнется на себя. И этого может не случиться если листов будет всего два и первый из них будет содержать только стартовые данные.
Так что главный вопрос - как получить имя листа которому принадлежит вычисляемая ячейка для которой происходят вычисления не зависимо от активного в данный момент листа.
Бьюсь с той же проблемой, ИМХО циклические ссылки возникают при количестве листов с ссылками на предыдущий более 2 х. Вот эта вот конструкция ActiveSheet.Index, дает нам индекс текущего листа. При этом если мы откроем последний лист, который будет в данный момент как раз активным, для всех ячеек содержащих данную формул он так же станет активным, формула замкнется на себя. И этого может не случиться если листов будет всего два и первый из них будет содержать только стартовые данные.
Так что главный вопрос - как получить имя листа которому принадлежит вычисляемая ячейка для которой происходят вычисления не зависимо от активного в данный момент листа.maeglah
Сообщение отредактировал maeglah - Понедельник, 20.01.2014, 20:48
AlexM, а почему для пересчета функции надо добавлять +СЕГОДНЯ()*0 ? Потому, что excel в любом случае будет считать функцию СЕГОДНЯ() и заодно все значение ячейки пересчитает, что ли? То есть по факту это костыль?
AlexM, а почему для пересчета функции надо добавлять +СЕГОДНЯ()*0 ? Потому, что excel в любом случае будет считать функцию СЕГОДНЯ() и заодно все значение ячейки пересчитает, что ли? То есть по факту это костыль?acidlisk
Господа профессионалы, нужна помощь профану) Решил поднять эту тему.
Вопрос совершенно тот же, при копировании листа нужно использовать в некоторых ячейках данные с предыдущего листа, в частности, необходимо в отчете во вложении прописать такую формулу в ячейках B2 и столбце С листа 7.04Н, чтобы брались данные соответственно B3 и столбца F листа и так продолжая при каждом добавлении листа.
Помогите пожалуйста с формулой...
Всем добра!
Господа профессионалы, нужна помощь профану) Решил поднять эту тему.
Вопрос совершенно тот же, при копировании листа нужно использовать в некоторых ячейках данные с предыдущего листа, в частности, необходимо в отчете во вложении прописать такую формулу в ячейках B2 и столбце С листа 7.04Н, чтобы брались данные соответственно B3 и столбца F листа и так продолжая при каждом добавлении листа.