我来自Unix世界,我从来没有用VBA为Office开发一些东西,我现在必须做一些事情,我很难过!请帮我! :)
所以我有2个Excel表格(我们称之为Sheet1和Sheet2)和2个表格(Form1和Form2)来编辑/添加数据。
在Sheet1中,前两列是MovieId和MovieName。我们不知道他们将在这列中有多少行。 Form1控制Sheet1中的数据,以及Sheet2中的Form2 ....
在Form2初始化时,我想创建一个2维数组,它将类似于(MovieId1,MovieName1; MovieId2,MovieName2; ...,...; MovieIdN,MovieNameN),其中此数据是从Sheet1中提取的,如果你愿意的话就像Java中的某种地图......
如果它像:(0,“MovieId0; MovieName0”; 1,“MovieId1,MovieName1”; ...,“..”; N,“MovieIdN,MovieNameN”)
我不知道如何使用变量的最后一行编号创建数组,因为编译器似乎总是需要一个常量来初始化一个数组......
请赐教!
答案 0 :(得分:2)
查看Value
方法或Value2
属性 。
e.g。 Range("$A$2:$B$4").Value2(1,1)
要么
Range("$A$2:$B$4").Value()(1,1)
数组的下限从1开始
lbound(Range("$A$2:$B$4").Value2, 1)
- 行元素从
ubound(Range("$A$2:$B$4").Value2, 2)
- 行元素结束
lbound(Range("$A$2:$B$4").Value2, 2)
- 列元素从
ubound(Range("$A$2:$B$4").Value2, 2)
- 列元素结束
编辑:遍历数组的代码
Dim myAddress As String
Dim dataArray As Variant
Dim rowStart As Long, rowEnd As Long
Dim colStart As Long, colEnd As Long
Dim rowCtr As Long
Dim colCtr As Long
myAddress = "$A$2:$B$4"
dataArray = Range(myAddress).Value2
rowStart = LBound(dataArray, 1)
rowEnd = UBound(dataArray, 1)
colStart = LBound(dataArray, 2)
colEnd = UBound(dataArray, 2)
For rowCtr = rowStart To rowEnd
For colCtr = colStart To colEnd
Debug.Print rowCtr & ":" & colCtr, vbTab & dataArray(rowCtr, colCtr)
Next
Next
EDIT2:在我的例子中,我假设地址为$A$2:$B$4
您可以在其前面加上工作表名称。例如Sheet1!$A$2:$B$4
或Sheet2!$A$2:$B$4
在旁注中,可以动态定义数组(如果它是1维)。
例如dim my1DArray() as Integer
对于双维数组,请参阅以下代码
Dim myArray
Dim dynamicRows As Integer
dynamicRows = 2
ReDim myArray(0 To dynamicRows, 0 To dynamicRows)
myArray(0, 0) = "hello"
dynamicRows = 20
ReDim myArray(0 To dynamicRows, 0 To dynamicRows)
MsgBox myArray(0, 0)
myArray(0, 0) = "hello"
ReDim Preserve myArray(0 To dynamicRows, 0 To dynamicRows)
MsgBox myArray(0, 0)
答案 1 :(得分:1)
而是使用Range对象,您也可以使用工作表中的UsedRange
Sub Macro1()
Dim sheet As Worksheet
Dim range As range
Dim row As Integer
Set sheet = Worksheets("Sheet1")
Set range = sheet.UsedRange
For row = 1 To range.Rows.Count
Next row
End Sub
答案 2 :(得分:0)
假设数据在A1
中开始Dim vArr as variant
vArr =工作表( “工作表Sheet”)。范围( “A1”)。调整(工作表( “工作表Sheet”)。范围( “A65535”)。端部(xlup).row,2)
答案 3 :(得分:0)
你的意思是:
Dim thearray() As Variant
ReDim thearray(1, range.Rows.Count)
您还可以使用记录集和GetRows从工作表中返回数组。
答案 4 :(得分:0)
查尔斯回答的轻微模式:
Dim vArr作为变体 vArr =工作表(“Sheet1”)。范围(“A1”)。CurrentRegion.Value
当然假设Sheet1中没有任何杂散数据。