【问题标题】:VBA part of two dimensional Array into combobox.List二维数组的VBA部分放入combobox.List
【发布时间】:2017-03-03 11:03:42
【问题描述】:

在我的代码中,我通过 Variant queryResult 中的 SQL 查询二维数组得到。

queryResult = RetrieveRecordset("SELECT * FROM Materials;")

数组然后看起来像:

如果我尝试填满组合框

cbSTPScrewedMaterial.List = queryResult

它只填充值 1 和塑料,但我希望从塑料获取值到硬塑料 -> 上图中的 queryResult(1),但是当我输入时

cbSTPScrewedMaterial.List = queryResult(1)

VBA 回应我运行时错误 9:下标超出范围。 你知道我做错了什么以及如何解决吗?

【问题讨论】:

    标签: arrays vba excel combobox


    【解决方案1】:

    queryResult是一个2行5列的二维数组

    将您的组合框 ColumnCount 属性设置为 5

    cbSTPScrewedMaterial.ColumnCount = 5
    

    并全部显示

    此外,queryResult(1) 试图将二维数组作为一维数组访问,从而导致错误

    您可以使用函数从给定的二维数组行中返回一维数组,如下所示

    Option Explicit
    Function GetQueryRow(arr As Variant, iRow As Long) As Variant
        Dim j As Long
        ReDim arrRow(LBound(arr, 2) To UBound(arr, 2)) As Variant
    
        For j = LBound(arr, 2) To UBound(arr, 2)
            arrRow(j) = arr(iRow, j)
        Next j
        GetQueryRow = arrRow
    End Function
    

    使用如下:

    Dim queryResult As Variant
    Dim queryRow As Variant
    
    queryResult = RetrieveRecordset("SELECT * FROM Materials;")
    queryRow = GetQueryRow(queryResult, 1)
    

    或“直接”

    Dim queryRow As Variant
    
    queryRow = GetQueryRow(RetrieveRecordset("SELECT * FROM Materials;"), 1)
    

    甚至“更直接”

    MsgBox GetQueryRow(RetrieveRecordset("SELECT * FROM Materials;"), 1)(1)
    

    【讨论】:

    • 非常感谢,我已经将行视为列,将列视为行,这就是问题所在。谢谢:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多