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

1 ответ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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .