【问题标题】:VBA Error 13 Type MismatchVBA 错误 13 类型不匹配
【发布时间】:2016-06-21 23:56:58
【问题描述】:

我正在尝试将工作表中的一行单元格添加到用户窗体中的多列列表框中。工作表中的列数也各不相同。我不断收到错误“类型不匹配”。单步执行我的代码,我发现它出现在第一个 .AddItem 行。我发现您不能使用 .AddItem 添加多个项目。还有另一种方法可以做到这一点吗?我对vba很陌生。谢谢你的帮助!

Private Sub GenerateButton_Click()
  Dim i As Long, counter As Long, counter_RA As Long, x As Integer
  Dim LastColRA As Long, LastColCP As Long


  LastColRA = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column
  LastColCP = Sheet2.Cells(1, Columns.Count).End(xlToLeft).Column


  'Check to make sure that enough items were selected
  For x = 0 To ListBox2.ListCount - 1
    If ListBox2.Selected(x) Then
      counter_RA = counter_RA + 1
      With TabData.DataTable
        .AddItem Sheets(Sheet1).Range(Cells(x + 2, 1), Cells(x + 2, LastColRA)).Text
      End With
    End If
  Next x

  For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) Then
      counter = counter + 1
      With TabData.DataTable
        .AddItem Sheets(Sheet2).Range(Cells(i + 2, 1), Cells(i + 2, LastColCP)).Text
      End With
    End If
  Next i
End Sub

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    你有几个问题。首先,如果您使用多个单元格区域的Text 属性,它将返回Null,除非所有单元格都包含相同的文本。其次,正如您所注意到的,您不能使用 AddItem 一次性添加一个数组 - 您需要添加一个项目然后循环填充列,记住索引是从 0 开始的:

    With TabData.DataTable
       .AddItem
       For n = 1 to LastColRA
          .List(.ListCount - 1, n - 1) = Sheet1.Cells(x + 2, n).Value
       next n
    End With
    

    这是一个可以处理超过 10 列的版本:

    Dim i As Long, counter As Long, counter_RA As Long, x As Long
    Dim LastColRA As Long, LastColCP As Long
    Dim vList()
    
    
    LastColRA = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column
    LastColCP = Sheet2.Cells(1, Columns.Count).End(xlToLeft).Column
    
    
    'Check to make sure that enough items were selected
    For x = 0 To ListBox2.ListCount - 1
        If ListBox2.Selected(x) Then
            counter_RA = counter_RA + 1
            ReDim Preserve vList(1 To LastColRA, 1 To counter_RA)
            For i = 1 To LastColRA
                vList(i, counter_RA) = Sheet1.Cells(x + 2, i).Value
            Next i
        End If
    Next x
    For x = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(x) Then
            counter_RA = counter_RA + 1
            ReDim Preserve vList(1 To LastColRA, 1 To counter_RA)
            For i = 1 To LastColRA
                vList(i, counter_RA) = Sheet2.Cells(x + 2, i).Value
            Next i
        End If
    Next x
    
    With TabData.DataTable
        .ColumnCount = LastColRA
        .Column = vList
    End With
    

    【讨论】:

    • 非常感谢您的回复!我再次收到 .List 行的错误 13。
    • 你有多少列? AddItem 仅限 10 个。另外,您的单元格中是否有任何错误值?
    • 到目前为止,我正在处理 5 列。但在未来,我希望能够与更多人一起使用这个工具。没有错误值。所有列中都只有文本。再次感谢您的帮助。
    • 刚刚在代码中发现了一个愚蠢的错误 - 请尝试修改后的版本。我将提供一个版本,它可以在一分钟内处理超过 10 列。
    • 另一个问题。正如您在我的原始代码中看到的那样,我从两组单独的数据中提取并将它们放入一个列表中。我为这两组复制了您的代码。仅列出一组数据。单步执行,我可以看到它正确地通过了代码。我的猜测是它正在覆盖从第一组中提取的任何内容。这有意义吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多