2014-12-31 5 views
2

я рассмотрел этот вопрос/ответ здесь, прежде чем писать это: Declare and Initialize String Array in VBAVBA - Правильный метод инициализации массива со строкой?

Я пытаюсь понять, как правильно объявить и инициализировать массив без прибегая к типу данных VARIANT.

Это мой код, и он работает, как это:

Function MakeLegalFilename(legalname As String) As String 

Dim MyArray() As Variant 
Dim x As Integer 

MyArray = Array("<",">","?","@","%") 

For x = LBound(MyArray) To UBound(MyArray) 
    legalname = Replace(legalname, MyArray(x), "", 1) 
Next x 

MakeLegalFilename = legalname 

End Function 

Если я изменю «Вариант» в «String,» код не в MyArray = Array(... с несоответствием типа ошибки во время выполнения 13.

Если я определить размер массива, чтобы соответствовать количеству символов в строке (5 общих, но массив начинается с 0):

Dim MyArray(4) As String 
MyArray = Array("<",">","?","@","%") 

Теперь я получаю ошибку компиляции в MyArray = Array(..., что говорит: «Может» t назначить массив. "

Я знаю, что я мог бы объявить массив этого путь и сделать его работу (я проверил это так):

MyArray(0) = "<" 
MyArray(1) = ">" 
MyArray(2) = "?" 
... 
MyArray(4) = "%" 

Но если я кодирование в целом список символов (скажем, 20), то делать это громоздко, и, кроме того, я хотел бы знать, почему другой способ не работает, поскольку он предполагает, что у меня есть фундаментальное недоразумение. В этой самой основной форме, мой вопрос на самом деле, почему это не так:

Dim MyArray(4) As String 
MyArray = Array("<",">","?","@","%") 

Работает?

спасибо.

+0

отзыв http://stackoverflow.com/questions/19369132/declare-and-initialize-string-array-in-vba – Sorceri

+0

@Sorceri Я просмотрел эту ссылку, и это ссылка, которую я поставил в верхней части моего вопроса , Я посмотрел конкретно на комментарий @ Andez в верхнем ответе, где он, кажется, указывает «Dim MyArray() как String ... MyArray = Array (...», но это все еще не работает для меня. Что мне не хватает? – wackojacko1997

+0

Вот функция doc. To Array: http://msdn.microsoft.com/en-us/library/aa262675%28v=vs.60%29.aspx. Она возвращает вариант, содержащий массив, поэтому он будет работать только с Вариант – dee

ответ

3

Array возвращает вариант.

Таким образом, вы не можете использовать его, если у вас нет варианта.

Сплит может разделить строку.

Функция Split

Описание

Возвращает отсчитываемое от нуля, один одномерный массив, содержащий определенное количество подстрок.

Синтаксис

Split(expression[, delimiter[, limit[, compare]]]) 

Put запятые строки в раскол, содержащий ваши символы.

+0

Спасибо. Этот ответ адресовал мое недоразумение, что 'Array()' возвращает вариант (так или иначе, я пропустил этот момент до этого момента, когда мне говорят). дает решение, которое наиболее близко напоминает синтаксис, который я пытался использовать. Я ценю вашу помощь. – wackojacko1997

3

Используйте вспомогательную функцию:

Dim MyArray() As String 
MyArray = StrArray("<", ">", "?", "@", "%") 

... 
Public Function StrArray(ParamArray args() As Variant) As String() 
    Dim i As Long 
    ReDim temp(UBound(args)) As String 
    For i = 0 To UBound(args) 
     temp(i) = args(i) 
    Next 
    StrArray = temp 
End Function 
+1

приятное решение;) –

+0

@Alex K. Спасибо за предложение. Я бы не подумал (и вообще не слышал) использовать вспомогательную функцию. Для моих целей ответ Серенити помог мне больше всего, но я определенно благодарен за вашу готовность помочь мне. Спасибо. – wackojacko1997

+0

Также полезно иметь вспомогательные функции, которые могут преобразовывать существующий массив в массив определенного типа. Например. Преобразование Variant Array в String Array или Byte Array в длинный массив. – ThunderFrame

0

Для инициализации статического размера строки массива, используйте:

Dim MyArray(4) As String 
MyArray(0) = "<" 
MyArray(1) = ">" 
MyArray(2) = "?" 
MyArray(3) = "@" 
MyArray(4) = "%" 

Для инициализации динамического размера строки массива, используйте:

Dim MyArray() As String 
For i = 0 to 10 
    Redim Preserve MyArray(i) 'increase the size 
    MyArray(i) = Char(64 + i) 
Next 

За дополнительной информацией, пожалуйста, обращайтесь: http://msdn.microsoft.com/en-us/library/wak0wfyt.aspx

+0

Спасибо за ответ. Мне нравится ваш предложенный ответ, особенно предложение 'Char (64 + i). Я принял ответ @ Serenity, потому что это помогло мне лучше понять мое заблуждение, но я ценю вашу помощь. Спасибо. – wackojacko1997

+0

@ wackojacko1997, вы очень желанны и ... С Новым годом! –

Смежные вопросы