VBA将文件移动到回收站

Kill是直接删除,回收站找不到文件。
因为 VBA 本身没有直接操作回收站的内置方法。

方法一(Shell.Application)通过创建Shell.Application对象,调用其Namespace(10).MoveHere方法(Namespace(10)对应系统回收站),本质是模拟 Windows 资源管理器的操作,属于COM 组件调用。

Sub 移动文件到回收站()
    Set xShell = CreateObject("Shell.Application")
    fpath = "C:\Users\Administrator\Desktop\客户收款.zip" '指定文件<包括路径>
    Call xShell.Namespace(10).MoveHere(fpath)
End Sub

方法二(SHFileOperation API)直接调用 Windows 系统 API 函数SHFileOperation(shell32.dll),通过配置结构体参数指定删除操作并允许撤销(FOF_ALLOWUNDO),属于底层系统接口调用。

Option Explicit

' 声明Windows API函数(用于将文件移至回收站)
Private Declare PtrSafe Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long

' 定义API所需的结构体
Private Type SHFILEOPSTRUCT
    hwnd As LongPtr          ' 窗口句柄(可设为0)
    wFunc As Long            ' 操作类型(FO_DELETE=3表示删除)
    pFrom As String          ' 源文件路径(必须以双null结尾)
    pTo As String            ' 目标路径(删除操作时可为空)
    fFlags As Integer        ' 操作标志(FOF_ALLOWUNDO=&H40表示允许撤销,即移至回收站)
    fAnyOperationsAborted As Long
    hNameMappings As LongPtr
    lpszProgressTitle As String
End Type

' 移动文件到回收站的函数
Public Function MoveFileToRecycleBin(filePath As String) As Boolean
    Dim fileOp As SHFILEOPSTRUCT
    Dim result As Long
    
    ' 检查文件是否存在
    If Dir(filePath) = "" Then
        MoveFileToRecycleBin = False
        Exit Function
    End If
    
    ' 配置结构体参数
    With fileOp
        .wFunc = 3                                   ' FO_DELETE:删除操作
        .pFrom = filePath & vbNullChar & vbNullChar   ' 路径需以两个空字符结尾
        .fFlags = &H40                               ' FOF_ALLOWUNDO:允许撤销(移至回收站)
    End With
    
    ' 调用API执行操作
    result = SHFileOperation(fileOp)
    
    ' 返回操作结果(0表示成功)
    MoveFileToRecycleBin = (result = 0)
End Function


' 使用示例(测试用)
Sub TestMoveToRecycleBin()
    Dim testFile As String
    testFile = "C:\Test\example.txt"  ' 替换为实际文件路径
    
    If MoveFileToRecycleBin(testFile) Then
        MsgBox "文件已成功移至回收站!", vbInformation
    Else
        MsgBox "操作失败(文件不存在或路径错误)", vbExclamation
    End If
End Sub

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值