У меня есть лист «заполнения формы» с макросом VBA для автоматического перемещения данных в другой лист «базы данных».Затем есть ComboBox для поиска и извлечения данных из базы данных.
Механизм ComboBox_Click скопирует его текстовое значение в Target.Address, который вызовет Worksheet_Change и, наконец, данные будут извлечены и отображены.
Проблема в том, что ComboBox_Click запускает Worksheet_Change несколько раз (примерно 3 раза) и портит указанный адрес Target.Address.Если я отредактирую значение ячейки вне указанного Target.Adress, Worksheet_Change сработает, каждая ячейка теперь будет выступать в качестве Target.Address. EDIT: целевой адрес НЕ испорчен
Как я могу это остановить?
Это код VBA на листе для заполнения форм, упрощенный, а не мой код. Я отредактировал его из кода, полученного с веб-сайта..
Option Explicit
----------------------------------------------------
Private Sub ComboBox1_Click()
Me.Range("myTargetAddress").Value = Me.Range("myComboBoxValue").Value
'myComboBoxValue is ComboBox LinkedCell property
End Sub
----------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim wForm as Worksheet
Dim wDatabase as Worksheet
Dim lRowNextEmpty As Long
Dim lRowLastFilled As Long
Dim lRowMyDataPosition As Long
Dim lRowMyDataPostionExact As Long
Dim rMyDataToFill As Range
Set rMyDataToFill = wForm.Cells("C3:C12")
... 'collapsed to concise
Application.EnableEvents = False
Select Case Target.Address
Case Me.Range("myTargetAddress").Address
Case Else
GoTo WaitAndSee
End Select
With wDatabase
lRowNextEmpty = .Cells(.Rows.Count, "B").End(xlUp).Offset(1, 0).Row - 1
lRowLastFilled = lRowNextEmpty - 1
End With
With wDatabase
lRowMyDataPostion = wForm.Range("A1").Value 'A1 contain formula to match lookup
If lRowMyDataPostition > 0 And lRowMyDataPosition <= lRowLastFilled
lRowMyDataPositionExact = lRowMyDataPosition + 1 '+ 1 to overcome column header
.Range(.Cells(.lRowMyDataPositionExact, 1), .Cells(lRowMyDataPositionExact, 10).copy
'this will copy, for excample, A1:J1 from database 'J is the 10th column
rMyDataToFill.Cells(1,1).PasteSpecial Paste:=xlPasteValues, Transpose:=True
End If
End With
WaitAndSee:
Application.EnableEvents = True
Exit Sub
End Sub