У меня есть файл Excel, который связан с приложением, которое обновляет файл несколько раз в минуту. Я хотел бы сохранить содержимое Excel (22 строки по 5 столбцов) в файл CSV всякий раз, когда изменяется содержимое конкретной ячейки (B22). Он будет перезаписывать существующий файл CSV при каждом обновлении, так что CSV всегда представляет самое последнее содержимое файла Excel. Я новичок в VBA, поэтому любые рекомендации о том, как написать макрос для этого, будут приветствоваться. Спасибо
1 ответ
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
.