Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Использование типа ссылок на ячейки в макросах - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Использование типа ссылок на ячейки в макросах
Vasiliy Дата: Пятница, 06.09.2013, 01:38 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Всем доброго времени суток.
Столкнулся с проблемой при написании процедур на VBA. Программа работает корректно, если адрес ячеек, из которых берется значение, и адрес ячеек, в которые записывается значение, остаются неизменными. При добавлении дополнительных строк или столбцов до или между связанными ячейками программа дает сбой. В самом Excel такой проблемы не существует: адреса ячеек в формулах автоматически меняются при добавлении строк или столбцов. Как аналогичное действие реализуется в VBA?
Файл-пример прилагается. Макрос на 1-м листе работает корректно, на остальных - дает сбой.
К сообщению приложен файл: 2224114.xlsm (22.4 Kb)
 
Ответить
СообщениеВсем доброго времени суток.
Столкнулся с проблемой при написании процедур на VBA. Программа работает корректно, если адрес ячеек, из которых берется значение, и адрес ячеек, в которые записывается значение, остаются неизменными. При добавлении дополнительных строк или столбцов до или между связанными ячейками программа дает сбой. В самом Excel такой проблемы не существует: адреса ячеек в формулах автоматически меняются при добавлении строк или столбцов. Как аналогичное действие реализуется в VBA?
Файл-пример прилагается. Макрос на 1-м листе работает корректно, на остальных - дает сбой.

Автор - Vasiliy
Дата добавления - 06.09.2013 в 01:38
PowerBoy Дата: Пятница, 06.09.2013, 06:54 | Сообщение № 2
Группа: Проверенные
Ранг: Участник
Сообщений: 100
Репутация: 31 ±
Замечаний: 0% ±

2003
Когда Вы вставляете строку , все сдвигается вниз. Соответственно и номер строки теперь на единицу больше.


Excel + SQL = ActiveTables (http://vk.com/ExcelSQL)
 
Ответить
СообщениеКогда Вы вставляете строку , все сдвигается вниз. Соответственно и номер строки теперь на единицу больше.

Автор - PowerBoy
Дата добавления - 06.09.2013 в 06:54
VictorM Дата: Пятница, 06.09.2013, 08:55 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 161
Репутация: 27 ±
Замечаний: 0% ±

Цитата
Как аналогичное действие реализуется в VBA?

Никак.
В основном адреса в коде прописаны конкретно и никаким образом не реагируют на удаление/вставку строк/столбцов на рабочем листе.
Поэтому нужно заранее предвидеть подобную ситуацию и обрабатывать ее в коде.


Сообщение отредактировал VictorM - Пятница, 06.09.2013, 08:58
 
Ответить
Сообщение
Цитата
Как аналогичное действие реализуется в VBA?

Никак.
В основном адреса в коде прописаны конкретно и никаким образом не реагируют на удаление/вставку строк/столбцов на рабочем листе.
Поэтому нужно заранее предвидеть подобную ситуацию и обрабатывать ее в коде.

Автор - VictorM
Дата добавления - 06.09.2013 в 08:55
Vasiliy Дата: Пятница, 06.09.2013, 11:39 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Я исхожу из того, что если это возможно в самом Ecxel, то в VBA и подавно. Вопрос только в том как это записать в коде программы. То, что записал я в примере, явно неправильно. Это только для наглядности того, что необходимо получить и где происходит сбой.
Может быть, как заметил PowerBoy, стоит добавить условие "если"? Если выполнена команда добавить строку или столбец, то нужно пересчитать адреса ячеек.
А может быть есть более простой способ решения проблемы, ведь задача стандартная.
 
Ответить
СообщениеЯ исхожу из того, что если это возможно в самом Ecxel, то в VBA и подавно. Вопрос только в том как это записать в коде программы. То, что записал я в примере, явно неправильно. Это только для наглядности того, что необходимо получить и где происходит сбой.
Может быть, как заметил PowerBoy, стоит добавить условие "если"? Если выполнена команда добавить строку или столбец, то нужно пересчитать адреса ячеек.
А может быть есть более простой способ решения проблемы, ведь задача стандартная.

Автор - Vasiliy
Дата добавления - 06.09.2013 в 11:39
Michael_S Дата: Пятница, 06.09.2013, 11:44 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
В VBA каждый раз определяются границы диапазона. Это стандартный метод.


Сообщение отредактировал Michael_S - Пятница, 06.09.2013, 11:45
 
Ответить
СообщениеВ VBA каждый раз определяются границы диапазона. Это стандартный метод.

Автор - Michael_S
Дата добавления - 06.09.2013 в 11:44
Формуляр Дата: Пятница, 06.09.2013, 12:57 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
А может быть есть более простой способ решения проблемы

Создайте пару вспомогательных ячеек (или именованных переменных) с ф-лами ROW() и COLUMNS(), которые будт ссылаться на сдвигаемый диапазон и отслеживайте по ним его положение.


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Пятница, 06.09.2013, 12:59
 
Ответить
Сообщение
А может быть есть более простой способ решения проблемы

Создайте пару вспомогательных ячеек (или именованных переменных) с ф-лами ROW() и COLUMNS(), которые будт ссылаться на сдвигаемый диапазон и отслеживайте по ним его положение.

Автор - Формуляр
Дата добавления - 06.09.2013 в 12:57
Vasiliy Дата: Суббота, 07.09.2013, 13:09 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Michael S, не совсем понял как ваш ответ поможет в решении задачи.
Попробую реализовать то, что предлагает Формуляр
 
Ответить
СообщениеMichael S, не совсем понял как ваш ответ поможет в решении задачи.
Попробую реализовать то, что предлагает Формуляр

Автор - Vasiliy
Дата добавления - 07.09.2013 в 13:09
Hugo Дата: Суббота, 07.09.2013, 13:17 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3703
Репутация: 792 ±
Замечаний: 0% ±

365
В данном случае - ищем (например через Find) ячейки "Таблица 1" и "Таблица 2", от них и "пляшем".
Или проще - даём таблицам имена, обращаемся по именам. Тогда вся ответственность на юзере - чтоб область оставалась именованной.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеВ данном случае - ищем (например через Find) ячейки "Таблица 1" и "Таблица 2", от них и "пляшем".
Или проще - даём таблицам имена, обращаемся по именам. Тогда вся ответственность на юзере - чтоб область оставалась именованной.

Автор - Hugo
Дата добавления - 07.09.2013 в 13:17
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!