1.
Application.EnableEvents=False/True does not affect ActiveX objects.
2. I don't fully understand why the
CAC_Type_Change() is firing on copy/pasting the range but it is something to do with the
combobox.listfillrange property being
CACsList, which is a dynamic Name dependent on part of the range that you're copying from (why it should decide to recalculate the range because part of it is being copied from beats me**). So once this Named range is recalculated, the combobox's
ListFillRange is 'updated' which counts as a
Change so that event is fired again. Normally you'd disable the combobox temporarily to stop its events firing but this didn't work, however, in this case we can employ a trick to make the
Application.EnableEvents status (True/False) act as a condition to decide whether the code in the Change event is run or not.
3. You can condense the copy/paste code, and there'll be no need for an
Escape nor an
Application.CutCopyMode = False.
So for other Activex objects which are misbehaving you can use
Application.EnableEvents as usual, just put a big
If…Then around the entire event code for that misbehaving ActiveX object.
Specifically for your problem:
Private Sub CAC_Type_Change()
If Application.EnableEvents Then
Application.EnableEvents = False
Select Case CAC_Type.Value
Case ""
Case "CAC/Sq.Ft. Increased Density"
Range("CAC_Per_Sq.Ft.").Copy Range("Calculator")
End Select
Application.EnableEvents = True
End If
End Sub
Does this solve it?
** Could it be because formulae such as =OFFSET($Y$26,0,2+((ROW(Y27)-26)*6)) within the CACsList refer to that entire row and cells within that entire row are being changed during the paste operation thus firing a calculation?