【问题标题】:Listbox subscript out of range excel vba列表框下标超出范围excel vba
【发布时间】:2017-10-11 04:28:01
【问题描述】:

我正在尝试拆分列表框中的项目,以便我只显示到第一个换行符,但似乎下标超出范围,我无法查明错误。

Private Sub DisplayTasksInListView()
    Dim i As Integer
    Dim taskList As Variant
    Dim taskItem As Variant

    With ListBoxTask
      ListBoxTask.Clear
      taskList = ActiveSheet.Range("B3:B5")
      For Each taskItem In taskList
        ListBoxTask.AddItem Split(taskItem, Chr(10))(0)
      Next taskItem
    End With
End Sub

【问题讨论】:

  • 确保关闭子:End Sub
  • 嗨,我确实关闭了原始代码中的子代码,只是我忘记包含在这篇文章中
  • 您在数据类型上玩得很输。 taskitem 是您分配给变体的范围。然后,您打算获取该范围的默认属性 Value 并将其拆分。尝试指定 Value 属性,以便 Excel 可以知道您并不是要拆分范围对象。但是,Value 属性可以是 Split 函数所需的字符串。当然,列表框也需要一个字符串,而不是一个变体。我怀疑一旦您在代码中添加一点精度,错误就会消失。

标签: vba excel split listbox


【解决方案1】:

进一步向@Variatus 建议 - 如果您使用正确的数据类型创建变量,那么您的代码基本上是可以的。 taskListtaskItem 应该是 Range 类型。对于一个单元格,您可以显式引用该RangeValue 属性并将其传递给Split

我还添加了一种通过名称获取ListBox 的方法,而不是直接引用它。如果需要,这将使您的代码模块化变得更加容易。

Option Explicit

Sub FillListBox()

    Dim ws As Worksheet
    Dim rngTaskList As Range
    Dim rngTaskItem As Range
    Dim lstTasks As MSForms.ListBox

    Set ws = ThisWorkbook.Worksheets("Sheet1") '<-- change for your sheet
    Set rngTaskList = ws.Range("B1:B5") '<-- change for your range
    Set lstTasks = ws.OLEObjects("ListBox1").Object.Value '<-- change for your listbox name

    With lstTasks
        .Clear
        For Each rngTaskItem In rngTaskList
            .AddItem Split(rngTaskItem.Value, vbLf)(0)
        Next rngTaskItem
    End With

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多