Listbox_Click выполнить команду перед выбором новой записи - PullRequest
1 голос
/ 27 апреля 2020

Можно ли выполнить команду между моментом, когда пользователь щелкает элемент списка (в пользовательской форме) и выбранным элементом?

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

мой код, если вы щелкните по списку:

Private Sub ListBox1_Click()
   Dim lrow As Long        
     Values_delete  'Sub that clears all text boxes          
     If ListBox1.ListIndex >= 0 Then    
         lrow = 2 
         Do While Trim(CStr(Tabelle10.Cells(lrow, 1).Value)) <> ""              
             If ListBox1.Text = Trim(CStr(Tabelle10.Cells(lrow, 1).Value)) Then            
                 Values_read (lrow) 'values get read from the excel cells and written into the text boxes            
                 Exit Do            
             End If        
             lrow = lrow + 1
         Loop
     End If
End Sub

, а также мой код для кнопки сохранения:

Public Sub SaveButton_Click()
           Dim lrow As Long
           If ListBox1.ListIndex = -1 Then Exit Sub          
           If Trim(CStr(Abteilung.Text)) = "" Then               
               MsgBox "Error", vbCritical + vbOKOnly, "Error"
               Exit Sub
           End If
           lrow = 2 
           Do While Trim(CStr(Tabelle10.Cells(lrow, 1).Value)) <> ""
               If ListBox1.Text = Trim(CStr(Tabelle10.Cells(lrow, 1).Value)) Then
                   Values_write (lrow)  'Values get written into the cells               
                   If ListBox1.Text <> Trim(CStr(Abteilung.Text)) Then
                       Call UserForm_Initialize
                       If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
                   End If                  
                   Exit Do                  
               End If          
               lrow = lrow + 1 
           Loop
    End Sub

Возможно ли это вообще?

Ответы [ 2 ]

2 голосов
/ 27 апреля 2020

Попробуйте MouseDown событие, которое запускается перед обновлением чего-либо. При нажатии на новый элемент .Selected или .Listindex указывает на предыдущий элемент в пределах Mousedown. Затем вы можете использовать событие MouseMove для обработки недавно выбранного элемента.

1 голос
/ 27 апреля 2020

Я предполагаю, что вы используете либо элемент управления ActiveX на листе, либо элемент управления UserForm, так что

Вы можете использовать событие MouseDown; ниже будет напечатан текст ранее выбранного элемента (на основании нажатия пользователем нового элемента)

Private Sub ListBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

Debug.Print ListBox1.Text

End Sub

Документация MS кратко упоминает это событие: См. здесь

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