我有一个 Excel 文件,它链接到一个应用程序,该应用程序每分钟更新该文件几次。每当特定单元格 (B22) 的内容发生变化时,我想将 Excel 内容(22 行 5 列)保存到 CSV 文件中。每次更新时,它都会覆盖现有的 CSV 文件,以便 CSV 始终代表 Excel 文件的最新内容。我是 VBA 的初学者,因此欢迎任何有关如何编写宏来执行此操作的指导。谢谢
答案1
好消息是,您要导出为 CSV 的代码已记录在这个答案。
您需要做的就是从一个函数中调用它,该函数在工作表发生变化时也会发生变化(恰好被称为Worksheet_Change
),然后检查变化是否为 B22。
将两者放在一起会得到以下代码:
' Worksheet_Change
' Called whenever a change is made to a cell in a worksheet
Private Sub Worksheet_Change(ByVal Target As Range)
' Check if cell B22 has been changed
If Not Application.Intersect(Range("B22"), Range(Target.Address)) Is Nothing Then
' It has changed
Call ExportWorksheetAndSaveAsCSV
End If
End Sub
' ExportWorksheetAndSaveAsCSV
' Saves the contents of Sheet1 to a CSV file in c:\tmp\test.csv
' If the file already exists, it will be silently overwritten
Public Sub ExportWorksheetAndSaveAsCSV()
Dim wbkExport As Workbook
Dim shtToExport As Worksheet
Set shtToExport = ThisWorkbook.Worksheets("Sheet1") 'Sheet to export as CSV
Set wbkExport = Application.Workbooks.Add
shtToExport.Copy Before:=wbkExport.Worksheets(wbkExport.Worksheets.Count)
Application.DisplayAlerts = False 'Possibly overwrite without asking
wbkExport.SaveAs Filename:="C:\tmp\test.csv", FileFormat:=xlCSV
Application.DisplayAlerts = True
wbkExport.Close SaveChanges:=False
End Sub
值得注意的是,工作表名称 ( Sheet1
) 和文件名 ( C:\tmp\test.csv
) 是硬编码的。如果我写了这个,我可能会将这两个都作为变量传递到ExportWorksheetAndSaveAsCSV
。