У меня есть два ввода и вывода списков, и я хочу переместить элемент из одного в другой. Итак, я создал класс (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 работает нормально, но не на словах ....
да, это пользовательская форма. Это похоже на: Частный m_clsListMoveUpDown Как CListMover Частный m_clsListMoveIn Как CListMover Частный m_clsListMoveOut Как CListMover Должен быть объявлен в модуле пользовательской формы, а не в каком-либо другом модуле.
Да, события нужно объявлять в модуле UserForm. Пользовательские формы на самом деле являются классы (поэтому они могут иметь события). Если вы хотите, чтобы основная часть кода была в «простом» модуле, вы можете поместить его туда и вызвать из события.
Это в форме пользователя? На поверхности документа?