将用户输入从Excel单元格传递到数组

时间:2016-12-31 04:09:46

标签: vba excel-vba vbscript excel

我对VBA很新,所以如果这是一个非常简单的问题我会道歉。我试图将用户输入数据传递到数组中。实际上,4个不同的阵列。所有4个阵列最多可以有3个元素,但在任何给定时间只需要一个。然后通过For Loops以特定方式对它们进行排序,然后将sendkeys函数输出到活动窗口(在运行时不会出类拔萃)。我找到了for循环,它正在排序我需要它的方式。我只需要能够将用户输入到这些数组中,然后将它们输出到幻像键盘(即sendkeys)。我感谢任何帮助或建议!

仅供参考,我已经将数组声明为字符串,并将变量声明为... ...消息框只是测试排序,它们不是很重要

    For i = 0 To UBound(SheetPosition)
        If j = UBound(Position) Then
            j = 0
        End If
        For j = 0 To UBound(Position)
            If k = UBound(Direction) Then
                k = 0
            End If
            For k = 0 To UBound(Direction)
                If l = UBound(Temper) Then
                    l = 0
                End If
                For l = 0 To UBound(Temper)
                    MsgBox(i)
                    MsgBox(SheetPosition(i))
                    MsgBox(j)
                    MsgBox(Position(j))
                    MsgBox(k)
                    MsgBox(Direction(k))
                    MsgBox(l)
                    MsgBox(Temper(l))

                Next
            Next
        Next
    Next

3 个答案:

答案 0 :(得分:1)

您可以通过两种方式使用Application.InputBox()方法:

Dim myArray As Variant

myArray = Application.InputBox("List the values in the following format: " & vbCrLf & "{val1, val2, val3, ...}", Type:=64) '<--| this returns an array of 'Variant's

myArray = Split(Application.InputBox("List the values in the following format: " & vbCrLf & "val1, val2, val3, ...", Type:=2), ",") '<--| this returns an array of 'String's

答案 1 :(得分:0)

是的,您可以使用输入框获取用户的输入:

myValue = InputBox("Give me some input")

或表格,这是首选方法。不幸的是,表单需要一些时间来开发,并且最好通过Excel加载项进行部署,这也需要时间来学习如何设置。

这是一个使用SendKeys方法的好教程: http://www.contextures.com/excelvbasendkeys.html

答案 2 :(得分:0)

将数据从单元格转换为数组的常用方法是:

Dim SheetPosition As Variant
SheetPosition = Range("A1:A3").Value

或者

Dim SheetPosition As Variant
SheetPosition = Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row).Value

有几点需要注意:

  1. 数组需要标注为Variant

  2. 数组的维度将是行x列,因此在上面的第一个示例中,SheetPosition的尺寸为1 To 3, 1 To 1,而在第二个示例中,尺寸可能为{{1} }(如果A列中的最后一个非空单元格为1 To 5721, 1 To 1

  3. 如果您需要查找多维数组的维度,则应使用A5721查找第一维的上限,并使用UBound(SheetPosition, 1)查找上限。第二维。

  4. 即使您在代码模块的开头包含UBound(SheetPosition, 2),数组仍将使用下限1进行标注。

  5. 如果您想要一个单一维度的数组并且您的用户输入位于列中,则可以使用Option Base 0来实现此目的:

    Application.Transpose

    在这种情况下,Dim SheetPosition As Variant SheetPosition = Application.Transpose(Range("A1:A3").Value) 的尺寸标注为SheetPosition

    如果你想要一个单一尺寸的数组并且你的用户输入是连续的,你仍然可以使用1 To 3来实现这一目标,但你必须使用它两次:

    Application.Transpose

    FWIW - 问题中代码中的Dim SheetPosition As Variant SheetPosition = Application.Transpose(Application.Transpose(Range("A1:C1").Value)) 语句没有实现任何内容 - 无论如何,通过以下If语句将每个设置为0的变量设置为0 。所以你现有的代码可能是:

    For