在Excel用户窗体中创建输入区域框,并将每行用作数组中的条目

时间:2018-09-10 08:41:42

标签: arrays excel vba excel-vba userform

我很难找到有关此特定问题的示例。 我正在Excel中自动执行一项任务,我需要用户将ID号列表粘贴到Areabox中。当他们单击确定时,我需要我的宏才能在数组中获取此列表,以便我可以遍历这些ID并与它们一起使用(我想检查格式,然后将正确的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,记事本,电子邮件等的副本中粘贴ID列表。

谢谢

1 个答案:

答案 0 :(得分:0)

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