【问题标题】:Copy >10 columns multicolumn listbox in Userform to array将用户窗体中> 10列的多列列表框复制到数组
【发布时间】:2019-02-21 12:36:06
【问题描述】:

我从几个论坛尝试了几种解决方案,但似乎没有任何帮助。

我很确定我犯了一些愚蠢的错误,解决方案就在我眼前,但我无法让它发挥作用。

我需要在一个包含 12 列的用户表单中填写一个 列表框。

据我所知,对于超过 10 列,不能再使用 .List(i) 属性,而必须使用数组来填充它。我的问题是每次我需要在listbox中插入一个新行,我需要将listbox中的项目复制到array中, redim array 增加一行,将新数据“插入”到这一新行中,最后,将 array 复制到 列表框。

我的代码如下:

iLine = lbPlanPreview.ListCount
ReDim arr(iLine, lbPlanPreview.ColumnCount - 1)

If iLine > 0 Then
    ReDim arr(0 To iLine - 1, lbPlanPreview.ColumnCount - 1)

    'Array Lines
    For iCur = 0 To iLine - 1
        'Array Columns
        For iCurAux = 0 To lbPlanPreview.ColumnCount - 1
            arr(iCur, iCurAux) = Me.lbPlanPreview.ListIndex(iCur, iCurAux)
        Next iCurAux
    Next iCur
End If

它总是给出类型不匹配的错误:

有什么想法吗?谢谢。

【问题讨论】:

  • 哪一行报错?
  • 嗨@BruceWayne,这条线:arr(iCur, iCurAux) = Me.lbPlanPreview.ListIndex(iCur, iCurAux)
  • 正如 OP 中正确提到的,.AddItem 方法在超过 10 列时失败。顺便说一句在下面的答案中正确使用List 函数:-;
  • ListBox.ListIndex 返回选中的项目。
  • 谢谢大家。它解决了它! :)

标签: arrays excel vba listbox userform


【解决方案1】:

正确的ListBox.List函数

认为您为恢复先前数据而进行的最后一个数组分配应如下所述,并且可能仅限于lbPlanPreview.ListCount - 1:

'Array Lines
 For iCur = 0 To lbPlanPreview.ListCount - 1    ' possibly instead of: ILine - 1
    'Array Columns
    For iCurAux = 0 To lbPlanPreview.ColumnCount - 1
        arr(iCur, iCurAux) = Me.lbPlanPreview.List(iCur, iCurAux)
    Next iCurAux
 Next iCur

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 2018-09-27
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多