VBA - 将列表框标题导出到工作表

VBA - 将列表框标题导出到工作表

问题:目标是从 ListBox1 导出数据,然后单独导出标题。数据导出正常,没有问题。标题引发运行时错误 13,类型不匹配。你们知道为什么吗?我该如何解决这个问题?

Private Sub ButtonSearchExport_Click()
    Dim wb As Workbook
    Set wb = ActiveWorkbook   '<<<< After export data, return to this original wb.
    With Workbooks.Add
        .Sheets(1).Range(Cells(2, 1), Cells(Me.ListBox1.ListCount, Me.ListBox1.ColumnCount)) = Me.ListBox1.List

 ''''''''<<<< The error is from the line here:
        .Sheets(1).Range(Cells(1, 1), Cells(Me.ListBox1.List(0), Me.ListBox1.ColumnCount)) = Me.ListBox1.List(0)

        Sheets(1).Name = "Transfer"
    End With
    wb.Activate
End Sub

答案1

您在第二次引用中使用了Me.ListBox1.List(0)行参数Cells,但List(0)它(可能?)不是数字。因此,这是一个改进:

.Sheets(1).Range(Cells(1, 1), Cells(1, Me.ListBox1.ColumnCount)) = Me.ListBox1.List(0)

但是现在您有了一个单元格区域(一维数组),并且List(0)只会返回第一行中的单个项目和第一列列表。所以这也行不通。

不幸的是,无法从属性中提取单行或单列List作为一维数组。您可以使用 获取单个单元格.List(row, column),也可以使用 获取整个数组.List。情况变得更糟:根本无法直接设置或获取使用 VBA 的列标题。它们总是来自属性ListBox中指定范围上方的单元格行。RowSourceListBox

幸运的是,这为您提供了一种简单(虽然有点迂回)的方法来访问列标题 - 只需查看作为数据来源的工作表单元格ListBox

Range(ListBox1.RowSource).Offset(-1, 0).Copy .Sheets(1).Range(Cells(1, 1), Cells(1, Me.ListBox1.ColumnCount))

请注意,如果从工作表顶部开始,这将不起作用RowSource- 如果存在这种可能性,您需要对其进行测试(我相信在这种情况下 ListBox 实际上会显示 Excel 列标题 - “列 A”,“列 B”等 - 作为列表框标题!)

相关内容