Создайте поле области ввода в пользовательской форме excel и используйте каждую строку как запись в массиве

Мне сложно найти примеры для этого конкретного вопроса. Я автоматизирую задачу в Excel, и мне нужно, чтобы пользователи вставили список идентификаторов в ареабокс. Когда они нажимают ОК, мне нужен мой макрос, чтобы получить этот список в массиве, чтобы я мог перебирать эти идентификаторы и работать с ними (я хочу проверить форматы, а затем вставить правильный один раз в столбец в 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, блокнота, электронной почты и т. д.

Спасибо

Excel обычно удаляет Chr (13) из vbCRLF, оставляя только Chr (10), но я иногда видел, что он пропускает некоторые из них. Вероятно, лучше всего заменить все vbcrlf на vblf, а затем разделить на vblf, или вы можете получить мошеннические символы Chr (13) после разделения чего-то, разделенного vbcrlf на vblf ..

user4039065 10.09.2018 10:58
1
1
26
1

Ответы 1

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

Другие вопросы по теме