使用VBA代碼,怎樣將文件或者文件夾刪除到回收站呢?
RmDir語句、Kill語句以及FileSystemObject中的語句都會把文件或文件夾徹底刪除掉,沒有回旋余地。
答:有點復雜,因為需要借助于WindowsAPI來實現。下面是代碼:
‘API聲明
Declare FunctionSHFileOperation Lib “shell32.dll” Alias “SHFileOperationA”(lpFileOp As SHFILEOPSTRUCT) As Long
Type SHFILEOPSTRUCT
hwnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Boolean
hNameMappings As Long
lpszProgressTitle As String
End Type
Sub RecycleFile()
Dim FileOperation As SHFILEOPSTRUCT
Dim lReturn As Long
Dim sFileName As String
‘ ? Dim sFolder As String ‘聲明代表要刪除的文件夾字符串
sFileName = Application.GetOpenFilename(FileFilter:=”Excel工作簿,*.xls*”,Title:=”選擇要刪除的文件”)
Const FO_DELETE = &H3 ‘刪除pFrom所指定的文件或目錄
Const FOF_ALLOWUNDO = &H40 ‘可還原(若沒有FOF_ALLOWUNDO則不會放到回收站)
Const FOF_NOCONFIRMATION = &H10 ‘不顯示對話框直接放到回收站
With FileOperation
.wFunc = FO_DELETE
.pFrom = sFileName
‘.fFlags = FOF_ALLOWUNDO +FOF_NOCONFIRMATION ‘不顯示對話框直接刪除到回收站
.fFlags = FOF_ALLOWUNDO ‘顯示對話框讓用戶決定是否刪除到回收站
‘.fFlags = FOF_NOCONFIRMATION ‘不顯示對話框直接刪除
End With
lReturn = SHFileOperation(FileOperation)
End Sub
如果要刪除文件夾,可以設置變量sFolder為要刪除的文件夾路徑,然后將其賦值給pFrom。
上述代碼運行后,會顯示下圖所示的對話框,提示你選擇要刪除的文件。
在程序中,我們使用下面的語句來達到目的:
.fFlags = FOF_ALLOWUNDO ‘顯示對話框讓用戶決定是否刪除到回收站
如果希望不顯示提示對話框,而直接將文件刪除并放到回收站,則用下面的語句代替:
.fFlags = FOF_ALLOWUNDO + FOF_NOCONFIRMATION ‘不顯示對話框直接刪除到回收站
如果希望不顯示提示對話框,并徹底刪除,而不放入回收站,則用下面的語句代替:
.fFlags = FOF_NOCONFIRMATION ‘不顯示對話框直接刪除
看起來有點復雜,如果想深入研究,可以參閱關于Windows API介紹的相關資料。如果只是想在必要時使用這些代碼,則只需將上述代碼復制到自已的代碼模塊中,作一些微小調整即可。