Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/121: Рейтинг темы: голосов - 121, средняя оценка - 4.83
1 / 1 / 0
Регистрация: 02.06.2015
Сообщений: 8

Код для кнопки "сохранить запись" на VBA

17.06.2015, 00:55. Показов 26537. Ответов 94
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Есть форма ввода. Нужно сделать на ней кнопку "сохранить".
Форма по-умолчанию открывается на "новой записи".
Одна кнопка закрывает форму и отменяет запись.
А другая сохраняет.

Функции сделаны макросами и, в принципе, работают, НО возникла необходимость запустить кнопкой "сохранить" еще код VBA на запуск запросов на изменение без сообщений и предупреждений, так что поменял "макрокоманды" на "процедуры обработки" и теперь нужно реализовать стандартную макрокоманду "СохранитьЗапись" в коде VBA.

Задача типовая, НО решения из интернета не привели к результату.
Не мог бы кто-нибудь предложить вариант кода?
Сейчас кнопка работает отлично и после создания записи еще и переход на новую запись происходит сразу (т.е. форма очищается)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.06.2015, 00:55
Ответы с готовыми решениями:

VBA для вывода сообщения об ошибке для кнопки добавить запись на форме
Здравстуйте всем!!! Прошу помощи в следующем вопросе: дана таблица, содержащая поля - код, поле1, поле2 (поле1, поле2 - обязательные,...

Код VBA для кнопки на листе Excel
Всем добрый день вечер ночь утро! Подскажите пожалуйста, может кто-нибудь знает чего прописать в коде VBA элемента "Кнопка"...

Пожалуйста, дайте код vba для кнопки, для расчета нечетных чисел в заданном интервале
Ввод должен осуществляться с клавиатуры( ввод интервала) Заранее спасибо!

94
431 / 39 / 1
Регистрация: 02.03.2016
Сообщений: 453
17.09.2017, 18:52
Студворк — интернет-сервис помощи студентам
mobile, А так нельзя? Или не совсем хорошо то, что будут перебираться все контролы хоть и с указанным типом?

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
For Each sCTRL In frm.Controls
    If sCTRL.ControlType = acComboBox Or sCTRL.ControlType = acTextBox Then  
         'Нужно прописать по пути: Окно свойств-другие-доплнительные сведения - значение "Обязательное"
         If frm.Controls(arr(i)).Tag = "обязательное" And IsNull(frm.Controls(arr(i))) Then
             Select Case MsgBox("Заполните поле " & frm.Controls(arr(i)).Name, _
             vbOKCancel + vbExclamation + vbDefaultButton1)
             Case vbOK
                 DoCmd.CancelEvent 'отмена закрытия, возврат в форму
                 frm.Controls(arr(i)).SetFocus                    
                 Exit Sub 'выходим из процедуры, иначе будут перебираться все контролы(поля)
             Case vbCancel
                 Select Case MsgBox("Текущая запись будет удалена!", _
                 vbOKCancel + vbExclamation + vbDefaultButton1)
                 Case vbOK                        
                     frm.Undo
                 Case vbCancel
                     DoCmd.CancelEvent 'отмена закрытия, возврат в форму
                     frm.Controls(arr(i)).SetFocus
                 End Select
             End Select    
             Exit Sub 'выходим из процедуры, иначе будут перебираться все контролы(поля)
         End If                            
    End If
Next
Добавлено через 4 минуты
Можно еще создать один массив(универсальный для всех форм), где собраны все обязательные поля, и тогда циклом по нему, все равно меньше будет контролов для перебора
0
Эксперт MS Access
 Аватар для Eugene-LS
13270 / 5947 / 1529
Регистрация: 05.10.2016
Сообщений: 16,651
17.09.2017, 19:03
Цитата Сообщение от sana555 Посмотреть сообщение
Можно еще создать один массив(универсальный для всех форм), где собраны все обязательные поля, и тогда циклом по нему, все равно меньше будет контролов для перебора
Извините что без спросу.
Мы об этом говорили выше.
Табличка из уникального сочетания двух полей :
01. Имя формы
02. Название (имя) обязательного поля

Вот и всё что вам нужно.
Дальше всё просто ...
1
431 / 39 / 1
Регистрация: 02.03.2016
Сообщений: 453
17.09.2017, 19:39
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Дальше всё просто ...
По мне так первая часть(создание таблицы с полями) проще..), поскольку цикл по полям таблицы еще не пользовался, пользовался только циклом по таблицам:
Visual Basic
1
2
3
For Each tbl In db.TableDefs
        
Next
0
431 / 39 / 1
Регистрация: 02.03.2016
Сообщений: 453
17.09.2017, 19:41
Цитата Сообщение от sana555 Посмотреть сообщение
что не зачем сразу включать мигалку, а включать ее только в том случае, если не заполнил и решил перейти к следующей записи или закрыть форму.
Вот не много подкорректировал ваш код, сейчас мигать начинает только в случае закрытия или перехода на другую запись. Так же сделал остановку мигания при нажатии клавиши Esc. И добавил обработчик для ошибки 2474, возникает как я понял при смене фокуса на другую форму. Еще заметил ошибку 0, это что за ошибка?
Вложения
Тип файла: 7z sana5551.7z (81.4 Кб, 4 просмотров)
0
Эксперт MS Access
 Аватар для Eugene-LS
13270 / 5947 / 1529
Регистрация: 05.10.2016
Сообщений: 16,651
17.09.2017, 19:43
Цитата Сообщение от sana555 Посмотреть сообщение
поскольку цикл по полям таблицы еще не пользовался
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
'Перебор всех записей в наборе
Dim rst As DAO.Recordset
    
    Set rst = CurrentDb.OpenRecordset("tblExample", dbOpenSnapshot)  'Только просмотр
    
    With rst 
        Do Until .EOF = True 'Цикл до конца таблицы
            '...операции с записью
            .MoveNext
        Loop
    End With
 
    On Error Resume Next
    rst.Close
    Set rst = Nothing
1
431 / 39 / 1
Регистрация: 02.03.2016
Сообщений: 453
17.09.2017, 19:44
А.., этим пользовался, пардон..)
0
Эксперт MS Access
 Аватар для Eugene-LS
13270 / 5947 / 1529
Регистрация: 05.10.2016
Сообщений: 16,651
17.09.2017, 19:47
А! Стоп!
В вашем случае так:
Visual Basic
1
2
3
4
5
6
Sim s As String
 
    s = "SELECT * FROM [название таблицы] WHERE Название_Формы='" & Me.Name & "'"
    Set rst = CurrentDb.OpenRecordset(s, dbOpenSnapshot)  'Только просмотр
    
' ... а дальше  аналогично
1
Модератор
Эксперт MS Access
6231 / 2909 / 708
Регистрация: 12.06.2016
Сообщений: 7,839
17.09.2017, 20:07
цикл по полям таблицы еще не пользовался, пользовался только циклом по таблицам:
Visual Basic
1
2
3
4
5
6
Dim Fld As Field
For Each tbl In db.TableDefs
  For Each Fld In tbl
 
  Next
Next
.....
2
Эксперт MS Access
 Аватар для Eugene-LS
13270 / 5947 / 1529
Регистрация: 05.10.2016
Сообщений: 16,651
17.09.2017, 20:14
Capi, Привет! - милая.
Почитайте выше пожалуйста
- там не перебор полей в таблице , а перебор ЗНАЧЕНИЙ полей нужен.
0
Модератор
Эксперт MS Access
6231 / 2909 / 708
Регистрация: 12.06.2016
Сообщений: 7,839
17.09.2017, 20:33
Eugene-LS,

Добрый вечер!

Ну, пусть ТС еще и с этим перебором ознакомится.

Три страницы перечитывать? Попробую...
0
Эксперт MS Access
 Аватар для Eugene-LS
13270 / 5947 / 1529
Регистрация: 05.10.2016
Сообщений: 16,651
17.09.2017, 20:39
Цитата Сообщение от Capi Посмотреть сообщение
Ну, пусть ТС еще и с этим перебором ознакомится.
А! - чисто в познавательных целях! - Это да!
Вредно точно не будет.
0
Модератор
Эксперт MS Access
6231 / 2909 / 708
Регистрация: 12.06.2016
Сообщений: 7,839
17.09.2017, 20:42
Все не дочитала, увидела следующее:
Цитата Сообщение от mobile
...изыскивать какое поле от какой таблицы, потом брать TableDef, смотреть свойство Required - много возни.
Все-таки, частично...
0
Эксперт MS Access
 Аватар для Eugene-LS
13270 / 5947 / 1529
Регистрация: 05.10.2016
Сообщений: 16,651
17.09.2017, 20:47
Capi, а вообще мы тут (с ночи) активно обсуждали подсветку не заполненных, но обязательных полей.
(чисто для введения в курс дела)

Добавлено через 4 минуты
Capi, - чисто баловство - по моему мнению, но что-то там проклёвывается уже...
0
Модератор
Эксперт MS Access
6231 / 2909 / 708
Регистрация: 12.06.2016
Сообщений: 7,839
17.09.2017, 20:48
Eugene-LS,

Обсуждение подсветки (мигания) видела, примеры не смотрела.

Я незаполненные поля выделяю красной рамочкой вокруг них,
после заполнения поля рамочка становится обычной.
0
Эксперт MS Access
 Аватар для Eugene-LS
13270 / 5947 / 1529
Регистрация: 05.10.2016
Сообщений: 16,651
17.09.2017, 20:51
Цитата Сообщение от Capi Посмотреть сообщение
Я незаполненные поля выделяю красной рамочкой вокруг них
А каким способом? - позвольте полюбопытствовать.
0
431 / 39 / 1
Регистрация: 02.03.2016
Сообщений: 453
17.09.2017, 20:59
Судя по всему ИмяПоля_AfterUpdate
0
Эксперт MS Access
 Аватар для Eugene-LS
13270 / 5947 / 1529
Регистрация: 05.10.2016
Сообщений: 16,651
17.09.2017, 21:08
Цитата Сообщение от sana555 Посмотреть сообщение
Судя по всему ИмяПоля_AfterUpdate
Хорошо если их 3-5, а если 25? - замучаешься....

Добавлено через 3 минуты
Capi, это не вежливо, столь долго не отвечать на вопросы.
Ну да ладно, юным барышням простительно всё и всегда.
1
Модератор
Эксперт MS Access
6231 / 2909 / 708
Регистрация: 12.06.2016
Сообщений: 7,839
17.09.2017, 21:52
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Цитата Сообщение от Capi
Я незаполненные поля выделяю красной рамочкой вокруг них
А каким способом? - позвольте полюбопытствовать
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Хорошо если их 3-5, а если 25? - замучаешься....
Сейчас посмотрела в одной из форм редактирования.
В ней оказалось около 30 подобных полей.
Но я что-то совсем не мучаюсь. И кода минимум.
Имеется универсальная функция, вызываемая либо сразу из свойства AfterUpdate
SQL
1
=Func_acTextacCmdBox_AfterUpdate()
либо из процедуры обработки события AfterUpdate, если для контрола нужны еще какие-то действия.
Вот функция:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Function Func_acTextacCmdBox_AfterUpdate()
 Call Func_CtlBorderColor(Screen.ActiveControl)
End Function
 
Sub Func_CtlBorderColor(Ctl As Control)
 Dim B As Boolean
 With Ctl
  Select Case .ControlType
   Case acTextBox
    B = Nz(.Value) = ""
   Case acComboBox
    B = Nz(.Column(.ColumnCount - 1)) = ""
  End Select
  If .ControlType = acTextBox Or .ControlType = acComboBox Then
   .BorderColor = IIf(B, vbRed, 8421504)
  End If
 End With
End Sub
И все. Никаких мучений.
2
431 / 39 / 1
Регистрация: 02.03.2016
Сообщений: 453
17.09.2017, 22:12
По началу я не совсем в разумел идею создания отдельной таблицы с обязательными полями для всех форм. Думал чем она лучше проставления свойства .tag в форме у обяз. полей. Сейчас до меня дошло, что это просто удобно и меньше возни как говорит mobile..) И действительно, лучше открыть один раз таблицу все там внести, чем заходить в СтоПятьсот форм и править эти тэги...), то еще занятие...
В итоге на ковырял такой код по созданию массива обязательных полей для конкретной формы из данных таблицы:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Public Sub МассивОбязательныеПоля() 'Создаем массив обязательных полей на основании данных таблицы tblRequiredFields
Dim rst As DAO.Recordset
Dim n As Byte, fld, i As Integer
 
    Set rst = CurrentDb.OpenRecordset("select * from tblRequiredFields") 'Открыть рекордсет таблицы 
        rst.FindFirst "[frmName] =" & me.form
    ReDim arr(0) 'Обнуляем массив
    
    For Each fld In rst.Fields
        If rst(n).Name <> "Код" And rst(n).Name <> "frmName" Then
            ReDim Preserve arr(i)  'Сохраняем ранее заданные значения массива и изменяем его размерность
                arr(i) = rst(n)
            Debug.Print i, arr(i), rst(n).Name
            i = i + 1
        End If
        n = n + 1
    Next
End Sub
Вызов из:
Visual Basic
1
2
3
4
Private Sub Form_BeforeUpdate(Cancel As Integer)   
    МассивОбязательныеПоля me.form
    'Здесь проверка на заполнение обязательных полей в цикле по только что созданному массиву
End Sub
Добавлено через 6 минут
Всем спасибо, пошел проходить ГТА шку, а то уж 5 год никак руки не доходят пройти до конца, все то циклы, то массивы, то мигающие поля, и прочая....)))
0
Эксперт MS Access
 Аватар для Eugene-LS
13270 / 5947 / 1529
Регистрация: 05.10.2016
Сообщений: 16,651
18.09.2017, 04:11
Цитата Сообщение от Capi Посмотреть сообщение
И все. Никаких мучений.
А не могли бы вы, потратить пару часиков, и сотворить наглядный пример на эту тему?
Думаю, он прославил бы вас на данном форуме, да и я бы с удовольствием его сохранил и рекомендовал бы всем нуждающимся.
Заранее признателен.

Вечно ваш.
Eugene-LS

Добавлено через 7 минут
Цитата Сообщение от sana555 Посмотреть сообщение
Всем спасибо, пошел проходить ГТА шку, а то уж 5 год никак руки не доходят пройти до конца
Хм!
Я с Quake II - всё порешать не могу ...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.09.2017, 04:11

Код для кнопки "сохранить и выйти"
Ребята помогите пожалуста с кодом: у меня курсовая работа:для кнопки мне нужен код который выполняет такую функцию как &quot;сохранить и...

Запись данных в таблицы только нажатием кнопки «Сохранить» на составной форме
Здравствуйте. Как можно осуществить запись данных в таблицы (главную и подчиненную) через связанную с ними составную форму только после...

Переписать код с С++ на VBA (сортировка массивов и запись в файл)
#include &lt;algorithm&gt; #include &lt;iostream&gt; #include&lt;windows.h&gt; using namespace std; //newGap Function double createGap( double gap...

Vba для кнопки
Здравствуйте, у меня есть форма и на ней есть: выпадающий список, который состоит из дней недель; подчиненная форма из запроса на день...

Перевести код макроса VBA в код скрипта для гугл таблицы
Ребят, помогите пожалуйста перевести маленький кусок кода из VBA в JS для гугл таблицы. Программа считает время отключения приборов за...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru