Мне нужно проверить, является ли значение в textbox1 и textbox2 целым или длинным (без десятичных знаков).

Я пробовал примерно так:

    Dim x As Integer
    Dim y As Integer

    x = TextBox1.Value
    y = TextBox2.Value

    If x = Int(x) Then
        'my code
    Else
        MsgBox("value is not an integer")

Если я поставлю x = 2.3, он не отобразит MsgBox, но округлит значение до 2.

0
Pawel 6 Сен 2016 в 09:58

3 ответа

Лучший ответ

Поскольку вы указали тип для x как Integer, преобразование из строки текстового поля в Integer уже выполнено. Следовательно, Int(x) не работает.

Одно из исправлений - использовать что-то вроде

If IsNumber(TextBox1.Value) Then
    If Fix(TextBox1.Value) = TextBox1.Value Then
        'I am an integeral type.
    End If
End If

Здесь Fix усекает числовой тип, и я полагаюсь на VBA для правильного сравнения. Обратите внимание, что VBA не реализует сокращенный And, поэтому вам нужно использовать вложенный If или аналогичный.

4
Bathsheba 6 Сен 2016 в 07:05

Вот еще один подход (псевдокод, поэтому проверьте синтаксис!)

Dim l_Temp_D1 as Decimal
Dim l_Temp_D2 as Decimal
Dim l_Temp_I  as Integer

l_Temp_I  = TextBox1.Value
l_Temp_D1 = TextBox1.Value
l_Temp_D2 = l_Temp_I

if (not IsNumber(TextBox1.Value)) then
    ' Error!!!
End If

if (l_Temp_D1 = l_Temp_D2) then
  ' Integer
  ...
else
  ' Float
  ...
End If
0
FDavidov 6 Сен 2016 в 07:22

Вы не можете Dim var as Decimal в VBA, но можете Dim var as Variant и использовать var = CDec(...) для хранения десятичного типа данных в варианте. Даже тогда я обнаружил, что десятичные дроби с 14 или 15 нулями после десятичной дроби, за которой следует число (или эквивалентная десятичная дробь, вычитаемая из целого числа), округляются до целого числа. Я еще не нашел решения, которое отличало бы крошечные десятичные дроби от целых чисел.

1
ChrisB 2 Июл 2018 в 18:35