我几个小时以来一直盯着这段代码,想知道为什么它没有表现。我需要一个理智的人来看看这个并告诉我哪里出错了,拜托。
我希望使用模式中的元素播种数组。我开始添加" x"到一行中的每个元素。除了第一个和最后一个
正如我所知道的那样,我已经省略了遍历数组行的循环,并且只在一个遍历列的循环上工作。
我想暂时将元素(0,0)留空,因为我会在其中放置一个名称,所以我在1开始循环到上限。
我想将模式作为字符串添加到行中的最后一个元素。
所以这应该生成7个元素: "",X,X,X,X,X,为XXXXX
我将数组0的大小设置为3和0到6,这样我每行有4行和7个元素
我在1开始循环,留下(0,0)空白,这意味着它应该循环6次,因为我要求它在ubound(1-5)下面加1" x"到元素(0,1)到(0,5)
当每个循环运行时,我应该连接" x"一起创造长串。
一切看似合乎逻辑。不起作用下面的代码输出: "",X,X,X,X,X,""
NumberOfPatterns = 3
PatternLoc = 6
ReDim PatternArray(0 To NumberOfPatterns, 0 To PatternLoc)
For j = 1 To UBound(PatternArray, 2) - 1
PatternArray(0, j) = "x" ' xxxxxx
PatternArray(0, PatternLoc) = PatternArray(0, PatternLoc) & PatternArray(0, j)
Next
请告诉我我错过了什么?
编辑:
为了回应它有效的注释,当我使用调试器观察循环时,似乎但是当我将数组粘贴到工作表时它不会
Sheets("Test1").Select
Set pasteDestination = Range("AX2")
pasteDestination.Resize(UBound(PatternArray, 1), UBound(PatternArray, 2)).Value = PatternArray
编辑2:
所以我找到了一个解决方法。但我还是不知道为什么!如果我向第二个维度添加+ 1,那么当我粘贴回到工作表时,它会正确粘贴...这是一个错误吗?
Sheets("Test1").Select
Set pasteDestination = Range("AX2")
pasteDestination.Resize(UBound(PatternArray, 1), UBound(PatternArray, 2) + 1).Value = PatternArray
答案 0 :(得分:0)
也许这个测试功能可以帮助您确定如何在VBA脚本中单步执行二维数组。每行都有一个字符值。
Public Sub TestArrLoop()
Dim NumberOfPatterns As Long
Dim PatternLoc As Long
Dim PatternArray() As String
Dim j As Long
Dim idx As Long
Dim str As String
NumberOfPatterns = 3
PatternLoc = 6
ReDim PatternArray(0 To NumberOfPatterns, 0 To PatternLoc) As String
For j = 0 To UBound(PatternArray, 1)
PatternArray(j, 0) = LCase(Chr(65 + j)) ' a,b,c,..
For idx = 1 To UBound(PatternArray, 2) - 1
PatternArray(j, idx) = Chr(65 + j) ' A,B,C,..
PatternArray(j, PatternLoc) = PatternArray(j, PatternLoc) & PatternArray(j, idx)
Next
Next
Debug.Print "Rows: " & LBound(PatternArray, 1) & "-" & UBound(PatternArray, 1) & ", Cols: " & LBound(PatternArray, 2) & "-" & UBound(PatternArray, 2)
For j = 0 To UBound(PatternArray, 1)
str = ""
For idx = 0 To UBound(PatternArray, 2)
If idx > 0 Then str = str & ","
str = str & PatternArray(j, idx)
Next
Debug.Print "Row " & j & ": " & str
Next
' Copy array to sheet, resize arguments are 1..n value
' it does not allow a value of 0.
Dim ws As Worksheet
Dim rRange As Range
Set ws = Application.Sheets("Sheet1")
'Set rRange = ws.Range(ws.Cells(14, 1), ws.Cells(14 + UBound(PatternArray, 1), 1 + UBound(PatternArray, 2)))
Set rRange = ws.Range("A14")
Set rRange = rRange.Resize(UBound(PatternArray, 1) + 1, UBound(PatternArray, 2) + 1)
rRange.Value = PatternArray
End Sub
VBA调试屏幕应显示此
Rows: 0-3, Cols: 0-6
Row 0: a,A,A,A,A,A,AAAAA
Row 1: b,B,B,B,B,B,BBBBB
Row 2: c,C,C,C,C,C,CCCCC
Row 3: d,D,D,D,D,D,DDDDD
修改添加了复制到工作表范围的数组