VBA数组循环未使用最后一个元素

标记

我已经盯着这个代码几个小时了,想知道为什么它没有表现出来。我需要一个理智的人看看这个,并告诉我我要去哪里错了。

我正在寻找种子与模式中的元素的数组。我已经开始在一行中的每个元素上添加一个“ 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 (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
霍姆

也许此测试功能可以帮助您确定如何在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

编辑添加了复制到工作表范围的数组

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我只能在while循环之外获取数组的最后一个元素

在PHP中使用foreach循环时查找数组的最后一个元素

.push在循环中创建的数组是正确的长度,但仅在重复时推送最后一个元素

带for循环的Javascript数组,仅返回最后一个元素

循环JavaScript会跳过最后一个元素

在React中使用map返回一个等于最后一个元素的数组

使... of跳过循环的最后一个元素

数组的最后一个元素

如何使用for循环返回列表的最后一个元素

foreach循环仅输出数组中的最后一个元素

当与循环一起使用时,Ansible列表concat仅包含最后一个元素

每个循环中只有数组的最后一个元素被连接

JavaScript执行循环,但仅查看数组中最后一个元素的结果

将类“ last”添加到while循环中数组的最后一个元素

将for循环结果添加到数组,并在最后一个循环之后显示已添加元素的总和

循环仅显示最后一个数组元素ActionScript3

数组最后一个元素未打印

C:使用列表的数组的最后一个元素

对于仅影响数组最后一个元素的循环,我希望我的代码对数组的每个元素起作用

最后一个元素未在循环中删除

在一个循环中,所有数组元素都获得最后一个的值

数组填充了最后一个元素

一旦数组中的最后一个元素满足条件,如何使循环结束?

Fortran 数组的最后一个元素

嵌套循环:最后一个循环总是返回最后一个数组对象

如何使用递归找到数组的最后一个元素?

如何使用解构获取数组的最后一个元素

使用循环从数组中删除了第一个元素,但最后一个元素在 Javascript 中存储为“未定义”

使用列表的最后一个元素直到循环完成