|
Как реализовать тригер на добавление новой строки в vba excel.
|
|||
---|---|---|---|
#18+
Доброго времени суток. Можно ли реализовать в excel тригер наподобие как в sql. К примеру: есть три таблицы: Products, Raws, Recipes В таблицах поле ProdCode, RawCode является связывающим строки Recipes с таблицами Products, Raws. 1. Если добавлю новую строку, скажем в Raws, то 1.1 автоматически должно генерироваться уникальное значение RawCode (максимальное значение +1) Код: vbnet 1. 2. 3. 4. 5. 6. 7.
1.2. также назначался список разрешенных значений для столбца RawCode таблицы Recipes. 2. Если добавлю новую строку в Products, то аналогично генерится код, а также создается строка Recipes. 3. Если удаляется строка в Products, нужно удалить в все рецепты для этого продукта. ну и т.д. Файлик прилагаю. Просьба Access или любой другой софт не предлагать - задача для решения только в Excel. ВПР к сожалению не вставит строки и не удалит, а сложные формулы с ума сводят при поиске ошибок ручного ввода. В VBA предполагается временно снимать защиту листа для возможности выполнения операций. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2015, 21:59 |
|
Как реализовать тригер на добавление новой строки в vba excel.
|
|||
---|---|---|---|
#18+
написать обработчик на событие Worksheet_Change (в модуле листа) и в нём уже смотреть, было ли добавление новой строки и обрабатывать её дальше, и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2015, 22:17 |
|
Как реализовать тригер на добавление новой строки в vba excel.
|
|||
---|---|---|---|
#18+
t0lix, спасибо. и как я узнаю что строка вставлена или удалена? идея возникает лишь сравнивать ранее считанное и сохраненное значение поля последней значимой строки. unionrange зависит от форматирования и может выдать абсолютно неверное число строк, если даже нет данных в 10000-й строке, но однажды применили форматирование для всего столбца. и лечится это только созданием нового листа. Считывать все подряд и каждый раз сравнивать - так тут никакого компа не хватит. ДА и не хочется все поля контролировать. Думаю с обработчиком Worksheet_Change Тормоза начнутся однозначно. Раньше были стандартные экселевские формы ввода данных которые предлагали заполнять все поля таблицы. Удобнее сделать один обработчик на который бы вызвал форму ввода данных, а уже её методы методы обрабатывать. Или все-таки есть ли возможность использовать sql тригеры, объединения и тп. в vba.excel? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2015, 23:32 |
|
Как реализовать тригер на добавление новой строки в vba excel.
|
|||
---|---|---|---|
#18+
Bobgosunionrange usedrange ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2015, 23:34 |
|
Как реализовать тригер на добавление новой строки в vba excel.
|
|||
---|---|---|---|
#18+
Считывать все подряд и каждый раз сравнивать - так тут никакого компа не хватит. ДА и не хочется все поля контролировать. Думаю с обработчиком Worksheet_Change Тормоза начнутся однозначно. конечно. ведь Вы возлагаете на эксель то, что должна делать субд Bobgosи как я узнаю что строка вставлена или удалена? хранить где-то кол-во строк в таблице, при изменении таблицы сравнивать новое кол-во строк для подсчёта использовать worksheetfunction.counta по какому-то столбцу (ключевому) как вариант ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2015, 09:28 |
|
Как реализовать тригер на добавление новой строки в vba excel.
|
|||
---|---|---|---|
#18+
BobgosПросьба Access или любой другой софт не предлагать - задача для решения только в Excel. Обосновать можете? почему нельзя хранить и выполнять операции в Access, а при необходимости экспортировать в Excel? Или хранить данные в Excel, а работать с ними из Access, прилинковав таблицу данных? BobgosИли все-таки есть ли возможность использовать sql тригеры, объединения и тп. в vba.excel? Нет такой возможности, угомонись. Даже если делать через задницу, всё равно есть граница невозможного. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2015, 09:55 |
|
Как реализовать тригер на добавление новой строки в vba excel.
|
|||
---|---|---|---|
#18+
В порядке "сумасшедшего" варианта: колонку с индексами заполнить заранее (можно даже формулой "верхнее значение +1"), а цвет шрифта в ней сделать с использование условного форматирования (белый или черный). Сам не пробовал. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2015, 11:20 |
|
Как реализовать тригер на добавление новой строки в vba excel.
|
|||
---|---|---|---|
#18+
AkinaBobgosПросьба Access или любой другой софт не предлагать - задача для решения только в Excel. Обосновать можете? почему нельзя хранить и выполнять операции в Access, а при необходимости экспортировать в Excel? Или хранить данные в Excel, а работать с ними из Access, прилинковав таблицу данных? нет Access-а и нет возможности его установить. не хотелось бы еще и создавать графический интерфейс (формы, кнопки). Прямой доступ к разрешенным диапазонам ячеек excel пользователям привычнее, минимум обучения - Excel есть практически у всех и навыки работы с ним тоже. AkinaBobgosИли все-таки есть ли возможность использовать sql тригеры, объединения и тп. в vba.excel? Нет такой возможности, угомонись. Даже если делать через задницу, всё равно есть граница невозможного. Жаль что Вы не видите возможности помочь. Как к хранилищу легко sql запросами общаться и с Excel, но нужно всегда дополнять все предусмотренные обычно в триггерах операции. Почему-то показалось, что в Excel есть другие способы актуализировать индексы кроме ручного. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2015, 12:52 |
|
Как реализовать тригер на добавление новой строки в vba excel.
|
|||
---|---|---|---|
#18+
BobgosЖаль что Вы не видите возможности помочь. Как к хранилищу легко sql запросами общаться и с Excel, но нужно всегда дополнять все предусмотренные обычно в триггерах операции. Почему-то показалось, что в Excel есть другие способы актуализировать индексы кроме ручного. Роль неспецифического триггера в Excel играет метод OnChange - об этом уже говорилось. Просто следует понимать правильно, когда он вызывается, как срабатывает. Если пользователь внёс изменения, событие возникает однократно (даже если выполняется копирование диапазона). Однако метод: 1) Не срабатывает на изменения листа, вызванные пересчётом формул; 2) Срабатывает каждый раз при каскадном обновлении, выполняемом в коде метода, при этом фиксируется сам факт изменения, а не реальное изменение. Можете проверить - вот простейший демонстрирующий это код: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Поэтому нужно правильно спланировать использование метода и поставить все расцикливающие "заглушки". Т.е. можете писАть обработчик OnChange. Более того, из него никто не запрещает через Jet/DAO обращаться к данным листа. Работать, конечно, будет. Ежели не накосячите. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2015, 14:13 |
|
Как реализовать тригер на добавление новой строки в vba excel.
|
|||
---|---|---|---|
#18+
Akina, спасибо за подсказки. Подозреваю, что не накосячить будет сложно При пересчете формул после обновления значений отвечает насколько понимаю Код: vbnet 1.
Если правильно понял, то заморачиваться не стоит. хотя задачка интересная. Если был опыт - поделитесь примером. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2015, 14:46 |
|
Как реализовать тригер на добавление новой строки в vba excel.
|
|||
---|---|---|---|
#18+
BobgosЕсли был опытСвят-свят... не, конечно, можно и королевской печатью орехи колоть, но лучше для каждой задачи брать и инструмент под неё заточенный. А что навыков работы у кого-то нет - так они и с Экселем когда-то были на "ой, что это?". ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2015, 15:15 |
|
Как реализовать тригер на добавление новой строки в vba excel.
|
|||
---|---|---|---|
#18+
Akina.. не, конечно, можно и королевской печатью орехи колоть Akina, спасибо за критику вопроса. Вовремя остановили. Соглашусь, не стоит искать решения, хотя на самом деле считаю, что не такая уж и сложная задача. По мне так сложнее с траблами при связях с внешними источниками данных в excel разбираться. То драйвер слетел, то библиотека не та, то формат данных не тот. Вопрос снят. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2015, 18:12 |
|
|
start [/forum/topic.php?fid=61&msg=38929130&tid=2173551]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 134ms |
0 / 0 |