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
.