События Listmover запускаются только один раз во время выполнения

У меня есть два ввода и вывода списков, и я хочу переместить элемент из одного в другой. Итак, я создал класс (CListMover) со следующими переменными:

Option Explicit

Private m_blnRemoveOnMove As Boolean
Private m_DeleteItemFromList As Boolean
Private m_ReverseListBox As Boolean

Public WithEvents MoveUpButton As MSForms.CommandButton
Public WithEvents MoveDownButton As MSForms.CommandButton
Public WithEvents TransferButton As MSForms.CommandButton

Public UpDownList As MSForms.ListBox

Public transferFromList As MSForms.ListBox
Public WithEvents TransferToList As MSForms.ListBox

Public OutputText As MSForms.TextBox


Private Sub TransferButton_Click()
     msgbox "Only fires once!!!!!, no matter how often I click the button"
end sub

Затем в модуле, в котором я инициализирую listboxes, я создаю несколько объектов своего класса (CListMover):

   ' Input box ....
    With GUI_Excel.ListBox_Header_Input
        .MultiSelect = fmMultiSelectExtended
        .ColumnCount = 2
        .columnWidths = "180;50"
    End With


    For i = 1 To lastColumn
        colTitle = Trim(UCase(wsIn.Cells(headerRow, i).value))
        GUI_Excel.ListBox_ColumnHeaderInputFile.AddItem colTitle
        GUI_Excel.ListBox_ColumnHeaderInputFile.List(i - 1, 1) = i

    Next i

    ' Output box ......
    With GUI_Excel.ListBox_ColumnHeaderOutputFile
        .MultiSelect = fmMultiSelectExtended
        .ColumnCount = 4
        .columnWidths = "180;50;100;100"
    End With


    'Move from input to output...
    Set m_clsListMoveIn = New CListMover
    With m_clsListMoveIn
        Set .TransferButton = GUI_Excel.CommandButton_MoveIn
        Set .transferFromList = GUI_Excel.ListBox_ColumnHeaderInputFile
        Set .TransferToList = GUI_Excel.ListBox_ColumnHeaderOutputFile
        .ReverseListBox = True
    End With

    'Move from output to input, i.e delete...
    Set m_clsListMoveOut = New CListMover
    With m_clsListMoveOut
        Set .TransferButton = GUI_Excel.CommandButton_MoveOut
        Set .transferFromList = GUI_Excel.ListBox_Header_Output

        .RemoveItemOnTransfer = True
        .DeleteItemFromList = True

    End With

    ' Move up down ....
    Set m_clsListMoveUpDown = New CListMover
    With m_clsListMoveUpDown
        Set .MoveDownButton = GUI_Excel.CommandButton_MoveDown
        Set .MoveUpButton = GUI_Excel.CommandButton_MoveUp
        Set .UpDownList = GUI_Excel.ListBox_Header_Output
    End With

    GoTo terminate

terminate:
    Exit Sub
End Sub

Эта проблема:
События, кажется, срабатывают только один раз! Итак, я помещаю все свои элементы в поле ввода и могу один раз переместить элемент, после чего он перестает реагировать на мою командную кнопку. Надо ли что-то делать с событиями самой кнопки?

Private Sub CommandButton_MoveIn_Click()

End Sub

Самое смешное, что в excel работает нормально, но не на словах ....

Это в форме пользователя? На поверхности документа?

Cindy Meister 10.08.2018 13:42

да, это пользовательская форма. Это похоже на: Частный m_clsListMoveUpDown Как CListMover Частный m_clsListMoveIn Как CListMover Частный m_clsListMoveOut Как CListMover Должен быть объявлен в модуле пользовательской формы, а не в каком-либо другом модуле.

skatun 13.08.2018 10:18

Да, события нужно объявлять в модуле UserForm. Пользовательские формы на самом деле являются классы (поэтому они могут иметь события). Если вы хотите, чтобы основная часть кода была в «простом» модуле, вы можете поместить его туда и вызвать из события.

Cindy Meister 13.08.2018 13:59
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
3
49
0

Другие вопросы по теме