如何让VBA文档自生成副本及CSV文件打开时自动创建副本?
VBA 相关问题解决方案
问题1:让VBA文档每次打开时在指定文件夹生成自身副本
要实现该功能,需在ThisWorkbook模块中编写Workbook_Open事件代码,借助SaveCopyAs方法创建副本:
Private Sub Workbook_Open() ' 指定副本保存路径与文件名,替换为你的目标文件夹 Dim copyPath As String copyPath = "C:\目标文件夹\工作簿副本_" & Format(Now(), "YYYYMMDD_HHMMSS") & ".xlsm" ' 检查目标文件夹是否存在,不存在则创建 Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") If Not fso.FolderExists("C:\目标文件夹") Then fso.CreateFolder "C:\目标文件夹" End If ' 生成工作簿副本 ThisWorkbook.SaveCopyAs copyPath End Sub
- 保存工作簿时需选择启用宏的格式(.xlsm/.xlsb),否则事件代码无法运行
- 确保目标文件夹具备写入权限,避免权限不足报错
问题2:写入users.csv后生成其副本
你的原代码负责向users.csv写入内容,无需修改原有Open/Close逻辑(错误修改打开模式会导致文件占用或程序崩溃),只需在关闭文件后调用FileCopy方法完成副本生成:
修改后的完整代码:
Sub ExportAndCopyCSV() Dim sourcePath As String Dim copyPath As String ' 原CSV文件路径 sourcePath = "C:\raspbbbb\users.csv" ' 副本路径,可自定义文件名与保存位置 copyPath = "C:\raspbbbb\users_副本_" & Format(Now(), "YYYYMMDD_HHMMSS") & ".csv" ' 写入CSV内容(保留原逻辑) Open sourcePath For Output As #1 i = 2 Do While Cells(i, 1) <> "" myStr = "" For j = 9 To 10 myStr = myStr & Cells(i, j) & "; " Next Print #1, myStr i = i + 1 Loop Close #1 ' 必须先关闭原文件,释放占用后才能复制 ' 生成CSV副本 FileCopy sourcePath, copyPath End Sub
- 必须先执行
Close #1释放文件锁,否则FileCopy会因文件被占用失败 - 添加时间戳是为了避免副本重名覆盖,可根据需求调整命名规则
内容的提问来源于stack exchange,提问作者Edmund
相关产品推荐
相关产品推荐

