我有一个6-Worksheet excel电子表格,我想输出3张作为CSV。我找到了这个很棒的宏:Save each sheet in a workbook to separate CSV files
它做到了!我试图略微修改它,但我在VB上相当生疏,所以我很挣扎。如果有人能给我一些关于如何对这个宏进行修改的指示,那将是非常棒的:
目前,它将所有6张纸输出为CSV ...我只需要3张,我可以在这个例子中硬链接名称。我看到宏在Worksheets上循环并导出它,改变Worksheets数组包含的内容的最佳方法是什么?
此电子表格用于生成配置文件,因此在不同时间用于不同大小的批处理。在相关的工作表上,我将公式“填充”到100行...所以如果用于说10行,则需要从CSV的末尾删除90行逗号。这个数字是多变的......我在想,看看输入表(称为“数据”)并查看填充了多少行以确定要导出多少行是很好的。
查看现有的宏,我想将“EndRow”变量设置为“数据”表中最后一行,该行在列M中有一些东西。所以我需要遍历列,测试单元格中的内容然后更新变量,但如何选择工作表/列呢?
3)我可以将此宏应用于其中一张纸上的按钮吗?
答案 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)
解决了,在包含我想要导出的3张纸张的For循环中向Worksheets添加了一个数组:
For Each wsSheet In Worksheets(Array("UDP", "Users", "Unity"))
解决,将Endow从现有公式更改为(With之外):
EndRow = ThisWorkbook.Worksheets("Data").Range("M" & Rows.Count).End(xlUp).Row
链接abve解决了,感谢添加了CommandButton,效果很好。