Всем доброго времени суток. Столкнулся с проблемой при написании процедур на VBA. Программа работает корректно, если адрес ячеек, из которых берется значение, и адрес ячеек, в которые записывается значение, остаются неизменными. При добавлении дополнительных строк или столбцов до или между связанными ячейками программа дает сбой. В самом Excel такой проблемы не существует: адреса ячеек в формулах автоматически меняются при добавлении строк или столбцов. Как аналогичное действие реализуется в VBA? Файл-пример прилагается. Макрос на 1-м листе работает корректно, на остальных - дает сбой.
Всем доброго времени суток. Столкнулся с проблемой при написании процедур на VBA. Программа работает корректно, если адрес ячеек, из которых берется значение, и адрес ячеек, в которые записывается значение, остаются неизменными. При добавлении дополнительных строк или столбцов до или между связанными ячейками программа дает сбой. В самом Excel такой проблемы не существует: адреса ячеек в формулах автоматически меняются при добавлении строк или столбцов. Как аналогичное действие реализуется в VBA? Файл-пример прилагается. Макрос на 1-м листе работает корректно, на остальных - дает сбой.Vasiliy
Никак. В основном адреса в коде прописаны конкретно и никаким образом не реагируют на удаление/вставку строк/столбцов на рабочем листе. Поэтому нужно заранее предвидеть подобную ситуацию и обрабатывать ее в коде.
Цитата
Как аналогичное действие реализуется в VBA?
Никак. В основном адреса в коде прописаны конкретно и никаким образом не реагируют на удаление/вставку строк/столбцов на рабочем листе. Поэтому нужно заранее предвидеть подобную ситуацию и обрабатывать ее в коде.VictorM
Сообщение отредактировал VictorM - Пятница, 06.09.2013, 08:58
Я исхожу из того, что если это возможно в самом Ecxel, то в VBA и подавно. Вопрос только в том как это записать в коде программы. То, что записал я в примере, явно неправильно. Это только для наглядности того, что необходимо получить и где происходит сбой. Может быть, как заметил PowerBoy, стоит добавить условие "если"? Если выполнена команда добавить строку или столбец, то нужно пересчитать адреса ячеек. А может быть есть более простой способ решения проблемы, ведь задача стандартная.
Я исхожу из того, что если это возможно в самом Ecxel, то в VBA и подавно. Вопрос только в том как это записать в коде программы. То, что записал я в примере, явно неправильно. Это только для наглядности того, что необходимо получить и где происходит сбой. Может быть, как заметил PowerBoy, стоит добавить условие "если"? Если выполнена команда добавить строку или столбец, то нужно пересчитать адреса ячеек. А может быть есть более простой способ решения проблемы, ведь задача стандартная.Vasiliy
А может быть есть более простой способ решения проблемы
Создайте пару вспомогательных ячеек (или именованных переменных) с ф-лами ROW() и COLUMNS(), которые будт ссылаться на сдвигаемый диапазон и отслеживайте по ним его положение.
А может быть есть более простой способ решения проблемы
Создайте пару вспомогательных ячеек (или именованных переменных) с ф-лами ROW() и COLUMNS(), которые будт ссылаться на сдвигаемый диапазон и отслеживайте по ним его положение.Формуляр
Excel 2003 EN, 2013 EN
Сообщение отредактировал Формуляр - Пятница, 06.09.2013, 12:59
В данном случае - ищем (например через Find) ячейки "Таблица 1" и "Таблица 2", от них и "пляшем". Или проще - даём таблицам имена, обращаемся по именам. Тогда вся ответственность на юзере - чтоб область оставалась именованной.
В данном случае - ищем (например через Find) ячейки "Таблица 1" и "Таблица 2", от них и "пляшем". Или проще - даём таблицам имена, обращаемся по именам. Тогда вся ответственность на юзере - чтоб область оставалась именованной.Hugo