
Programadores mais experientes sempre tiveram a mão uma função simples para exclusão de arquivos no VBA. A função Kill. A Macro abaixo exclui o arquivo no caminho informado:
Public Sub KillThem() Kill "C:\temp\delete.txt" End Sub |
Até aqui tudo bem. O inconveniente desta função é que o arquivo é definitivamente excluído, ou seja, não passa nem pela Lixeira. Em alguns casos isso pode até ser bom, em outros não, como por exemplo, selecionar um arquivo por engano.
Para isso, há uma pequena alternativa que seria a óbvia. Enviar o arquivo para a Lixeira. O código VBA abaixo permite a proeza:
Private Const FO_DELETE = &H3 Private Const FOF_ALLOWUNDO = &H40 Private Const FOF_NOCONFIRMATION = &H10 Private Type SHFILEOPSTRUCT hwnd As Long wFunc As Long pFrom As String pTo As String fFlags As Integer fAnyOperationsAborted As Long hNameMappings As Long lpszProgressTitle As Long End Type Private Declare Function SHFileOperation Lib _ "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long Public Function Exclui_Arquivo(CaminhoArquivo As String) As Boolean Dim shfo As SHFILEOPSTRUCT Dim lresult As Long With shfo .wFunc = FO_DELETE .pFrom = CaminhoArquivo .fFlags = FOF_ALLOWUNDO Or FOF_NOCONFIRMATION End With lresult = SHFileOperation(shfo) Exclui_Arquivo = CBool(lresult = 0) End Function Um exemplo de chamada à função seria: Public Sub Teste() Dim CaminhoArquivo As String CaminhoArquivo = "C:\temp\delete.txt" If Exclui_Arquivo(CaminhoArquivo) Then MsgBox "Arquivo " & CaminhoArquivo & " excluido com sucesso" Else MsgBox "Falha na exclusão do aquivo " & CaminhoArquivo End If End Sub |
É interessante notar que as constantes FOF_ALLOWUNDO e FOF_NOCONFIRMATION são utilizadas em cojunto. O resultado produzido é a efetivação da operação sem confirmação. Porém, se omitir o segundo, a caixa de confirmação de exclusão de arquivo padrão do Windows será mostrada. Experimento deixar somente o FOF_ALLOWUNDO e execute o código novamente.
Não entrarei em detalhes da função SHFileOperation e da Estrutura SHFILEOPSTRUCT. Ambas estão bem detalhadas na documentação oficial:
SHFileOperation Function
SHFILEOPSTRUCT Structure
Bom proveito!