Выберите правильный Private Sub - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть некоторый код VBA, который работает с кнопкой управления.Код работает нормально, но я бы хотел, чтобы он запускался автоматически.Я не могу понять, что Private Sub правильно.Код выглядит следующим образом:

Private Sub CommandButton3_Click()

Dim num As String

num = Range("L5").Value

Select Case num

        Case Is = 15, 16, 17, 18, 19

            Range("X5").Value = "510"

        Case Is = 20, 21, 22, 23, 24

            Range("X5").Value = "570"

        Case Is = 25, 26, 27, 28, 29

            Range("X5").Value = "610"

        Case Is = 30, 31, 32, 33, 34

            Range("X5").Value = "630"

        Case Is = 35, 36, 37, 38, 39

            Range("X5").Value = "635"

        Case Is = 40, 41, 42, 43, 44

            Range("X5").Value = "632"

        Case Is = 45, 46, 47, 48, 49

            Range("X5").Value = "622"

        Case Is = 50, 51, 52, 53, 54

            Range("X5").Value = "610"

        Case Is = 55, 56, 57, 58, 59

            Range("X5").Value = "590"

        Case Is = 60, 61, 62, 63, 64

            Range("X5").Value = "565"

        Case Is = 65, 66, 67, 68, 69

            Range("X5").Value = "540"

        Case Is = 70, 71, 72, 73, 74

            Range("X5").Value = "520"

        Case Is = 75, 76, 78, 79

            Range("X5").Value = "490"

        Case Is = 80, 81, 82, 83, 84

            Range("X5").Value = "470"

        Case Is = 85, 86, 87, 88, 89, 90

            Range("X5").Value = "440"

 End Select

 End Sub

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Вам не нужен оператор case, вы можете сделать это в 1 строке кода (плюс, если захватить что-либо за пределами диапазона), потому что ваши скобки увеличиваются равномерно:

Public Function MyFunction2(ByVal MyValue As Double) As Double
If MyValue < 15 Or MyValue > 90 Then
    MyFunction2 = 0
Else
    MyFunction2 = CDbl(Array(0, 0, 0, 510, 570, 610, 630, 635, 632, 622, 610, 590, 565, 540, 520, 490, 470, 440)(Round(MyValue / 5, 0)))
End Function

Это UDF, поэтому следуйте той же логике, что и в ответе ja72, но вместо MyFunction поместите MyFunction2, расположите их рядом, чтобы вы могли сравнить, что оба они дают одинаковые результаты.

0 голосов
/ 20 ноября 2018

Создайте пользовательскую функцию и используйте ее для обновления "X5" на основе содержимого "L5"

. В модуле напишите следующий код:

Public Function MyFunction(ByVal value As Double) As Double
    Dim x As Long, y As Long
    x = CLng(value)
    Select Case x
        Case 15 To 19
            y = 510
        Case 20 To 24
            y = 570
        Case 25 To 29
            y = 610
        Case 30 To 34
            y = 630
        Case 35 To 39
            y = 635
        Case 40 To 44
            y = 632
        Case 45 To 49
            y = 622
        Case 50 To 54
            y = 610
        Case 55 To 59
            y = 590
        Case 60 To 64
            y = 565
        Case 65 To 69
            y = 540
        Case 70 To 74
            y = 520
        Case 75 To 79
            y = 490
        Case 80 To 84
            y = 470
        Case 85 To 90
            y = 440
        Case Else
            y = 0
    End Select
    MyFunction = CDbl(y)
End Function

Результат будетобновлять автоматически.

scr

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