2013-09-29 4 views
0

См. Конец для редактирования в ответ на комментарий PatricK.Перезапись и изменение размера массивов в Excel VBA

Извините, если это основной вопрос, но я искал здесь и на других сайтах и ​​не могу найти ответ.

Это мой первый набег на массивы VBA (я новичок в VBA в целом), и я борюсь с некоторым синтаксисом. Я пытаюсь прочитать некоторые данные (часть одного столбца) из рабочего листа в массив, выполнить некоторую обработку на нем, записать его на другой лист и затем переписать массив с некоторыми данными, считываемыми с первого листа. Один из ключевых моментов состоит в том, что количество точек данных, считанных на итерацию, будет меняться (например, 4 точки данных в первом цикле, 3 на втором, возможно ...), и поэтому размер массива также должен измениться.

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

Looping... 

Dim DataSubSet 

With ActiveWorkbook.Worksheets("Sheet1").Range("A" & CStr(I) & ":A" & CStr(io)) 
ReDim DataSubSet(1 To .Rows.Count, 1 To .Columns.Count) 
DataSubSet = .Range ("A" & CStr(I) & ":A" & CStr(io)) 
End With 

**Do processing** 

End loop 

Вот я и Ио переменные, которые определяют клетки, которые я заинтересован в; каждый из них меняется с помощью всеобъемлющего цикла.

Как я уже говорил, это работает только для первой итерации. Любые указатели на то, где я ошибся, будут оценены!

Спасибо заранее, Сэм

------------------------------------ -----------------------------------------------

PatricK, для дальнейшего уточнения, вот краткая рутина, которую я постучал, чтобы проиллюстрировать вашу мысль.

** проверка форматирования не удалась (все еще пишут по телефону), поэтому не позволял мне публиковать сообщения. Вот ссылка раздаточная в код в текстовом файле:

https://db.tt/E0btoI5f

+0

Hi Sam, массив автоматически изменяется при назначении его диапазону, поэтому строка 'ReDim' не нужна. Кроме того, попробуйте добавить '.Value' в строку назначения:' DataSubSet = .Range (...). Value'. Было бы полезно посмотреть, как обновлены 'io' и' I', вероятно, проблема там. – Ioannis

+0

Привет, loannis, спасибо за ваш комментарий. Я подтвердил, что я и io работают правильно. PatricK ниже (каким-то образом) сумел решить проблему, но спасибо в любом случае! – user2829257

ответ

0

Одной из возможных причин он работал когда-то, может быть, потому что «Do обработка» коды Активированный другую книгу. Также не знаете, почему вы используете 2D-массив для хранения значений массива 1D.

Но, пожалуйста, попробуйте:

Dim oWB as Workbook 
' Loop Start 

Set oWB = ActiveWorkbook 
'Or Set oWB = Workbooks("<workbook name you are trying to get the data from>")  
With oWB.Worksheets("Sheet1").Range("A" & i & ":A" & io) 
    ReDim DataSubSet(1 To .Rows.Count, 1 To .Columns.Count) 
    DataSubSet = .Value 
End With 

' Do Processing and finish loop above this line 
Set oWB = Nothing 

Тестовые данные в Sheet1:

TestData

Наблюдая переменную DataSubSet (я поставил i = 3 и io = 10):

WatchOutput

+0

PatricK, спасибо большое за вашу помощь, что решила проблему! К сожалению, я не совсем понимаю, почему и как.Я поставил бы быстрый ответ на вопрос ниже. Но еще раз спасибо, я в твоем долге! – user2829257

+0

О, и вы были совершенно правы в отношении размера массива – user2829257

+0

PatricK, я загрузил свой вопрос в виде текстового файла в папку Dropbox, связанную выше. благодаря – user2829257

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