Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
123
返回列表 发新帖

遍历文件夹修改数据

[复制链接]
发表于 2016-5-10 08:51 | 显示全部楼层
Option Explicit


Dim fso As Object    '模块级变量
Dim SourcePath As String
'主程序:通过递归,执行指定的操作
Sub main()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set fso = CreateObject("scripting.filesystemobject")
    '获取源路径
    SourcePath = getFolderPath("请选择源路径")
    If SourcePath = "" Then End
    '递归
    Call Recursion(SourcePath)
    '显示结果
    Shell "explorer " & SourcePath & "\", vbNormalFocus
End Sub

'获取文件夹路径
Function getFolderPath(prompt) As String
    Dim Objshell As Object, Objfolder As Object
    Set Objshell = CreateObject("Shell.Application")
    Set Objfolder = Objshell.BrowseForFolder(0, prompt, 0, 0)
    If Objfolder Is Nothing Then getFolderPath = "" Else getFolderPath = Objfolder.self.Path
    Set Objfolder = Nothing: Set Objshell = Nothing
End Function

'递归程序
Sub Recursion(myPath As String)
    Dim myFolder As Object, mySubFolder As Object, myFile As Object
    Set myFolder = fso.getfolder(myPath)
    '遍历文件夹
    For Each mySubFolder In myFolder.SubFolders
        Recursion mySubFolder.Path
    Next
    '遍历文件
    For Each myFile In myFolder.Files
        If fso.GetExtensionName(myPath & "\" & myFile) = "xls" Or _
           fso.GetExtensionName(myPath & "\" & myFile) = "xlsm" Then
            Call demo(myPath, myFile.Name)
            Call delCode(myPath & "\" & myFile.Name)
        End If
    Next
End Sub

'指定的操作
Sub demo(myPath As String, myFile As String)
    Dim wb As Workbook
    Dim sh As Worksheet
    Dim rng As Range
    Dim c As Object

    '1)清除公式
    Set wb = Workbooks.Open(myPath & "\" & myFile)
    For Each sh In wb.Sheets
        Cells.Copy
        sh.Range("A1").PasteSpecial Paste:=xlPasteValues
    Next

    '2)删除指定文件中的代码和窗体
    '遍历所有wb中所有部件
    For Each c In wb.VBProject.VBComponents
        '如果部件c是标准模块
        If c.Type = 100 Then
            '删除部件c第1行到最后1行的代码
            c.CodeModule.DeleteLines 1, c.CodeModule.CountOfLines
        Else
            '从部件集合中删除部件c
            wb.VBProject.VBComponents.Remove c
        End If
    Next

    wb.Close True
    Set wb = Nothing
End Sub

遍历文件夹修改数据2.rar (10.49 KB, 下载次数: 9)
回复

使用道具 举报

发表于 2016-5-10 10:16 | 显示全部楼层
奇怪了,运行出问题,难道还缺控件?
1.JPG
回复

使用道具 举报

发表于 2016-5-10 15:25 | 显示全部楼层
zjdh 发表于 2016-5-10 10:16
奇怪了,运行出问题,难道还缺控件?

百度一下:

CreateObject("scripting.filesystemobject") 运行时错误'429

。。。。。。。等你弄好了,学习一下原因


回复

使用道具 举报

发表于 2016-5-10 17:43 | 显示全部楼层
本帖最后由 zjdh 于 2016-5-10 17:45 编辑

解决办法:
1. 由于某种原因系统禁用了FSO(FileSystemObject),引用了也没用。
   只要启用fso即可,运行regsvr32 scrrun.dll即可。
2. 或将Set fso = CreateObject("scripting.filesystemobject") 改成
     Dim fso As New FileSystemObject  

评分

参与人数 2 +9 金币 +8 收起 理由
catluna + 1 赞一个
爱疯 + 8 + 8 来学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-5-10 19:00 | 显示全部楼层
遍历新错误.png 遍历新错误2.png 有公式的出现了上面图片中的情况,请问怎么解决?
回复

使用道具 举报

发表于 2016-5-11 11:55 | 显示全部楼层
爱疯 发表于 2016-5-9 17:28

如果模块工程有密码删不掉的!!!
回复

使用道具 举报

发表于 2016-5-11 16:48 | 显示全部楼层
张雄友 发表于 2016-5-11 11:55
如果模块工程有密码删不掉的!!!

VBProject:代码操作代码之常用语句
http://club.excelhome.net/thread-191823-1-1.html



回复

使用道具 举报

发表于 2016-5-11 23:21 | 显示全部楼层
爱疯 发表于 2016-5-11 16:48
VBProject:代码操作代码之常用语句
http://club.excelhome.net/thread-191823-1-1.html

高深,看不懂……
回复

使用道具 举报

发表于 2016-5-11 23:28 | 显示全部楼层
张雄友 发表于 2016-5-11 23:21
高深,看不懂……

你问的,在6楼

如果判断出有密码,用按键操作输入密码。

没用过,你可去试
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-17 06:14 , Processed in 0.626067 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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