Может ли вариантный тип данных хранить значения типа данных строки фиксированной длины в VBA? - PullRequest
0 голосов
/ 19 февраля 2019

Согласно официальной документации Microsoft.com :

Variant - это специальный тип данных, который может содержать любые данные, кроме данных String фиксированной длины.(Типы вариантов теперь поддерживают определяемые пользователем типы.) Вариант также может содержать специальные значения Empty, Error, Nothing и Null.Вы можете определить, как обрабатываются данные в Variant, используя функцию VarType или функцию TypeName.

Мне просто нужно понять, почему приведенный ниже код работает, когда вариант не может хранить строки фиксированной длины?

Sub Test()

    Dim y As Variant
    Dim x As String * 10
    y = x
    MsgBox y

End Sub

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Когда String * 10 приводится к Варианту, Вариант становится строкой.Проверьте y в окне просмотра:

Sub Test()

    Dim y As Variant
    Dim x As String * 10        
    x = "12345678900"
    y = x
    y = "12345678900"        
    Debug.Print y

End Sub

enter image description here

0 голосов
/ 19 февраля 2019

y = x преобразует строку фиксированной длины в обычную строку, например, x = 10 преобразует это число в строку.Протестируйте его с помощью y = x & "123456789012345", и вы увидите, что он больше не имеет фиксированной длины.

Sub Test()    
    Dim y As Variant
    Dim x As String * 10
    y = x
    MsgBox y    

    'but this works too
    y = x & "123456789012345"
    MsgBox y    
End Sub

Это означает, что x - это строка фиксированной длины, но y больше не является фиксированной по длине.Если вы явно не конвертируете один тип в другой, VBA неявно преобразует их в другой тип, если это возможно (если нет, вы получаете несоответствие типов).

Это означает, например, что вы можете вставить число в строку безявно преобразовав это:

Dim str As String
str = 12345

приведёт число 12345 в строку типа str = CStr(12345).

Подобное происходит, когда вы вставляете строку фиксированной длины в вариант.Он неявно преобразуется в строку не фиксированной длины.

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