【问题标题】:Create an Input Area Box in an Excel Userform and Use each line as an entry in an array在 Excel 用户窗体中创建一个输入区域框并将每一行用作数组中的一个条目
【发布时间】:2019-02-14 15:57:34
【问题描述】:

我很难找到这个特定问题的示例。 我在 Excel 中自动执行一项任务,我需要用户将 ID 编号列表粘贴到区域框中。当他们点击确定时,我需要我的宏在数组中获取这个列表,这样我就可以遍历这些 id 并使用它们(我想检查格式,然后将正确的一次粘贴到 Excel 的列中)

我尝试在用户窗体上添加了一个 RefEdit,(多行,滚动条) 我添加了这个,当点击确定时启动:

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 列表......

谢谢

【问题讨论】:

  • Excel 通常会从 vbCRLF 中删除 Chr(13),只留下 Chr(10),但我看到它偶尔会错过一些。可能最好用 vblf 替换所有 vbcrlf,然后在 vblf 上拆分,否则在 vblf 上拆分以 vbcrlf 分隔的内容后,您可能会得到流氓 Chr(13) 字符..

标签: arrays vba excel userform


【解决方案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

【讨论】:

    猜你喜欢
    • 2014-09-30
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多