Перезапись значений в диапазоне, который является исходным для списка - PullRequest
0 голосов
/ 20 октября 2018

У меня есть список в пользовательской форме с исходным диапазоном, который я пытаюсь перезаписать, предоставляя значения из пользовательской формы, но как только я перезаписываю конкретную ячейку, запускается событие ListBox1_Click(), которое нежелательно, поскольку оно заполняет данныев пользовательской форме.

Private Sub ListBox1_Click()

Application.EnableEvents = False
Dim i As Long, fRow As Long

For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) Then
        If i > 0 Then
            HSht.Range("cRow").Value = i + 1
            fRow = HSht.Range("cRow").Value
            Call getData(fRow)
            HSht.Range("LRow").Value = getlastRow()
            Me.ItemLbl.Caption = "Item number :" & HSht.Range("cRow").Value - 1 & " of " & HSht.Range("LRow").Value - 1
        End If
        Exit For
    End If
Next i

Application.EnableEvents = True
End Sub

Вот код кнопки обновления:

Private Sub cmdUpdate_Click()

Application.EnableEvents = False

'Update
Dim fRow As Long, i As Long
fRow = HSht.Range("cRow").Value
Call updateData(fRow)
HSht.Range("LRow").Value = getlastRow()
Me.ItemLbl.Caption = "Item number :" & HSht.Range("cRow").Value - 1 & " of " & HSht.Range("LRow").Value - 1

'MsgBox "Data updated successfully"
Application.EnableEvents = True
End Sub

Например, у вас есть 10 полей, и у вас есть десять текстовых полей в пользовательской форме для просмотра / изменения данных, ноу вас также есть многоколонный список для просмотра и прокрутки данных в табличном формате, когда при прокрутке вверх или вниз я получаю данные определенных строк в текстовых полях в пользовательской форме, у меня также есть кнопка с надписью «перезаписать» в случае, если я хочу изменитьданные на листе через пользовательскую форму.Но как только он изменяет одну ячейку на рабочем листе, запускается событие «Listbox1_click», и он перезаписывает данные в пользовательской форме.

1 Ответ

0 голосов
/ 20 октября 2018

Application.EnableEvents = false не повлияет на UserForms.Вы должны создать свойство и проверить его значение в начале события и выйти из подпрограммы события, если события отключены, например:

' Top of UserForm-Class
Public EnableEvents As Boolean ' if Private code outside the userform can't change value.
'One should add a Letter/Getter to have more control over the property (exposing the variable that stores a property-value isn't recommended I think, with Get/Let we can perform checks or just make the Letter private, but the Getter public)
Private Sub UserForm_Initialize()
    Me.EnableEvents = True
End Sub

Private Sub ListBox1_Click()
If Me.EnableEvents = False Then 'the first three lines of code suppress the events-code execution if EnableEvents = False and must be on top of every event that you want to have disabled.
  Exit Sub
End If
 'Me.EnableEvents = False should be set on top of button code and Me.EnableEvents = True at buttom if other events of from should be suppressed.

Dim i As Long, fRow As Long

For i = 0 To ListBox1.ListCount - 1
  ...

End Sub

Private Sub cmdUpdate_Click()
If Me.EnableEvents = False Then 'the first three lines of code suppress the events-code execution and must be on top of every event that you want to have disabled.
  Exit Sub
End If
Me.EnableEvents = False 'disable Form-Events

... 'Button-Code

Me.EnableEvents = True 'reenable events
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...