BudVic
@BudVic
Начинающий программист

VBA Как сохранить значение оператора в массив на каждом шаге цикла?

Существует ли команда, которая сможет сохранять в массив значение sStr(i) на каждом шаге цикла, чтобы в результате в массиве avArr1 оказалось столько элементов, сколько шагов сделает цикл?

Dim sStr
Dim i, e
Dim avArr
Dim avArr1
sStr = Split(Me!ОрганРегУчета)
e = UBound(sStr)
i = 1
i = i + 1
Do
i = i + 1
???
Loop Until i = e
avArr = (sStr(1), s sStr(2))
avArr1 = ....
  • Вопрос задан
  • 4360 просмотров
Решения вопроса 1
BudVic
@BudVic Автор вопроса
Начинающий программист
Алексей Немиро, спасибо огромное за старание)) Решение задачи циклом:

Private Sub Кнопка()
Dim sStr() As String
sStr = Split(Me!Поле)
Dim avArr() As String
Dim i As Integer
For i = 3 To UBound(sStr) 'Где три начало отсчета'
If i = 3 Then 
ReDim avArr(0)
Else
ReDim Preserve avArr(UBound(avArr) + 1)
End If
avArr(UBound(avArr)) = sStr(i)
Next i
MsgBox Join(avArr, " ")
End Sub
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
honor8
@honor8
Принципы быстродействия VBA в описании
Надеюсь вы учитываете, что Me!ОрганРегУчета должен иметь тип String!
Вот простой вариант выполнения задания:

Option Explicit ' Обязательное объявление переменных
' чтобы избежать ошибок, и так удобнее пользоваться отладчиком
'123456789012345678901234567890123456h8nor@ya567890123456789012345678toster56789

Sub Save_in_avArr() ' Процедура сохранения в массив avArr
' значений из Me!ОрганРегУчета и присвоение массиву avArr1
' верхней границы массива avArr
  Dim i As Integer, avArr() As String, avArr1 As Variant
  
  ' По умолчанию функция Split использует разделитель "символ ПРОБЕЛ"
  avArr = Split(Me!ОрганРегУчета)
  ' Передаваемая строка Me!ОрганРегУчета стала массивом avArr
  ' Нижняя граница массива LBOUND(avArr) = 0
  
  ReDim avArr1(UBound(avArr)) ' Создаём массив avArr1 с верхней границей как у avArr
  ' Заполняем массив avArr1 от 0 до e (в вашем случае)
  For i = LBound(avArr1) To UBound(avArr1)
    ' ...
    ' avArr1(i) = i
  Next i
  
  ' Например, выводим на экран значения массива avArr1
  MsgBox "№ имеет значение: " & Join(avArr, vbCr & "№ имеет значение: ")
End Sub

Обратите внимание на объявление переменных:
' Иногда вместо объявления динамического массива текстового типа String
Dim avArr() As String
' Удобнее использовать универсальный тип переменной Variant
Dim avArr() As Variant
' Тогда в ходе выполнения можно удалить из массива, например, элементы с 0 по 2
ReDim Preserve avArr(3 To UBound(avArr))
' Примечание: в многомерных массивах изменять можно только последнюю размерность

' Важно! Если не объявлять динамический массив, а поместить его в тип переменной
Dim avArr As Variant
' то работа со значениями массива будет медленнее примерно в 18 раз
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы