如何在 Excel 单元格值发生变化时更新 CSV 文件

如何在 Excel 单元格值发生变化时更新 CSV 文件

我有一个 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

相关内容