2017-01-01 3 views
-1

Я делаю петлю для каждой строки в массиве таким образом, чтоМассив 600+ строк в Excel VBA

filename = Array(file1,file2.....file600) 

Однако VBA получает ошибку компиляции, которая из-за решетки, 8 линий. Насколько я знаю, он только позволяет 1 линия

(ошибка говорит ожидается, список или разделитель)

Я новичок в VBA жалкого

+0

являются 'file1',' file2' ..., определенные как 'String', или они просто текст? –

+0

Просьба заполнить полный код, чтобы узнать, где произошла ошибка компиляции. – Parfait

+0

избежать новых строк с помощью '_' или сохранить имена файлов на скрытом листе и прочитать их в виде массива? http://stackoverflow.com/questions/8303821/if-statement-with-multiple-lines – Orphid

ответ

2

Вы можете избежать новых линий в VBA с _.

поэтому ваше решение может выглядеть

filename = Array("file1", _ 
    "file2", _ 
    "file3") 

См How to break long string to multiple lines и If Statement With Multiple Lines

Если у вас есть 100 имен, однако, вы могли бы быть лучше хранить их в листе и читать их, а чем их жесткое кодирование.

+0

Хорошо, спасибо! По крайней мере, я знаю свои варианты сейчас! – Lucas

+0

Хотя решение Orphid может сработать для вас, возможно, вам стоит взглянуть более подробно на ваш дизайн, требуя инициализации массива с 600 элементами в одном заявлении ... – nabuchodonossor

+0

@nabuchodonossor является правильным. Lucas показывает пример фактического содержимого ваших 600 строк – user3598756

0

Если вы string s в массиве быть на самом деле «работоспособна» после шаблона (например, в соответствии с вашими примерами: «file1», «file2», ..., «file600»), то вы могли бы определить Function они для вас, как следует:

Function GetFileNames(nFiles As Long) As String()    
    Dim iFile As Long 
    ReDim filenames(1 To nFiles) As String 

    For iFile = 1 To nFiles 
     filenames(iFile) = "file" & iFile 
    Next 
    GetFileNames = filenames 
End Function 

, который вы назвали бы в «основной» код следующим

Sub main() 
    Dim filenames() As String 

    filenames = GetFileNames(600) '<--| this way'filenames' array gets filled with 600 hundred values like "file1", "file2" and so on 
End Sub 
+0

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

0

объем кода, который может быть загружен I до формы, класса или стандартного модуля ограничено 65534 строками. Одна строка кода может содержать до 1023 байта. До 256 пробелов может предшествовать фактическому тексту в одной строке, и не более двадцати четырех символов продолжения строки (_) могут быть включены в одну логическую строку.

Из справки VB6.

0

При программировании вы не строите массив, этот большой человек, никогда.

либо хранить каждый многострочный-нить внутри клетки, и в конце концов вы Buid массив так:

option Explicit 

Sub ArrayBuild() 
Dim Filenames() 'as variant , and yes i presume when using multi files, the variable name should have an "s" 
With Thisworkbook.sheets("temp") 'or other name of sheet 
    Max = .cells(.rows.count,1).end(xlup).row '=max number of rows in column 1 
    Filenames = .range(.cells(1,1) , .cells(Max,1)).value2 ' this example uses a one column range from a1 to a[max] , but you could also use a multi column by changing the second .cells to `.cells(Max, ColMax)` 
end with 

'do stuff 

erase Filenames 'free memory 
End Sub 

Другим способом является создание массива, как вы строите дом, добавив один кирпич в то время, как это:

Dim Filenames() as string 'this time you can declare as string, but not in the previous example 
Dim i& 'counter 
For i=1 to Max 'same max as in previous example, adapt code plz... 
    redim Preserve Filenames (1 to ubound(filenames)+1) 'this is an example for unknown size array wich grows, but in your case you know the size (here Max, so you could declare it `Dim Filenames (1 to Max)` from the start, just wanted to show every option here. 
    Filenames(i) = Cells (i,1).value2 'for example, but can be anything else. Also i'm beeing lazy and did not reference the cell to its sheet, wich i'd never do in actual coding... 
next i 

EDIT я сделал перечитайте свой вопрос, и это еще проще (в основном потому, что вы в bracets опущен в вашем посте и исправить его в качестве комментария ...), используйте user3598756 's code plz. Я думал, что File1 является переменной, когда она должна быть записана как "File1".

EDIT 2 зачем нужно строить и массивы, где Filename (x) = «Filex»? вы знаете результат заранее