我们需要将某些数据导出为另一种文件类型,并保留活动文档“ our-real-data.xlsx”。
自您提到以来,我整理了一个快速的VBA插件,该插件可导出为CSV。我尝试使用尽可能少的代码,以便新用户可以更轻松地理解它。
是什么
- 加载项询问将CSV保存在何处。默认文件夹是保存XLS的文件夹
- 外接程序会自动检测是否应使用逗号或分号作为区域系统设置的分隔符
- 当前活动的Excel工作表的所有值都将导出到以XLS文件命名的新CSV文件
- 现有的XLS不会受到任何影响
安装
- 下载加载项并将其保存到
C:\Users\%USERNAME%\AppData\Roaming\Microsoft\AddIns
- 打开Excel并在下激活它
- Excel 2003:菜单栏→工具→加载项
- Excel 2007:Excel选项→加载项→转到
- Excel 2010-13:“文件”选项卡→“选项”→“加载项”→“转到”
重新启动Excel并查看菜单栏
VBA代码
Function ExportCSV()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
ChDrive (ActiveWorkbook.Path)
ChDir (ActiveWorkbook.Path)
strName = fso.GetBaseName(ActiveWorkbook.Name)
On Error GoTo 0
strFilename = Application.GetSaveAsFilename(strName, "CSV Files,*.csv", 1)
delimiter = Application.International(xlListSeparator)
If Not strFilename = False Then
Open strFilename For Append As #1
For Each rngRow In ActiveSheet.UsedRange.Rows
arr2D = rngRow
arr1D = Application.Index(arr2D, 1, 0)
strRow = Join(arr1D, delimiter)
Print #1, strRow
Next
Close #1
End If
End Function
针对不同用户的自动更新
一旦每个用户在其Excel中启用了加载项(无法自动执行),您就可以.xla
通过网络共享,Robocopy或类似工具复制新文件版本。但这应该是一个单独的问题,因为有太多不同的方法可以解决此问题。
对于VBA爱好者来说,最有趣的部分是
arr2D = rngRow
arr1D = Application.Index(arr2D, 1, 0)
strRow = Join(arr1D, delimiter)
使用Join()函数将范围(在本例中为单行)转换为2D数组,然后转换为1D数组,最后转换为单个字符串