Сделайте автоматическое c умножение в VBA - PullRequest
0 голосов
/ 04 февраля 2020

Привет, ребята, я пытаюсь изучать VBA Excel, но у меня есть некоторые проблемы в моем проекте

Здесь мой код

For p = 10 To 36
    If IsNumeric(Range("E" & p).Value) Then
        E = Range("E" & p).Value
        result2(p) = E * 1000
        Range("E" & p).Value = result2(p)
    End If
Next p

Я пытаюсь сделать заявление, когда я вставляю некоторые цифры c система автоматизации c возвращаемое значение *1000* 1006 *

Это после запуска программы

enter image description here

работает только один раз.

Ответы [ 3 ]

1 голос
/ 04 февраля 2020

Я думаю, проблема в том, что Worksheet_change вызывается рекурсивно, потому что вы обновляете значение в том же столбце.

Вы можете справиться с этим с помощью Application.EnableEvents. Это остановит событие Worksheet_change, и после обновления вы сможете вернуть его в значение true.

Application.EnableEvents = False
set value in E column
Application.EnableEvents = True

Или Вы можете просто использовать следующую формулу в отдельном столбце (например, F) и вставить ее во весь столбец.

=IF(ISNUMBER(E2),E2*1000,0)
1 голос
/ 04 февраля 2020

Похоже, ваша переменная result2 обозначена как целое число. в этом случае 1000 * 1000 слишком велико для целочисленной переменной. Целое число должно быть в диапазоне от -32767 до 32767. Таким образом, 1 миллион не может быть введен в целое число.

Если вы измените result2 на длинный массив, все будет в порядке.

0 голосов
/ 04 февраля 2020

Вместо зацикливания диапазона вы можете использовать Array, что быстрее:

Sub test()

    Dim arr As Variant

    With ThisWorkbook.Worksheets("Sheet1")

        'Import all values to an array
        arr = .Range("E10:E36")

        'Loop array
        For i = LBound(arr) To UBound(arr)
            'Check if the value is numeric
            If IsNumeric(arr(i, 1)) Then
                'Multiple by 1000
                arr(i, 1) = arr(i, 1) * 1000
            End If
        Next i
        'Import array to the range
        .Range("E10:E36") = arr

    End With

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