ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1203|回复: 9

[求助] 目录太深(>4000), 删除时报错

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-10-14 16:41 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
犯了个很2的错误, 将上级目录拖动到下级里了, 结果导致里目录里面递归复制, 删除时提示错误信息.
原因应该是message太多, 导致不能删除.
我现在的想法是, 用VBA实现一个宏, 遍历回收站里的每一层级的目录, 找到对底层的然后开始进行删除动作, 直至所有.
有人能帮忙写个雏形吗? 或者还有还有应对这个问题其他方案.
非常感谢.

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-10-15 09:57 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-10-18 14:15 | 显示全部楼层
你说的回收站是桌面那个回收站吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-10-21 16:01 | 显示全部楼层
dsd999 发表于 2013-10-18 14:15
你说的回收站是桌面那个回收站吗?

谢谢版主关心, 不是系统回收站, 是Outlook里的deleteItems.
这几天我也一直想写个宏来逐个删除, 可是都没有达到效果, 总是会报错

TA的精华主题

TA的得分主题

发表于 2013-10-22 10:09 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-10-22 15:09 | 显示全部楼层
本帖最后由 sunnirvana 于 2013-10-22 15:45 编辑

Sub DeleteFolder()
        Dim myNamespace As Outlook.NameSpace
        Dim floderCount As Long
        Dim lastFolder As Outlook.folder
        Dim tmpFolder As Outlook.folder
        Dim topFolder As Outlook.folder
        Dim parentFolder As Outlook.folder
         
        Set myNamespace = Application.GetNamespace("MAPI")
        
        Set topFolder = myNamespace.GetDefaultFolder(olFolderDeletedItems)
        Set parentFolder = topFolder
        
        Do
                If parentFolder.Folders.GetLast Is Nothing Then
                        '找到了最後一個文件夾
                        Set tmpFolder = parentFolder.Parent
                        
                        '將最後一個文件夾改名爲“Z”,這樣它就是DeleteItems文件夾中最後一個文件夾,利於第二次刪除
                        parentFolder.Name = "Z"
                        
                        '第一次刪除,會將被刪除的文件夾放到DeleteItems下
                        parentFolder.Delete
                        
                        '第二次刪除,徹底將它從DeleteItems下刪除
                        topFolder.Folders.GetLast.Delete
                                       
                        If 0 = StrComp(tmpFolder.Name, topFolder.Name, 1) Then
                                Exit Do
                        Else
                                Set parentFolder = tmpFolder
                        End If
               
                Else
                        Set parentFolder = parentFolder.Folders.GetLast
                End If
        Loop While (1)

End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-10-22 15:13 | 显示全部楼层
上面程序的前提是,我已經將需要刪除的文件夾都放在了DeleteItem下,所以只要處理DeleteItem就可以了

TA的精华主题

TA的得分主题

发表于 2013-10-23 13:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
outlook的版本?

具体的报错?

TA的精华主题

TA的得分主题

发表于 2013-10-23 16:27 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-10-24 21:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
实在抱歉,没有及时回答问题。这个问题我目前已经解决了,但是用的方法比较笨。
我用的是2010的outlook,操作系统是win7 64位
先说下我的方法吧,
1,使用WEB方式直接删除服务器端的数据,而不是用outlook软件来操作。原因是我使用如上的函数进行逐层删除时,文件夹非但不会被删除,并且还会在DeleteItem目录下又创建了一个被删除的文件夹。这种方式更像是把被删除文件夹进行了一次拷贝,然后放在DeleteItem下。我认为这可能是outlook的服务器端和终端同步数据的问题。所以我放弃了在终端的删除动作,而改在直接操作服务器端数据。
2,在outlook终端写了一个函数,用来给每一层的文件夹改名字(名字是既是当前文件夹所属的层数),并统计层数。
3,发现我要删除的文件夹层数只有338个,所以我认为这应该不是item超过4000的问题。但是folder和item在outlook中又不一样,所以我想可能是outlook对folder的层级有另外的限制。
4,在WEB outlook端,我就逐层打开folder进行删除,发现到第118层时(报出的错误是:你没有权限是删除它),才能将119层及以后的删除掉。而且这次的删除是清空,不会像终端删除那样在DeleteItem目录中再保留一份。所以我认为outlook所允许删除的最大目录层数是220左右。
5,至此找到了删除的方法,我就一直手动删除了困扰了我快两周的文件夹。

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-9 16:32 , Processed in 0.024644 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表