|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
28.06.2009, 20:37 | #1 |
Участник клуба
Регистрация: 28.06.2009
Сообщений: 1,950
|
Как получить измененные ячейки в VBA?
Как получить в Excel названия измененных (и удаленных) ячеек в переменную VBA? Типа события OnChange, OnDelete
|
28.06.2009, 20:48 | #2 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Как-то так:
Код:
Цитата:
|
|
28.06.2009, 21:10 | #3 |
Участник клуба
Регистрация: 28.06.2009
Сообщений: 1,950
|
Попробую разобраться в коде, но для удаления столбцов и, думаю, строк он не подходит - начинает зависать. Спасибо
|
28.06.2009, 22:56 | #4 |
Участник клуба
Регистрация: 28.06.2009
Сообщений: 1,950
|
У меня задача - записать в таблицу БД все данные с экселевского листа. Но обычно он заполнен лишь на малый процент. Поэтому нет смысла писать весь лист, каждую ячейку. Наверно, нужно определить границы, где находится последняя заполненная ячейка, а дальше пусто? Как это лучше сделать?
|
28.06.2009, 23:13 | #5 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Сделать всё это совсем несложно.
Только объясните подробнее, чего Вы пытаетесь добиться (желательно с примером файла) Тем более, если надо записать с листа в БД все данные, то и отслеживать изменения не вижу смысла. Кстати, я тут как-то делал уже такой макрос - который помечает цветом строки, в которых произошли изменения. (Вам осталось только найти тот пример на форуме) Потом в базу данных заносятся только эти цветные строки. Можно, конечно, записывать данные и в переменную, но это менее надёжно - если макрос вылетит с ошибкой (любой), все переменные обнулятся. А цвет строк точно не скинется ни при каких обстоятельствах. |
28.06.2009, 23:24 | #6 |
Участник клуба
Регистрация: 28.06.2009
Сообщений: 1,950
|
Добиться хочу следующего: есть некий файл в Экселе. В нем какие-то данные - значения, формулы, а по бокам - текстовые названия колонок и строк. Предполагается, что эти данные будут посылаться на сервер в Интернете, чтобы потом пользователи могли нажимать на кнопку "Загрузить данные из БД", чтобы увидеть изменения, внесенные другими пользователями.
То есть БД делается для того, чтобы была многопользовательская работа, и каждый мог загрузить из нее текущую версию файла. Далее пользователь вводит что-то и посылает на сервер скрипту, который возвращает результаты в таблицу. Далее опять можно сохранить это в БД. Вот поэтому у меня вопрос: записать-то можно все данные, но так как в Экселе огромный лист (миллион строк), то понятно, что все записывать не надо. Нужно только то, где есть последние данные, которые ограничивают рабочую область листа. Да и здесь лучше записывать только то, что изменилось, а не перезаписывать то же самое. |
01.07.2009, 18:09 | #7 |
Участник клуба
Регистрация: 28.06.2009
Сообщений: 1,950
|
Проблема еще одна: как сделать, чтобы при удалении или добавлении строки/столбца формулы в примечаниях менялись автоматически? Когда в самой ячейке, то они меняются, а так нет. Для начала нужно понять, как отлавливать событие добавления или удаления строки/столбца, и сразу вызывать по нему какую-то функцию.
|
01.07.2009, 23:35 | #8 | ||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Цитата:
Что-то новенькое... Цитата:
Код:
Проанализировав этот адрес, можно узнать, что именно было вставлено - строка или столбец: Код:
|
||
14.07.2009, 22:34 | #9 |
Участник клуба
Регистрация: 28.06.2009
Сообщений: 1,950
|
Посмотрел еще раз Ваш код. Но он работает одинаково в случае добавления/удаления столбцов или строк и все время пишет "добавлено...". А мне нужно как-то узнавать, что именно было сделано и где. Понятно, что основная идея в сравнении прошлого числа колонок/строк с нынешним. Но как это конкретно реализовать?
Мне нужно сделать, чтобы внутри обработчика события определялось, что было сделано - удаление/добавление строк или столбцов, и чтобы следующий код вызывался только при этом событии, а не просто изменении листа. Последний раз редактировалось motorway; 14.07.2009 в 22:36. |
15.07.2009, 05:13 | #10 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Если речь идет только об удалении (добавлении) строк (столбцов, ячеек), то можно перехватывать по номеру ID эти события и назначать свою, какую угодно процедуру. Например, перед тем, как удалить строку (столбец), присваивать переменной адрес этого диапазона. Естественно, при деактивации книги нужно отменять назначенные процедуры.
Если так устроит - могу сделать.
Чем шире угол зрения, тем он тупее.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как получить копию ячейки вместе с форматом | olimpus | Microsoft Office Excel | 7 | 11.04.2009 12:33 |
получить текст из заданной ячейки DbGrid | furstenberg | Компоненты Delphi | 12 | 02.04.2009 00:54 |
Как удалять ячейки с помощью VBA | Рома_Чайник | Microsoft Office Excel | 4 | 16.02.2009 11:31 |
Как средствами VBA получить доменное имя пользователя? | Прохожий | Microsoft Office Excel | 3 | 04.10.2008 18:28 |