Попытка найти способ предотвратить возникновение ошибки несоответствия типов в Excel VBA - PullRequest
0 голосов
/ 06 марта 2019
Sub Calculate_NNA_NMEXRegionUnits_Pacific()
Dim a, rand, AsInteger As Integer
For a = 8 To 42 
 Cells(26, a) = Round(Cells(27, a) * Cells(27, 7) * (Cells(22, 2) - Cells(22, 3) - Cells(20, 7)), 0)
Next a

Я делаю программу, которая выполняет набор расчетов в диапазоне (26, а).Тип данных формулы - вариант / целое число, а тип данных в диапазоне - вариант / объект / диапазон.Мне любопытно, могу ли я убедиться, что обе стороны этого уравнения имеют одинаковый тип данных, я искал способы изменить формулу, я также работал с формулами преобразования типов.Я не был успешным.Я прошу помощи, чтобы предотвратить несоответствие типов в строке 4, чтобы мой код мог продолжить.

rerand1:
    rand = Application.WorksheetFunction.RandBetween(9, 27) 'Excludes base trim in random addition because of restrictions
    If Cells(27, rand) = 0 Then
        GoTo rerand1 'Wont change a 0 value, because it might be intentionally zero.
    Else
        If Cells(26, 7) < Cells(22, 2) - (Cells(22, 3) + Cells(20, 7)) Then Cells(26, rand) = Cells(26, rand) + 1 'If there is less than the total, add.
        If Cells(26, 7) > Cells(22, 2) - (Cells(22, 3) + Cells(20, 7)) Then Cells(26, rand) = Cells(26, rand) - 1 'If there is more than the total, subtract.
    End If
End If
End Sub

Это следующий шаг в моем коде, если он необходим для решения проблемы

1 Ответ

1 голос
/ 06 марта 2019

Type mismatch может произойти не только потому, что у вас есть разные типы значений. Вы также можете получить эту ошибку, если в этой ячейке есть ошибка формулы. Например, если вы введете =0/0 в ячейку A1, а затем в немедленном окне, если вы выполните ?Val([A1].value), вы получите ошибку Type Mismatch.

Вот один из способов добиться того, чего вы хотите. Попробуйте сохранить значение во временной переменной, а затем использовать его для сравнения.

Dim tmpVal As Integer

rand = Application.WorksheetFunction.RandBetween(9, 27)

On Error Resume Next
tmpVal = Cells(27, rand)
On Error GoTo 0

If tmpVal = 0 Then

Else

End If
...