Что это за примитивный тип данных VBA? - PullRequest
0 голосов
/ 17 февраля 2012

Я пытаюсь найти наибольший простой множитель числа 600851475143.

Я затемнил двойной тип в VBA, который прикрепил знак # к концу числа, так что я думаю, что это указывает назначение превышает ограничение двойного типа, но я все равно могу выполнять арифметику с ним, если я не хочу делать что-то вроде функции модуля.Если я запускаю приведенный ниже код, это вызывает ошибку переполнения:

Sub test()

 Dim x As Double
 x = 600851475143#
 x = x - 1
 x = x Mod 11


End Sub

Но если я изменю код и не объявлю свою переменную и не позволю VBA это сделать, функция модуля будет работать без переполнения.Ниже показано:

Sub test()

 x = 600851475143#
 x = x - 1
 x = x Mod 11

End Sub

Итак, во втором наборе кода, какой тип переменной для х?

Ответы [ 2 ]

4 голосов
/ 17 февраля 2012

@ Bluefeet правильно, что необъявленная переменная по умолчанию имеет тип данных Variant. Но нет такого внутреннего типа, как «Вариант». То, что хранится внутри, зависит от значения, присвоенного переменной. Вы можете проверить, как обрабатывается значение, используя функцию TypeName():

Sub test1()
 Dim x As Variant: Debug.Print TypeName(x) 'Empty'
            x = 1: Debug.Print TypeName(x) 'Integer'
        x = 32768: Debug.Print TypeName(x) 'Long'
        x = 32767: Debug.Print TypeName(x) 'Integer'
         x = Null: Debug.Print TypeName(x) 'Null'
          x = 1.1: Debug.Print TypeName(x) 'Double'
        x = Empty: Debug.Print TypeName(x) 'Empty'
           x = "": Debug.Print TypeName(x) 'String'
x = 600851475143#: Debug.Print TypeName(x) 'Double'
End Sub

Скопируйте и вставьте приведенный выше код и выполните его, и вы увидите, что «Variant» никогда не возвращается как имя типа. Последняя строка вас заинтересует.

2 голосов
/ 17 февраля 2012

Вы должны всегда объявлять тип данных, но если вы не объявляете тип данных, то по умолчанию используется Variant

VBA Variant

В большинстве случаев вы должны объявлять переменные с конкретными данными типы, такие как String, Long или Double. VBA поддерживает данные Variant тип, который может содержать любой тип данных. Если вы опустите предложение As Type в объявление переменной, Variant является типом по умолчанию. Хотя это может кажется полезным, это увеличивает время обработки при обнаружении в коде потому что за кулисами, компилятор добавил немало код для проверки того, какой тип данных на самом деле хранится в переменной. Более того, использование Variant может маскировать возможные ошибки несоответствия типов, которые должен быть пойман во время тестирования. Вместо использования типа Variant, объявите переменную с определенным типом данных.

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