Значения VBA TextBox.Text неправильно записываются в электронную таблицу - PullRequest
0 голосов
/ 10 января 2020

У меня есть пользовательская форма, которая содержит несколько текстовых полей с информацией о клиенте, которая либо принимает информацию для нового клиента, либо позволяет редактировать существующий клиент с помощью селектора ComboBox. Выбор существующего клиента заполняет текстовые поля из ячеек на рабочем листе. Командные кнопки позволяют пользователю сохранять, отменять или очищать TextBoxes и ComboBox.

Оператор if в коде кнопки «Сохранить» проверяет, является ли он новым или существующим клиентом, а затем выполняет следующий код (Client_Row объявляется как глобальная переменная, которая устанавливается в Combo_Client_List_Change):

Dim lRow_Client As Integer

If Combo_Client_List.Value = "" Then

    lRow_Client = Sheets("Client_DB").Cells(Rows.Count, 1).End(xlUp).row + 1
    Sheets("Client_DB").Cells(lRow_Client, 1) = lRow_Client - 1
    Sheets("Client_DB").Cells(lRow_Client, 2) = Name_Box.Text
    Sheets("Client_DB").Cells(lRow_Client, 3) = Contact_Box.Text
    Sheets("Client_DB").Cells(lRow_Client, 4) = Telephone_Box.Text
    Sheets("Client_DB").Cells(lRow_Client, 5) = Site_Box.Text
    Sheets("Client_DB").Cells(lRow_Client, 6) = SETA_Box.Text
    Sheets("Client_DB").Cells(lRow_Client, 7) = Comment_Box.Text

Else

    Sheets("Client_DB").Cells(Client_Row, 2) = Name_Box.Text
    Sheets("Client_DB").Cells(Client_Row, 3) = Contact_Box.Text
    Sheets("Client_DB").Cells(Client_Row, 4) = Telephone_Box.Text
    Sheets("Client_DB").Cells(Client_Row, 5) = Site_Box.Text
    Sheets("Client_DB").Cells(Client_Row, 6) = SETA_Box.Text
    Sheets("Client_DB").Cells(Client_Row, 7) = Comment_Box.Text

End If

Первая часть работает. Если поле ComboBox пустое, значения добавляются в конец моего списка клиентов именно так, как и предполагалось. Что поражает меня, так это то, что вторая часть меняет только Sheets ("Client_DB"). Cells (Client_Row, 2) в моей электронной таблице и возвращает к старым значениям для остальных. Я проверил, что переменная Client_Row правильно выводится с помощью MsgBox после каждой строки, и это не проблема.

Наверное, что-то очевидно, но мой мозг курит. Любая помощь будет принята с благодарностью

Обновление:

Итак, я понял следующее: Если я закомментирую первую строку выражения Else, все будет работать так, как задумано. По какой-то причине код перестает выполняться после копирования строки Name_Box.Text в рабочую книгу. До сих пор не знаю, почему это происходит, поскольку переменная Client_Row не подвержена влиянию и, по-видимому, корректно передается на оставшиеся строки кода в соответствии с Немедленным окном:

Cells(6, 2) = New Client 5 5 65
Cells(6, 3) = Person
Cells(6, 4) = 12 1111 111
Cells(6, 5) = Not Applicable
Cells(6, 6) = Test
Cells(6, 7) = Testing test test

Другая странная вещь заключается в том, что если я изменю значение Name_Box.Text и нажмите «Сохранить», но не выбирайте нового клиента в ComboBox, он обновит все поля, если я снова нажму «Сохранить». Этот вид имеет смысл, потому что переменная Client_Row сбрасывается только в Combo_Box_Change, но зачем работать сейчас, а не в других?

Я подозреваю, что это как-то связано с RowSource ComboBox, но не могу понять, как поскольку ничто не меняет переменную Client_Row, как только она установлена ​​изначально?

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