Excel VBA Userform, обновить и удалить базу данных,

Я очень новичок в Excel VBA, и я нашел решения для большинства своих проблем через Stackoverflow.com. Но все же есть проблема, которую я не мог решить. Я работаю над многомерной Userform для поддержки нашей базы данных. Userform I я работаю над тем, чтобы содержать поля опций, флажки, текстовые поля и комбинированные поля. После долгих поисков и работы я исправил поисковые базы, и все они работают. Но я не могу получить снизу «Обновление» и «Удалить». Я загрузил файл, я был бы признателен, если кто-нибудь сможет мне помочь с этой проблемой.

Private Sub bt2_Click() 'Update shipment Dim sonsat As Long, sor As String If ListBox1.ListIndex = -1 Then MsgBox "Choose an item", vbExclamation, "" Exit Sub End If sor = MsgBox("Are your sure?", vbYesNo, "") If sor = vbNo Then Exit Sub lastrow = Sheets("logbook").Cells(Rows.count, 1).End(xlUp).Row Sheets("logbook").Range("A1:A" & lastrow).Find(What:=ListBox1.Value, LookIn:=xlValues, LookAt:=xlWhole).Activate sonsat = ActiveCell.Row Cells(sonsat, 1) = op1 Cells(sonsat, 2) = op2 Cells(sonsat, 3) = chb1 Cells(sonsat, 4) = chb2 Cells(sonsat, 5) = tb14 Cells(sonsat, 6) = tb1 Cells(sonsat, 7) = tb2 Cells(sonsat, 8) = tb3 Cells(sonsat, 9) = tb4 Cells(sonsat, 10) = tb5 Cells(sonsat, 11) = cb1 Cells(sonsat, 12) = tb6 Cells(sonsat, 13) = tb7 Cells(sonsat, 14) = tb8 Cells(sonsat, 15) = tb9 Cells(sonsat, 16) = cb2 Cells(sonsat, 17) = tb10 Cells(sonsat, 18) = tb11 Cells(sonsat, 19) = tb12 Cells(sonsat, 20) = cb3 Cells(sonsat, 21) = cb4 Cells(sonsat, 22) = tb13 MsgBox "Item Has Been Changed", vbInformation, "" ListBox1.list = Sheets("logbook").Range("A1:V" & Sheets("logbook").Cells(Rows.count, 1).End(xlUp).Row).Value If Me.op1.Value = True Then Cells(sonsat, 1).Value = "X" Else Cells(sonsat, 1).Value = "-" End If If Me.op2.Value = True Then Cells(sonsat, 2).Value = "X" Else Cells(sonsat, 2).Value = "-" End If If Me.chb1.Value = True Then Cells(sonsat, 3).Value = "X" Else Cells(sonsat, 3).Value = "-" End If If Me.chb2.Value = True Then Cells(sonsat, 4) = "X" Else Cells(sonsat, 4) = "-" End If End Sub Private Sub bt3_Click() 'delete shipmet Dim sil As Long Dim e, b, c, d As Integer If ListBox1.ListIndex = -1 Then MsgBox "Choose an entry", vbExclamation, "" Exit Sub End If If ListBox1.ListIndex >= 0 Then cevap = MsgBox("Entry will be deleted. ... Are you sure ?", vbYesNo, "") If cevap = vbYes Then Sheets("logbook").Range("A:A").Find(What:=ListBox1.Value).Activate sil = ActiveCell.Row Sheets("logbook").Rows(sil).Delete End If End If For d = 1 To 2 Controls("op" & d) = False Next For c = 1 To 4 Controls("cb" & c) = "-" Next For b = 1 To 2 Controls("chb" & b) = False Next For e = 1 To 14 Controls("tb" & e) = "" Next ListBox1.list = Sheets("logbook").Range("A1:V" & Sheets("logbook").Cells(Rows.count, 1).End(xlUp).Row).Value End Sub 

Ниже приведен файл, загруженный на Google Диск (по состоянию на 2017-06-08, 09:01 UK Time).

Я потерял несколько элементов управления при попытке открыть книгу, возможно, наши версии Excel слишком отличаются друг от друга, чтобы справиться с ними. Это были ваши контролы даты dtp2 и dtp3 . Я прокомментировал код, относящийся к ним, когда они причинили мне неприятности. Надеюсь, это не негативно повлияет на последующее …

Основные предложения

  • Чтобы все было запущено, мне пришлось объявить переменную lastrow переменную lastrow .

  • В вашем listbox1 . Если вы хотите обновить только одну строку, вам нужно убедиться, что выбрана только одна строка. В разделе «Поведение» свойств управления я бы изменил MultiSelect на 0 - fmMultiSelectSingle .

  • Поскольку вы разрешаете listbox1.value , listbox1.value не работает. Вы должны сделать это по-другому, если разрешить мультивыбор (см. Здесь ). Но предполагая, что вы в порядке с одним выбором, вам не нужно об этом беспокоиться.

  • Когда вы используете « Find ... Activate вы получите другую ошибку. Excel не может Activate электронную таблицу, поскольку Userform1 сохраняет фокус. Возможно, вы сможете изменить это, сделав форму «немодальной», но я бы этого не сделал. Вместо этого, а не, например:

     Sheets("logbook").Range("A1:A" & lastrow).Find(What:=ListBox1.Value, _ LookIn:=xlValues, LookAt:=xlWhole).Activate sonsat = ActiveCell.Row 

    Я сделаю

     sonsat = Sheets("logbook").Range("A1:A" & lastrow).Find(What:=ListBox1.Value, _ LookIn:=xlValues, LookAt:=xlWhole).Row 

    Из-за чего нужно Activate . После этого код должен работать без жалобы.

  • Тем не менее, он по-прежнему не делает то, что вы хотите. Значение списка зависит от вашего связанного столбца, который вы установили в первом столбце. Это значение не однозначно идентифицирует строку. В результате при запуске обновления / удаления кода обновляется / удаляется первая соответствующая строка.

Незначительные вопросы

  • В настоящее время ничего не мешает пользователю выбирать и обновлять / удалять строку заголовка. Лично я вытащил их из списка (начинаю с A2 вместо A1) и добавляю их как «заголовки столбцов» в форме.

  • Я предполагаю, что название формы должно быть «Application Entry Application», а не «Data Entery Application».

  • Как добавить сразу несколько строк данных из UserForm в Excel DataBase
  • Excel VBA Userform
  • Заполнение вопросов ComboBox - дублирование значений при каждом выборе поля, а именованный диапазон не заполняется
  • Использование операторов IF & AND с флажками в пользовательской форме
  • Назначьте функцию VBA с нажатием кнопки динамически созданной кнопки в Excel Userform
  • Используя Excel Userform, вырезать строку с «x», удалить строку и вставить в другой лист
  • Как добавить объекты управления в пользовательскую форму в коллекцию, а затем прокрутить коллекцию и получить доступ к их свойствам?
  • Измените форму пользователя с помощью защищенных паролем надстроек
  • Текстовое поле VBA, отображающее валюту
  • excel vba userforms: пользовательский тип не определен
  • Определите, какая строка VBA выполняется в настоящий момент для панели выполнения
  • Interesting Posts

    .xlsm файл открыт только для чтения

    Можно ли хранить пользовательские данные в документах Microsoft?

    Excel: создать сводную таблицу, используя определенные ячейки из других листов

    olap4j и кэш служб Microsoft Analysis Services

    VBA показать пользовательскую форму и скрыть только одну специальную книгу (продолжать показывать другие книги)

    Получить идентификатор выбранного значения в раскрывающемся списке валидации Excel в VBA

    Добавление общедоступных методов к модулю Userform в VBA

    Как написать код VBA, чтобы скрыть все заголовки столбцов и строк в Excel?

    Макрос, который будет проходить через диапазон, чтобы заполнить значения координат соседних ячеек

    Определить диапазон в excel vba

    Excel VBA – вставка значений в многоколоночный combobox

    Вставить столбец Excel VBScript и заполнить

    Формула Excel и метаданные

    Фильтровать таблицу Excel в VBA

    Как подсчитать количество студентов в разных условиях на листе посещаемости

    Давайте будем гением компьютера.