Вам не нужно вложить эти циклы, чтобы скопировать их.Вы получаете переполнение, потому что у вас есть цикл Do
, из которого невозможно выйти:
For Each SelectedFile In .SelectedItems
Do Until SelectedFile = "" '<-- This will never be true.
myCount = myCount + 1
ReDim Preserve arFiles(1 To myCount)
arFiles(myCount) = SelectedFile
Loop
Next SelectedFile
Это будет увеличивать значение myCount
до тех пор, пока оно не переполнится.Учитывая, что размер массива всегда будет соответствовать количеству выбранных элементов, я бы предложил вместо этого использовать простой цикл For
.Измените размер массива один раз (, как предложил @TimWilliams ), затем просто используйте индексатор на SelectedItems
, чтобы скопировать их:
myCount = .SelectedItems.Count
If myCount > 0 Then
ReDim arFiles(1 To myCount)
Dim idx As Long
For idx = 1 To myCount
arFiles(idx) = .SelectedItems(idx)
Next
End If