我对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
答案 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
有几点需要注意:
数组需要标注为Variant
。
数组的维度将是行x列,因此在上面的第一个示例中,SheetPosition
的尺寸为1 To 3, 1 To 1
,而在第二个示例中,尺寸可能为{{1} }(如果A列中的最后一个非空单元格为1 To 5721, 1 To 1
)
如果您需要查找多维数组的维度,则应使用A5721
查找第一维的上限,并使用UBound(SheetPosition, 1)
查找上限。第二维。
即使您在代码模块的开头包含UBound(SheetPosition, 2)
,数组仍将使用下限1进行标注。
如果您想要一个单一维度的数组并且您的用户输入位于列中,则可以使用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