Como atualizar um arquivo CSV sempre que um valor de célula do Excel for alterado

0

Eu tenho um arquivo do Excel vinculado a um aplicativo que atualiza o arquivo algumas vezes por minuto. Gostaria de salvar o conteúdo do Excel (22 linhas de 5 colunas) em um arquivo CSV sempre que o conteúdo de uma célula específica (B22) for alterado. Ele sobrescreverá o arquivo CSV existente sempre que for atualizado, de modo que o CSV sempre represente o conteúdo mais recente do arquivo do Excel. Eu sou um iniciante no VBA, então qualquer orientação sobre como escrever uma macro para fazer isso seria bem-vinda. Obrigado

    
por DWT818 23.03.2018 / 15:40

1 resposta

1

A boa notícia é que o código que você deseja exportar como CSV está documentado em esta resposta .

Tudo o que você precisa fazer é chamá-lo de uma função que muda sempre que a planilha é alterada (que por acaso é chamada de Worksheet_Change ) e depois verificar se a alteração é B22.

Colocar os dois juntos fornece o seguinte código:

' 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

É importante notar que o nome da planilha ( Sheet1 ) e o nome do arquivo ( C:\tmp\test.csv ) são codificados. Se eu tivesse escrito isso, provavelmente passaria as duas como variáveis em ExportWorksheetAndSaveAsCSV .

    
por 23.03.2018 / 15:56