从excel将工作表保存为CSV

时间:2011-08-05 00:04:14

标签: excel excel-vba csv vba

我有一个6-Worksheet excel电子表格,我想输出3张作为CSV。我找到了这个很棒的宏:Save each sheet in a workbook to separate CSV files

它做到了!我试图略微修改它,但我在VB上相当生疏,所以我很挣扎。如果有人能给我一些关于如何对这个宏进行修改的指示,那将是非常棒的:

  1. 目前,它将所有6张纸输出为CSV ...我只需要3张,我可以在这个例子中硬链接名称。我看到宏在Worksheets上循环并导出它,改变Worksheets数组包含的内容的最佳方法是什么?

  2. 此电子表格用于生成配置文件,因此在不同时间用于不同大小的批处理。在相关的工作表上,我将公式“填充”到100行...所以如果用于说10行,则需要从CSV的末尾删除90行逗号。这个数字是多变的......我在想,看看输入表(称为“数据”)并查看填充了多少行以确定要导出多少行是很好的。

  3. 查看现有的宏,我想将“EndRow”变量设置为“数据”表中最后一行,该行在列M中有一些东西。所以我需要遍历列,测试单元格中的内容然后更新变量,但如何选择工作表/列呢?

    3)我可以将此宏应用于其中一张纸上的按钮吗?

2 个答案:

答案 0 :(得分:1)

1)当它遍历工作表时,你可以在那时用msgbox提示用户“你想要导出吗?如果他们选择'是',那么它将导出。如果他们选择'否',它将跳过它并转到下一页:

For Each wsSheet In Worksheets
    wsSheet.Activate
    If MsgBox("Do you want to export " & wsSheet.Name & " ?", vbYesNo) = vbYes Then
        'User has selected to export that sheet
        nFileNum = FreeFile
        Open csvPath & "\" & _
          wsSheet.Name & ".csv" For Output As #nFileNum
        ExportToTextFile CStr(nFileNum), Sep, False
        Close nFileNum
    End If
Next wsSheet

2)如果其中没有数据,当前显示的空行是什么?你能发布这100行的公式吗?

3)你确定可以。以下是一些很好的网站,你可以从中学到:

答案 1 :(得分:1)

  1. 解决了,在包含我想要导出的3张纸张的For循环中向Worksheets添加了一个数组:

    For Each wsSheet In Worksheets(Array("UDP", "Users", "Unity")) 
    
  2. 解决,将Endow从现有公式更改为(With之外):

    EndRow = ThisWorkbook.Worksheets("Data").Range("M" & Rows.Count).End(xlUp).Row 
    
  3. 链接abve解决了,感谢添加了CommandButton,效果很好。