VBA: Как исправить «несоответствие типов» - PullRequest
1 голос
/ 03 июля 2019

Я работал над простым макросом, который запускает цикл for, который берет ячейку, умножает ее на столбец и суммирует ее перед повторением повторения для следующей ячейки в столбце. Циклы for выглядят хорошо, но при попытке преобразовать значение ячейки листа в целое число приводит к несоответствию типов

Dim ws As Worksheet
Dim wssum As Worksheet

'set worksheets to copy values
Set ws = Sheets("sheet1")
Set wssum = Sheets("sheet2")

Dim i As Integer
Dim j As Integer
Dim bumonth As Currency
Dim busum As Currency
Dim bux As Currency



'sort through months
For i = 0 To 11
    'sort through rows the number or rows is hardcoded to the number of apps in sheet
    For j = 0 To 43
        bumonth = 0
        bumonth = CCur(ws.Cells(1, 53 + j).Value * ws.Cells(2 + i, 3 + j).Value)
        busum = busum + bumonth
    Next j
       wssum.Cells(4 + i, 3 + j).Value=  busum
    Next i

Ошибка происходит в строке

bumonth = CInt(ws.Cells(1, 53 + j).Value * ws.Cells(2 + i, 3 + j).Value)

Я надеялся, что этот код будет делать, это взять значения из формы на листе 1 и экспортировать значения на лист 2.

1 Ответ

1 голос
/ 03 июля 2019

Скорее всего, значения, которые вы умножаете, не являются числовыми, поэтому их необходимо проверить.Возможный способ сделать это так:

For j = 0 To 43
    If Not IsNumeric(ws.Cells(1, 53 + j).Value) Then
        Err.Raise 999, Description:="Value on  " & ws.Cells(1, 53 + j).Address & " is not numeric!"
    End If
    If Not IsNumeric(ws.Cells(2 + i, 3 + j).Value) Then
        Err.Raise 999, Description:="Value on  " & ws.Cells(2 + i, 3 + j).Address & " not numeric!"
    End If

    bumonth = 0
    bumonth = CCur(ws.Cells(1, 53 + j).Value * ws.Cells(2 + i, 3 + j).Value)
    busum = busum + bumonth
Next j

Кроме того, как уже упоминалось в комментариях, не рекомендуется использовать Integer в VBA, так как вы можете легко получить ошибку переполнения - Зачем использовать целое число вместо длинного?

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