问题:目标是从 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
中指定范围上方的单元格行。RowSource
ListBox
幸运的是,这为您提供了一种简单(虽然有点迂回)的方法来访问列标题 - 只需查看作为数据来源的工作表单元格ListBox
:
Range(ListBox1.RowSource).Offset(-1, 0).Copy .Sheets(1).Range(Cells(1, 1), Cells(1, Me.ListBox1.ColumnCount))
请注意,如果从工作表顶部开始,这将不起作用RowSource
- 如果存在这种可能性,您需要对其进行测试(我相信在这种情况下 ListBox 实际上会显示 Excel 列标题 - “列 A”,“列 B”等 - 作为列表框标题!)