Dim columns As String
columns = (17 21 31 32 2 18 22 7 9 20 23 6 27 10 26 8 29 3 1 13 5 24 35 15 28 11 25 14 16 4 12 34 19 30 33)`
Выражение (17 21 31 ...)
не является литералом String
.В VBA (как и в многих других языках) строковые литералы разделяются "
двойными кавычками, а не круглыми скобками.
Ошибка компиляции из-за того, что выражение (integerLiteral integerLiteral integerLiteral ...)
не может бытьоценивается, это ничего не значит для компилятора.Я предполагаю, что он задыхается в токене 21
, ожидая разделитель списка ,
или закрывающую скобку )
, поскольку columns = (17)
будет допустимым выражением.
Это скомпилирует:
Dim columns As String
columns = "17 21 31 32 2 18 22 7 9 20 23 6 27 10 26 8 29 3 1 13 5 24 35 15 28 11 25 14 16 4 12 34 19 30 33"
... но тогда это не массив значений, это просто строка.В модуле VBA.Strings
есть функция Split
, которую можно использовать для разбиения строки на массив с использованием символа пробела:
Dim values As Variant
values = Strings.Split(columns, " ")
, который дает вам массив Variant/String
элементов, которые вы можете позже перебрать и преобразовать в Long
значения, если вам нужно.
в R, я могу использовать c(1,2,3)
, если я собираюсь определить object,column index
as (1,2,3)
Это утверждение крайне непонятно и трудно понять аудитории экспертов VBA - как (1,2,3)
отображается на object, column index
?Является ли 1
«объектом»?2,3
индекс столбца?Или ты имел ввиду object, column, index
?Не имеет особого смысла, даже для тех, кто знает, что такое кортеж значения.Похоже, R позволяет вам определять значения кортежей в строке.Это круто, но в VBA нет понятия кортежа значений и встроенных объектов.
Если вам нужен объект, вы добавляете модуль класса в свой проект и определяете его - как минимум, используяоткрытые поля для определения его открытого интерфейса:
'Class1
Option Explicit
Public Value As Long
Public Column As Long
Public Index As Long
Затем вы можете создавать новые экземпляры этого класса, используя New
: Set foo = New Class1
, а затем назначать и читать его свойства, вызывать его методы: Debug.Print foo.Index, foo.Column, foo.Value
.
Об этом:
columns = (num & num& ... &num)
Обратите внимание, что некоторые токены имеют несколько синтаксических целей;&
является одним из таких токенов.Когда он окружен пробелами, как в num & num
, это оператор объединения строк .
Но без начального пробела, как в num&
, это подсказка типа символ, который сообщает компилятору num
, является Long
целым числом, следовательно, синтаксическая ошибка;num& num
так же незаконно, как и (42 17)
.