从表导出到CSV,非顺序列

时间:2018-03-21 20:17:58

标签: excel vba excel-vba

我正在尝试编写VBA宏以将表的内容导出到csv文件。我想只包括某些列而忽略所有其他列。我的代码适用于单个列(在下面的情况下为col_a),但在尝试导出多个列时失败(例如col_acol_c)。

Sub saveTableToCSV()

    Dim tbl As ListObject
    Dim csvFilePath As String
    Dim fNum As Integer
    Dim tblArr
    Dim rowArr
    Dim csvVal

    Set tbl = Worksheets("primary").ListObjects("main")
    csvFilePath = "C:\Users\USERNAME\Downloads\testsheet.csv"

    Application.DisplayAlerts = False
    tblArr = Range("main[[col_a]]").Value

    fNum = FreeFile()
    Open csvFilePath For Output As #fNum
    For i = 1 To UBound(tblArr)
        rowArr = Application.Index(tblArr, i, 0)
        csvVal = VBA.Join(rowArr, ",")
        Print #1, csvVal
    Next
    Application.DisplayAlerts = False

    Close #fNum
    Set tblArr = Nothing
    Set rowArr = Nothing
    Set csvVal = Nothing
End Sub

我的数据示例如下。表名为“main”,工作表名称为“primary”:

-------------------------
| col_a | col_b | col_c |
-------------------------
|   1   |   2   |   3   |
|   4   |   5   |   6   |
-------------------------

我想要的输出是一个csv文件,如下所示:

a,c
1,3
4,6

有谁可以指出我做错了什么?感谢。

1 个答案:

答案 0 :(得分:4)

替换该行

tblArr = Range("main[[col_a]]").Value

这两行

    tblArr = tbl.DataBodyRange.Value
    tblArr = Application.Index(tblArr, Evaluate("ROW(1:" & UBound(tblArr) & ")"), [{1,3}])