Проблема с функцией обновления в ListObject - PullRequest
0 голосов
/ 24 апреля 2019

Предполагалось, что это профильный концепт, у меня гораздо больший проект с той же проблемой, я выбрал разные подходы и всегда получаю одинаковые результаты.Я создавал дополнительные ошибки в своем основном коде, поэтому я написал это, чтобы проверить себя на функциональность того, что я делаю.Итак, просто наперед, я возвращаюсь к программированию после 8-летнего стажа, выполняя инженерно-технические работы на местах.И поэтому я снова делаю ошибки для новичка.Мне нужна помощь, чтобы увидеть мою ошибку.

Когда я пытаюсь обновить .Value ячейки в listObject, она вызывает функцию события в пользовательской форме.

Чтобы объяснить немного больше:

У меня есть таблица - Table1 с идентификатором | Arg1 | Arg2 | Arg3 | Arg4

Я поместил простой Int в ID, т.е. 1, и простые текстовые (строковые) данные в Arg1-Arg4, т.е. Test1,Data1, Data2, Data3

Я создал Simple UserForm1 (имя по умолчанию), чтобы поместить listBox и 4 TextBoxes

У меня есть функция ListBox1_Click (), которая заполняет текстовые поля UserFrom1 данными изListObject (Таблица1).Эта функция работает просто отлично.

У меня также есть функция, которая обновляет ListObject (Table1).Здесь проблема.Когда вы ссылаетесь на значение ячейки ListObject (Table1), чтобы изменить его, вызывается функция события ListBox1_Click (), и мои TextBoxes возвращаются.У меня есть деструкторы для моего объекта, который я «устанавливаю», но я понятия не имею, почему / как вызывается функция.

Private Sub cbUpdate_Click()

    Dim myListObj As ListObject
    Dim myRange As Range

    Set myListObj = ActiveSheet.ListObjects("Table1")
    Set myRange = myListObj.ListColumns(1).DataBodyRange.Find(What:= _ 
      Trim(Me.ListBox1), SearchDirection:=xlNext, MatchCase:=False)

    myRange.Offset(, 1).Value = Me.tbArg1
    myRange.Offset(, 2).Value = Me.tbArg2
    myRange.Offset(, 3).Value = Me.tbArg3
    myRange.Offset(, 4).Value = Me.tbArg4

    Set myRange = Nothing
    Set myListObj = Nothing
End Sub

Private Sub ListBox1_Click()

    Dim myListObj As ListObject
    Dim myRange As Range

    Set myListObj = ActiveSheet.ListObjects("Table1")
    Set myRange = myListObj.ListColumns(1).DataBodyRange.Find(What:= _ 
      Trim(Me.ListBox1), SearchDirection:=xlNext, MatchCase:=False)

    Me.tbArg1 = myRange.Offset(, 1).Value
    Me.tbArg2 = myRange.Offset(, 2).Value
    Me.tbArg3 = myRange.Offset(, 3).Value
    Me.tbArg4 = myRange.Offset(, 4).Value

    Set myRange = Nothing
    Set myListObj = Nothing
End Sub

Мне нужно понять, как получить ячейки ListObject (Table1) для полученияобновленные значения без вызова не вызываемых функций / Методы.

1 Ответ

0 голосов
/ 24 апреля 2019

Хорошо, поэтому их ответ, похоже, заключается в том, что мне нужна локальная переменная для передачи значения через элементы управления userForm.Когда я использовал функцию listObjects .Add и передавал данные прямо из элементов управления (TextBoxs), он прекрасно работал.Но при обновлении, если я передаю значения непосредственно из элемента управления, он вызывает функцию события _Click () списка.Если я 'Dim myArg1 As Variant' и назначу ему значение элемента управления и его значение при обновлении значения ячейки ListObject, то до этого оно принимает значение без проблем.Я точно знаю, почему это работает, но я получаю код!Я ненавижу свой ответ больше, чем ненавижу свою проблему.Я потратил несколько дней на то, чтобы решить эту проблему, прежде чем опубликовать ее.Мой ответ не очень элегантный, но кажется функциональным.Спасибо за прочтение.

...