Создайте поле ввода в пользовательской форме Excel и используйте каждую строку в качестве записи в массиве - PullRequest
0 голосов
/ 10 сентября 2018

У меня проблемы с поиском примеров для этого конкретного вопроса. Я автоматизирую задачу в Excel, и мне нужно, чтобы пользователи вставляли список id-номеров в ареабокс. Когда они нажимают «ОК», мне нужен мой макрос, чтобы получить этот список в массиве, чтобы я мог циклически проходить через эти идентификаторы и работать с ними (я хочу проверить форматы, а затем вставить один раз в столбец в Excel)

Я попытался добавить RefEdit для пользовательской формы (многострочный true, полосы прокрутки обе) Я добавил это, чтобы запустить при нажатии ОК:

Dim data As Variant
Dim elemnt As Variant
data = Split(Simcards.simcardsArea.Text, vbNewLine)
For Each element In data
    MsgBox element
Next element

Есть ли лучший инструмент для этого использования? Или это путь? Мне нужно, чтобы пользователь мог вставить список идентификаторов из копии любой программы, Excel, блокнота, электронной почты, ..

Спасибо

1 Ответ

0 голосов
/ 10 сентября 2018
Option Explicit

Sub TestMe()

    Dim arrayRange As Range
    Set arrayRange = Application.InputBox("Enter a range", "Range:", Type:=8)

    Dim myArr As Variant
    Dim size As Long: size = arrayRange.Rows.Count - 1 
    ReDim myArr(size)

    Dim myCell As Range
    Dim myRow As Long: myRow = 0

    For myRow = 0 To size
        myArr(myRow) = arrayRange.Cells(myRow + 1, 1)
    Next

    Dim myVal As Variant
    For Each myVal In myArr
        Debug.Print myVal
    Next myVal

End Sub

Хитрость заключается в том, чтобы обратить внимание на то, как назначен массив. Идея состоит в том, что массив должен быть размером с номер строки в выбранной области, следовательно:

Dim size As Long: size = arrayRange.Rows.Count - 1
ReDim myArr(size)

-1 необходим, потому что массивы начинаются с 0, если кто-то не напишет Option Base 1 в верхней части нашего кода и не сломает все, на что мы надеялись. Поскольку массивы начинаются с 0, хорошо выполнить цикл следующим образом:

For myRow = 0 To size
    myArr(myRow) = arrayRange.Cells(myRow + 1, 1)
Next
...