powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как реализовать тригер на добавление новой строки в vba excel.
12 сообщений из 12, страница 1 из 1
Как реализовать тригер на добавление новой строки в vba excel.
    #38928559
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.
Можно ли реализовать в excel тригер наподобие как в sql.
К примеру: есть три таблицы: Products, Raws, Recipes
В таблицах поле ProdCode, RawCode является связывающим строки Recipes с таблицами Products, Raws.

1. Если добавлю новую строку, скажем в Raws, то
1.1 автоматически должно генерироваться уникальное значение RawCode (максимальное значение +1)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
iN=12 'номер вставленной строки
iRwMax = 0
For ii=2 to 100
   iRwMax = iif(iRwMax<vba.cint(vba.right(cells(ii, 1).text , 5)), vba.cint(vba.right(cells(ii, 1).text , 5)), iRwMax)
if cells(ii, 1)=empty and ii<>iN then exit for
next ii
cells(ii, 1) = vba.trim("RW" & iRwMax + 1).



1.2. также назначался список разрешенных значений для столбца RawCode
таблицы Recipes.

2. Если добавлю новую строку в Products, то аналогично генерится код, а также создается строка Recipes.

3. Если удаляется строка в Products, нужно удалить в все рецепты для этого продукта.

ну и т.д.

Файлик прилагаю.
Просьба Access или любой другой софт не предлагать - задача для решения только в Excel.
ВПР к сожалению не вставит строки и не удалит, а сложные формулы с ума сводят при поиске ошибок ручного ввода.
В VBA предполагается временно снимать защиту листа для возможности выполнения операций.
...
Рейтинг: 0 / 0
Как реализовать тригер на добавление новой строки в vba excel.
    #38928565
t0lix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
написать обработчик на событие Worksheet_Change (в модуле листа)
и в нём уже смотреть, было ли добавление новой строки
и обрабатывать её дальше, и т.д.
...
Рейтинг: 0 / 0
Как реализовать тригер на добавление новой строки в vba excel.
    #38928602
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
t0lix,
спасибо. и как я узнаю что строка вставлена или удалена? идея возникает лишь сравнивать ранее считанное и сохраненное значение поля последней значимой строки. unionrange зависит от форматирования и может выдать абсолютно неверное число строк, если даже нет данных в 10000-й строке, но однажды применили форматирование для всего столбца. и лечится это только созданием нового листа.
Считывать все подряд и каждый раз сравнивать - так тут никакого компа не хватит. ДА и не хочется все поля контролировать. Думаю с обработчиком Worksheet_Change Тормоза начнутся однозначно.

Раньше были стандартные экселевские формы ввода данных которые предлагали заполнять все поля таблицы.
Удобнее сделать один обработчик на который бы вызвал форму ввода данных, а уже её методы методы обрабатывать.

Или все-таки есть ли возможность использовать sql тригеры, объединения и тп. в vba.excel?
...
Рейтинг: 0 / 0
Как реализовать тригер на добавление новой строки в vba excel.
    #38928603
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bobgosunionrange usedrange
...
Рейтинг: 0 / 0
Как реализовать тригер на добавление новой строки в vba excel.
    #38928780
t0lix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Считывать все подряд и каждый раз сравнивать - так тут никакого компа не хватит. ДА и не хочется все поля контролировать. Думаю с обработчиком Worksheet_Change Тормоза начнутся однозначно.
конечно. ведь Вы возлагаете на эксель то, что должна делать субд
Bobgosи как я узнаю что строка вставлена или удалена?
хранить где-то кол-во строк в таблице, при изменении таблицы сравнивать новое кол-во строк
для подсчёта использовать worksheetfunction.counta по какому-то столбцу (ключевому)
как вариант
...
Рейтинг: 0 / 0
Как реализовать тригер на добавление новой строки в vba excel.
    #38928815
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BobgosПросьба Access или любой другой софт не предлагать - задача для решения только в Excel.
Обосновать можете? почему нельзя хранить и выполнять операции в Access, а при необходимости экспортировать в Excel? Или хранить данные в Excel, а работать с ними из Access, прилинковав таблицу данных?

BobgosИли все-таки есть ли возможность использовать sql тригеры, объединения и тп. в vba.excel?
Нет такой возможности, угомонись. Даже если делать через задницу, всё равно есть граница невозможного.
...
Рейтинг: 0 / 0
Как реализовать тригер на добавление новой строки в vba excel.
    #38928950
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В порядке "сумасшедшего" варианта: колонку с индексами заполнить заранее (можно даже формулой "верхнее значение +1"), а цвет шрифта в ней сделать с использование условного форматирования (белый или черный).

Сам не пробовал.
...
Рейтинг: 0 / 0
Как реализовать тригер на добавление новой строки в vba excel.
    #38929130
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaBobgosПросьба Access или любой другой софт не предлагать - задача для решения только в Excel.
Обосновать можете? почему нельзя хранить и выполнять операции в Access, а при необходимости экспортировать в Excel? Или хранить данные в Excel, а работать с ними из Access, прилинковав таблицу данных?
нет Access-а и нет возможности его установить. не хотелось бы еще и создавать графический интерфейс (формы, кнопки). Прямой доступ к разрешенным диапазонам ячеек excel пользователям привычнее, минимум обучения - Excel есть практически у всех и навыки работы с ним тоже.


AkinaBobgosИли все-таки есть ли возможность использовать sql тригеры, объединения и тп. в vba.excel?
Нет такой возможности, угомонись. Даже если делать через задницу, всё равно есть граница невозможного.
Жаль что Вы не видите возможности помочь.
Как к хранилищу легко sql запросами общаться и с Excel, но нужно всегда дополнять все предусмотренные обычно в триггерах операции. Почему-то показалось, что в Excel есть другие способы актуализировать индексы кроме ручного.
...
Рейтинг: 0 / 0
Как реализовать тригер на добавление новой строки в vba excel.
    #38929264
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BobgosЖаль что Вы не видите возможности помочь.
Как к хранилищу легко sql запросами общаться и с Excel, но нужно всегда дополнять все предусмотренные обычно в триггерах операции. Почему-то показалось, что в Excel есть другие способы актуализировать индексы кроме ручного.
Роль неспецифического триггера в Excel играет метод OnChange - об этом уже говорилось.
Просто следует понимать правильно, когда он вызывается, как срабатывает.
Если пользователь внёс изменения, событие возникает однократно (даже если выполняется копирование диапазона). Однако метод:
1) Не срабатывает на изменения листа, вызванные пересчётом формул;
2) Срабатывает каждый раз при каскадном обновлении, выполняемом в коде метода, при этом фиксируется сам факт изменения, а не реальное изменение.
Можете проверить - вот простейший демонстрирующий это код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private Sub Worksheet_Change(ByVal Target As Range)
Static i As Integer
i = i + 1
Debug.Print i, Target.Address ' Вывод порядкового номера изменения
                              ' и изменяемого диапазона
If Cells(3,3) < 10 Then ' Каскадный вызов изменениями ячейки С3
                        ' если изначально С3 больше 10, пересчёт остановится по лимиту с ошибкой
    Cells(3,3).Value = Cells(3,3).Value +1
Else 
    Exit Sub ' Заглушка-расцикливатель, в данном коде не нужна
End If
End Sub


Поэтому нужно правильно спланировать использование метода и поставить все расцикливающие "заглушки".
Т.е. можете писАть обработчик OnChange. Более того, из него никто не запрещает через Jet/DAO обращаться к данным листа. Работать, конечно, будет. Ежели не накосячите.
...
Рейтинг: 0 / 0
Как реализовать тригер на добавление новой строки в vba excel.
    #38929342
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

спасибо за подсказки. Подозреваю, что не накосячить будет сложно
При пересчете формул после обновления значений отвечает насколько понимаю
Код: vbnet
1.
Worksheet_Calculate()



Если правильно понял, то заморачиваться не стоит. хотя задачка интересная.
Если был опыт - поделитесь примером.
...
Рейтинг: 0 / 0
Как реализовать тригер на добавление новой строки в vba excel.
    #38929391
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BobgosЕсли был опытСвят-свят... не, конечно, можно и королевской печатью орехи колоть, но лучше для каждой задачи брать и инструмент под неё заточенный. А что навыков работы у кого-то нет - так они и с Экселем когда-то были на "ой, что это?".
...
Рейтинг: 0 / 0
Как реализовать тригер на добавление новой строки в vba excel.
    #38929692
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina.. не, конечно, можно и королевской печатью орехи колоть
Akina, спасибо за критику вопроса. Вовремя остановили.
Соглашусь, не стоит искать решения, хотя на самом деле считаю, что не такая уж и сложная задача. По мне так сложнее с траблами при связях с внешними источниками данных в excel разбираться. То драйвер слетел, то библиотека не та, то формат данных не тот.

Вопрос снят.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как реализовать тригер на добавление новой строки в vba excel.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]