나는이 포럼에서 처음으로 사용자입니다. 여기에 내 시나리오가있다 : 사용자 폼에, 나는 콤보 박스, 두 개의 텍스트 박스와 'OK'버튼을 가지고있다. 사용자가 콤보 상자의 드롭 다운 목록에서 선택하면 콤보 상자의 변경 이벤트가 트리거되고 이벤트 처리 코드는 사용자 선택에 따라 워크 시트의 정보로 텍스트 상자를 채 웁니다. 그런 다음 사용자는 텍스트 상자 중 하나 또는 둘 다에있는 정보를 편집 할 수 있습니다. 그런 다음 사용자는 'OK'를 누릅니다. OK 단추의 click 이벤트는 텍스트 상자의 수정 된 정보를 다시 워크 시트의 셀에 씁니다. 꽤 솔직하게 보입니다. 여기 내 문제 : 콤보 상자의 변경 이벤트는 해당 속성을 참조 할 때마다 트리거 할 것으로 보입니다. 특히 콤보 상자의 ListIndex 속성이 참조되는 아래의 cb_CustomersUpdateOK_Click() 서브 루틴의 세 인스턴스입니다. Change 이벤트 코드에 Msgbox를 배치하여 이벤트가 트리거 된시기를 나타냅니다. 확인 클릭 이벤트 코드에서 세 개의 할당 문에서 중단 점을 사용하면 세 문에서 각기 다른 시점에 콤보 상자가 표시됩니다 (Msgbox가 표시됨). 트리거가 발생하면 텍스트 상자의 편집 정보를 콤보 상자 선택의 초기 데이터로 덮어 씁니다. (1) 콤보 박스 변경 이벤트가 왜 그런 식으로 실행 되는가? (2) 이것이 일어나지 않도록 내가 무엇을해야 하는가?(Excel VBA) 콤보 상자 변경 이벤트가 해당 속성 중 하나가 반환 될 때마다 트리거되는 이유는 무엇입니까?
나는 지난 몇 시간 동안 이것을 연구 해왔고, 나는별로 유용한 것을 발견하지 못했다. 어떤 도움이라도 대단히 감사하겠습니다. 더 많은 정보가 필요하면 알려주십시오.
Private Sub combo_CustomersUpdateLastName_Change()
MsgBox "combobox changed" 'For debug purposes
With Sheets("Customers")
tb_CustomersUpdateFirstName.Value = .Cells(combo_CustomersUpdateLastName.ListIndex + 2, 2).Value
tb_CustomersUpdatePhone.Value = .Cells(combo_CustomersUpdateLastName.ListIndex + 2, 3).Value
End With
End Sub
...
Private Sub cb_CustomersUpdateOK_Click()
'Copy the updated customer data from the controls to the Customers sheet
With Sheets("Customers")
.Cells(combo_CustomersUpdateLastName.ListIndex + 2, 1).Value = combo_CustomersUpdateLastName.Value
.Cells(combo_CustomersUpdateLastName.ListIndex + 2, 2).Value = tb_CustomersUpdateFirstName.Value
.Cells(combo_CustomersUpdateLastName.ListIndex + 2, 3).Value = tb_CustomersUpdatePhone.Value
'Sort the customer data in case the last name or first name was updated
Range("CustomerInfo").Sort Key1:=.Columns("A"), Key2:=.Columns("B")
End With
MsgBox "Customer data updated."
Unload form_CustomersUpdate
End Sub
정확히 무슨 일이 있었는지, 솔루션 코딩은 간단했습니다. 좋은 캐치 !! – BillD
도움이 되니 기쁩니다. 나는 사건을 proccing하고있는 이벤트와 같은 종류의 물건을 항상 proccing하고있다. –