У меня есть лист, который вычисляет несколько ключевых финансовых переменных на основе изменения одной ячейки (допущения предварительно вычисляются, но каждый раз, когда изменяется ячейка, Excel должен вычислять, обычно каждая из них выполняется очень быстро).
Используя поле со списком ActiveX (чтобы разрешить пользователю управление/возможность поиска и т. д.), я разрешаю пользователю изменять ячейку B1:
Private Sub ComboBox1_Change()
Application.EnableEvents = False
Range("B1").Value = ComboBox1.ListIndex + 2
End Sub
Текущая проблема, которую я пытаюсь решить, заключается в попытке объединить их в пакеты, чтобы я мог итеративно запускать пользовательский список.
В приведенном ниже примере (это не конечный результат, который я хочу, просто доказательство того, что я могу легко изменить ячейку B1), я пытаюсь изменить ячейку B1 на значения 1, затем 2, затем 3 и посмотреть, каковы результаты и позже адаптирует это, чтобы оно было более гибким, чем просто 1, 2, 3
Private Sub CommandButton2_Click()
Dim counter As Integer
For counter = 1 To 3
Application.EnableEvents = False
Worksheets("Hurdle Evaluation").Range("B1").Value = counter
Worksheets("MOBCashFlow").Calculate
Worksheets("Hurdle Evaluation").Calculate
Worksheets("IterateNPV").Range("A2").Value = counter
Worksheets("IterateNPV").Range("B2").Value = Worksheets("Hurdle Evaluation").Range("F5").Value
Worksheets("IterateNPV").Range("C2").Value = Worksheets("Hurdle Evaluation").Range("F6").Value
Worksheets("IterateNPV").Range("D2").Value = Worksheets("Hurdle Evaluation").Range("G5").Value
Worksheets("IterateNPV").Range("E2").Value = Worksheets("Hurdle Evaluation").Range("G6").Value
Worksheets("IterateNPV").Range("F2").Value = Worksheets("Hurdle Evaluation").Range("J5").Value
Range("A2").EntireRow.Insert
Next counter
End Sub
Результаты (показаны ниже):
3 $10,134,808.14 $9,194,031.64 $10,134,808.14 $9,194,031.64 758.129033
2 $10,134,808.14 $9,194,031.64 $10,134,808.14 $9,194,031.64 758.129033
1 $10,134,808.14 $9,194,031.64 $10,134,808.14 $9,194,031.64 758.129033
показывает, что базовая ячейка либо не изменяется, либо изменяется и перезаписывается предыдущим макросом (эти значения являются правильными значениями для элемента, выбранного в поле со списком). Я ищу любые творческие решения, чтобы вручную перезаписать эту ячейку B1, которая связана с ComboBox.
Спасибо.
Application.EnableEvents = False
этот параметр является постоянным: он не включится снова после выхода вашего Sub - вы должны сбросить его в своем коде. Вы можете попробоватьCalculateFull
вместоCalculate
- трудно понять, какой из них вам может понадобиться, не зная, как настроены ваши формулы. - person Tim Williams   schedule 12.12.2017Worksheets("IterateNPV").Range("A2").Value = Counter
наWorksheets("IterateNPV").Range("A2").Value = Worksheets("Hurdle Evaluation").Range("B1").Value
, и он по-прежнему возвращает тот же результат. B1 в оценке препятствий либо не изменяется, либо предыдущий макрос, упомянутый выше, влияет на него. Я также пытался удалить флаг enableevents и пробовал CalculateFull и CalculateFullRebuild безрезультатно. - person CitricAcid   schedule 12.12.2017counter
должно изменяться в цикле, но значение 4356 не могло быть получено из опубликованного вами кода. - person Tim Williams   schedule 12.12.2017Private Sub ComboBox1_Change() Application.EnableEvents = False Range("B1").Value = ComboBox1.ListIndex + 2 End Sub
- person CitricAcid   schedule 12.12.2017EnableEvents
не влияет на события управления ActiveX, поэтому установка значения False здесь не поможет. - person Tim Williams   schedule 12.12.2017For counter = 1 to 3
наFor counter = 1 to 3 step -1
- person Luuklag   schedule 12.12.2017