Combobox změnit událost je střílet pro případné změny v listu

0

Otázka

Snažil jsem se mít ComboBox v mé tabulky, ale to nefunguje tak, jak chci. Problém mám, je, že událost combobox (rozbalovací) se spustí pro všechny změny provedené v pracovním listu. například, mám combobox spojeny do buňky A1, kdykoliv jsem změnit hodnoty v H9 buňky (nebo jiných buněk) rozbalovací combobox je spuštěna. Chci vyvolat combobox drop box pouze tehdy, když jeho propojené změny v buňce, které je A1.

Private Sub ComboBox1_Change()
'DROP-DOWN USE CATEGORY BOX ///////////////////////////////////////////////////////
Dim Use As String
Dim Ind As String
Use = Worksheets("PEC Calculator").Range("B8").Value
Ind = Worksheets("PEC Calculator").Range("B3").Value
If ComboBox1.Value <> "" Then
ComboBox1.ListFillRange = "UC_List"
Me.ComboBox1.DropDown
End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False
Dim tblA As ListObject
Dim nRows As Long
Dim nCols As Long

Set tblA = Worksheets("PEC Calculator").ListObjects("ATableINPUT")

If tblA.Range(2, 2).Value = "TableA1" Then
    If Range("B4").Value = "Batch" Then
    tblA.Range(3, 2) = 0.000001
    Else
    tblA.Range(3, 2) = 0.000001
    End If
End if
Application.EnableEvents = True
End Sub

Existuje nějaký způsob, jak tento problém vyřešit? nějaký nápad?

combobox excel vba worksheet
2021-11-18 19:06:59
1

Nejlepší odpověď

0

V ComboBox.Změnit událost spouští pokaždé, když .Value změny vlastností. Na .LinkedCell majetek, který jste nastavili pro A1 je příčinou těchto událostí na oheň, na každý list změnit, protože A1 obsahuje vzorec.

  • Některé vzorce v aplikaci Excel zeptat k přepočtu na každém listu změnit.
  • I když nová hodnota je stejná jako staré hodnoty, to ještě spustí ComboBox.Change akce.

Chcete-li tento problém vyřešit, navrhuji vyhlášení Úroveň Modulu proměnné a používat jej uložit ComboBox Hodnotu. Úroveň modulu Proměnné si zachovávají svou hodnotu mezi popravy. Tímto způsobem můžete porovnat staré a nové hodnoty v průběhu každé události a provádět pouze vaše činy, když se hodnota změnila.

Dim CB_Val As Variant
Private Sub ComboBox1_Change()
    If Me.ComboBox1.Value <> CB_Val Then
        CB_Val = Me.ComboBox1.Value
        'DROP-DOWN USE CATEGORY BOX ///////////////
        Dim Use As String
        Dim Ind As String
        Use = Worksheets("PEC Calculator").Range("B8").Value
        Ind = Worksheets("PEC Calculator").Range("B3").Value
        If ComboBox1.Value <> "" Then
            ComboBox1.ListFillRange = "UC_List"
            Me.ComboBox1.DropDown
        End If
    End If
End Sub
2021-11-18 19:58:33

Skvělé! Ceněn!
Mohi

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................