【发布时间】:2022-01-23 07:40:42
【问题描述】:
我正在使用 Excel 中的表格,并希望将来自 3 个不相邻表格列的数据放入一个数组中。然后将该数组写入新工作簿的空白工作表中的 3 列 (A:C),并将其保存为文本文件。
当我的表格列彼此相邻并按照我需要的顺序排列时,以下代码可以完美运行(使用辅助列实现)。
Sub TblToTxtFile()
'PURPOSE: Create a txt file from the Excel table
Dim xWB As Workbook: Set xWB = ActiveWorkbook
Dim xNum As Long
Dim xArray As Variant
Dim xWBNew As Workbook
Dim xFileName As String: xFileName = xWB.Path & "\" & Left(xWB.Name, 6) & " Import.txt"
With xWB.Sheets("Entries").ListObjects("Entries Report")
xNum = .DataBodyRange.Rows.count
xArray = Union(.ListColumns("Account Number").DataBodyRange, .ListColumns("Amount2").DataBodyRange, .ListColumns("Item Description2").DataBodyRange).Value '2 in the column name indicates a helper column
End With
Set xWBNew = Workbooks.Add
With xWBNew.ActiveSheet
.Range("A1:A" & xNum).NumberFormat = "0" 'Keeps account number from being converted to scientific numbers
.Range("A1:C" & xNum) = xArray
End With
With xWBNew
.SaveAs FileName:=xFileName, FileFormat:=xlText, CreateBackup:=False
.Close savechanges:=False
End With
End Sub
不幸的是,在最终的项目中,重新排列或向表中添加辅助列是不可行的,因此我需要一个不需要更改原始表的解决方案。
当我尝试指示代码将数据从未更改的表(原始列的原始顺序)中提取到数组中时,结果是数组中的所有 3 列都填充了第一列中的数据。
您的建议将不胜感激。
【问题讨论】:
-
您可以编写一个函数,它接受多个参数,每个参数都是按列的范围,声明一个适当大小的输出数组,从提供的范围填充它,然后返回填充的数组。或者只是将源列一一复制到目标工作表(代码少,速度也不慢)
-
@TimWilliams,你能提供一个函数的例子,或者更好的是有没有办法让它成为子程序的一部分? (尝试自动化,因此在这种情况下复制粘贴不是理想的解决方案。)
-
我认为下面的答案就是我的建议——不是复制/粘贴,而是使用
.Value直接传输