Out, если иногда возникает ошибка стекового пространства на разных компьютерах, не знаю, в чем проблема - PullRequest
0 голосов
/ 29 апреля 2019

Я хочу установить 7 различных максимумов и минимумов для 5 счетчиков в зависимости от значения в другой ячейке.

Этот код работает на нескольких компьютерах, но на некоторых я сталкиваюсь с ошибкой вне стека.Даже на одном компьютере это работает несколько раз, а другие нет.Есть ли причина для этого?

Код помещается в объекты Microsoft Excel для листа, на который он ссылается.И это повторяется 5 раз в зависимости от значения ячейки

Я попытался добавить еще один, если это исправляет все присутствующие ошибки, однако кнопки вращения перестают работать.

Private Sub SpinButton1_Change()
'Barerock spinner
If Worksheets("Model").Range("E4") = 1 Then
    SpinButton1.Max = 4
    SpinButton1.Min = 4

ElseIf Worksheets("Model").Range("E4") = 2 Then
    SpinButton1.Max = 3
    SpinButton1.Min = 3

ElseIf Worksheets("Model").Range("E4") = 3 Then
    SpinButton1.Max = 4
    SpinButton1.Min = 4

ElseIf Worksheets("Model").Range("E4") = 4 Then
    SpinButton1.Max = 3
    SpinButton1.Min = 3

ElseIf Worksheets("Model").Range("E4") = 5 Then
    SpinButton1.Max = 4
    SpinButton1.Min = 4

ElseIf Worksheets("Model").Range("E4") = 6 Then
    SpinButton1.Max = 4
    SpinButton1.Min = 4

End If


SpinButton1.Max = 100 - Range("I9") + Range("D9")
SpinButton1.Min = 0

end sub

1 Ответ

1 голос
/ 29 апреля 2019

Похоже, ваш код повторно запускает событие, поэтому вам нужен какой-то флаг, чтобы предотвратить это.

Вы можете попробовать что-то вроде этого (просто угадать в этой последней части, так как ваш оригинальный код выглядит немного странно ...)

Private Sub SpinButton1_Change()

    Static inProcess As Boolean, newVal As long

    If inProcess Then Exit Sub '<< don't re-trigger...

    Select Case Worksheets("Model").Range("E4").value' = 1 Then
        Case 1,3,5,6: newVal = 4
        Case 2, 4: newVal = 3
    End Select

    inProcess = True
    If NewVal <> 0 Then
        SpinButton1.Max = newVal 
        SpinButton1.Min = newVal 
    Else
        SpinButton1.Max = 100 - Range("I9") + Range("D9")
        SpinButton1.Min = 0
    End If
    inProcess = False

End sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...