Excel VBA - значение списка не сохраняется - PullRequest
0 голосов
/ 09 ноября 2018

Так что в настоящее время я работаю над пользовательскими формами в Excel для ввода и редактирования базы данных сотрудников в моем отделе.

Примерно так: пример базы данных

Использование пользовательской формы для ввода новых данных работает нормально. Вы просто устанавливаете значение Cells в активном листе так, чтобы оно соответствовало значению, выбранному в пользовательской форме.

Моя проблема появляется, когда я пытаюсь редактировать старые данные. В основном я сделал простую поисковую систему на основе ID #. Когда я нажимаю кнопку «Изменить», она сохраняет всю соответствующую информацию в общедоступной переменной, которую я храню в модуле под названием «Var». Вся переменная хранится в виде строки.

Dim rowsearach as Long, Name As String, BranchRegion As String, BranchProvince As String, BranchCity As String, Phone As String

rowsearch = WorksheetFunction.match(Var.editid, Range("A:A"), 0)

Var.Name = Cells(rowsearch, 2).Value
Var.BranchRegion = Cells(rowsearch, 3).Value
Var.BranchProvince = Cells(rowsearch, 4).Value
Var.BranchCity = Cells(rowsearch, 5).Value
Var.Phone = Cells(rowsearch, 6).Value

Теперь, сохранение этих значений в переменной Public работало нормально, я попытался записать их все в пустые ячейки, и это сработало.

Следующим шагом является вызов пользовательской формы редактирования (которая аналогична пользовательской форме, которую я использовал для ввода новых данных), в которой содержимое пользовательской формы будет заполнено этими переменными выше, сохраненными в модуле "Var".

Имя : текстовое поле

Область филиала : список, элемент списка обновляется во время инициализации пользовательской формы

Область провинции : список, элемент списка обновляется при изменении списка области филиала (отображаемая область зависит от того, какой регион выбран)

Город филиала : поле со списком, поле со списком обновляется при изменении списка в провинции Провинция (отображаемый город зависит от выбранной провинции)

Телефон : Текстовое поле

Моя проблема заключается в получении значения Branch Region. Вот мой код:

Private Sub UserForm_Initialize
With ListboxRegion
.Additem "West"
.Additem "Central"
.Additem "East"
.Value = Var.Region
End With

Моя проблема в области Region, в то время как пользовательская форма, по-видимому, может импортировать значение из Var.Region следующим образом (в этом примере регион имеет значение Central): pictured . На рисунке вы можете видеть, что, когда выбран центральный раздел, когда я заканчиваю редактирование через кнопку «Готово», в которой:

Cells(rowid, 3).Value = ListboxRegion.Value

Ячейки значений в ячейках (rowid, 3) будут нулевыми / пустыми. Я попытался написать код, чтобы записать значение ListboxRegion в другие ячейки, прежде чем нажать кнопку «Готово», но он также возвращает пустое значение.

Проблема, похоже, заключается в том, что пока Listbox показывает, что выбран регион, в действительности значение не сохраняется в ListboxRegion.Value

Это проблема, потому что теперь пользователь может вообще захотеть отредактировать регион и просто отредактировать другие записи, но если они не будут повторно щелкать по нужному региону снова, когда они закончат, часть базы данных Region перестанет работать .

Я не знаю, что не так с моим кодом или как я его реализую.

1 Ответ

0 голосов
/ 11 ноября 2018

Это может быть простая опечатка. Var.BranchRegion = Cells(rowsearch, 3).Value используется при сохранении значения ячейки в var, а .Value = Var.Region используется в UserForm_Initialize

В любом случае используйте Debug.Print ListboxRegion.ListIndex в конце UserForm_Initialize и в начале события кнопки «Готово», чтобы получить некоторое представление о том, что происходит не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...