【问题标题】:Variants / Iterating / VBA变体/迭代/ VBA
【发布时间】:2017-03-13 20:00:45
【问题描述】:

我正在尝试访问我通过 Excel 工作表上的范围创建的变体的元素。我的范围内的行数是动态的,基于“位置”表上的行数,所以我只需声明一个变体,然后将其设置为等于相关范围。我使用以 Loc 为前缀的 4 个变量来查找边界并在创建最终范围后设置变量。

但是,我无法重复多次尝试。我确信我遗漏了一些基本的东西,但尚未使 For Each 或 For LBound/UBound 结构适用于数组迭代。变体数据是数字和文本的混合体。

感谢您对我确信我缺少的简单/简单的事情的想法。我知道 for each 是只读的并且更喜欢读/写,但现在只是想确保我可以遍历这个数组 [真的,一个矩阵]

Sub Prefill_Work_Sub()
    ' Variables
    Dim LocRowStart As Range
    Dim LocRowEnd As Range
    Dim LocSheetRange As Range
    Dim EndColInt As Integer
    Dim LocationsVariant As Variant

    ' Ending Column Index Set
    EndColInt = 72

    ' First, make range of location sheet
    Set LocRowStart = Worksheets("Locations").Range("A2")
    Set LocRowEnd = Worksheets("Locations").Cells(Rows.Count, LocRowStart.Column).End(xlUp)
    Set LocColEnd = Worksheets("Locations").Cells(LocRowEnd.row, EndColInt)
    Set LocSheetRange = Worksheets("Locations").Range(LocRowStart, LocColEnd)
    Set LocationsVariant = LocSheetRange


    ' Verify the range address of the variant
    ' Debug.Print LocSheetRange.Address

    For i = LBound(LocationsVariant) To UBound(LocationsVariant)
        Debug.Print LocationsVariant(i, 1)
    Next i

    ' Let's try to iterate through variant for a sec
    ' Debug.Print LocationsVariant(1, 1)
    ' Debug.Print LocationsVariant(2, 1)


End Sub

【问题讨论】:

  • 您尚未为LocationsVariant 设置值。你的意思是给它分配一个范围的值吗?
  • @TimWilliams 我刚刚编辑并添加了该行。它在我的代码中,但在帖子中意外删除。因此,一旦我使用 lbound() / ubound() 遇到类型不匹配错误
  • 如果要获取二维数组,在赋值时不要使用Set。否则,您将创建另一个 Range 类型的变量
  • @TimWilliams Doh,谢谢。要是我尝试过就好了……感谢您的帮助。
  • 也不要忘记迭代你的值数组的二维。

标签: excel vba variant


【解决方案1】:

您将LocColEnd 设置为等于一个范围,然后将其作为列号参数传递给下一行的范围函数。但是列号参数需要是整数。

Set LocColEnd = Worksheets("Locations").Cells(LocRowEnd.row, EndColInt)
Set LocSheetRange = Worksheets("Locations").Range(LocRowStart, LocColEnd)

您有几个选项可以纠正此问题。最好的方法可能是只使用 EndColInt 作为列号参数,如下所示:

Set LocSheetRange = Worksheets("Locations").Range(LocRowStart, EndColInt)

这条线看起来也很可疑。我建议将 Row 属性附加到末尾,如下所示:

LocRowEnd = Worksheets("Locations").Cells(Rows.Count, LocRowStart.Column).End(xlUp).Row

【讨论】:

  • 修改了上面的代码,去掉了最后一行的 Set 关键字。
猜你喜欢
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-27
相关资源
最近更新 更多