列标题数组

我试图将所有列标题存储在一个数组中,然后用该数组填充UserForm。这将允许不同的标题充当以后代码的列选择。但是,我似乎无法正确分配数组

我尝试了不同的循环结构,但继续遇到“下标超出范围”错误

Option Explicit

Sub Audit_Template_Autofill()

    Dim column_id() As Variant,A1 As Range,z As Range,c As Range
    Dim x As Long,column_count As Long

    Set A1 = Range("A1")

    Set z = A1.End(xlToRight).Offset(0,1)

    column_count = Range(A1,z).Count 

    x = 0
    For Each c In Range(A1,z)
         column_id(x) = c.Value
         x = x + 1
    Next c
End sub

我本来是使用

测试分配的
For each c in range(A1,z)
     debug.print = c.value
next c

准确地打印了我所有的标题,我似乎无法正确地将它们分配到数组中。我为代码不是太干净表示歉意,这更多是在更大模型中实施的测试工作。我以前做过这种循环,但似乎无法回忆起我是如何编写的。 谢谢!

wwz1989 回答:列标题数组

将标题分配给数组

最简单的方法是

  • [1]通过将范围的值分配给headers来创建(基于1的)二维数组
  • [2]通过双重转置使其成为“扁平” 1维数组(也是基于1的数组);    (请注意,ReDim Preserve不可能做到这一点,它只能重新定义最后一个维度(这里是2维),而不能“删除”维)。

顺便说一句,您的原始代码缺少ReDim column_id(0 To …),然后再开始执行循环分配以使其“工作” ;此外,变量x会通过声明自动默认为0。建议完全限定范围引用等。

Sub Columns2Array()
Dim headers() As Variant
  ' [1] create a (1-based) 2-dimensional array by assigning a range's value to headers
    headers = Sheet1.Range("A1:" & Sheet1.Range("A1").End(xlToRight).Address)
  ' [2] make it a "flat" 1-dim array (btw 1-based,too) via double transposition
    headers = Application.Transpose(Application.Transpose(headers))

  ' a) test headers items by one code line
    Debug.Print Join(headers,",")
  ' b) test headers via loop
    Dim colNo&
    For colNo = LBound(headers) To UBound(headers)
        Debug.Print "headers(" & colNo & ") = ",headers(colNo)
    Next colNo
End Sub
本文链接:https://www.f2er.com/3164278.html

大家都在问