Excel精英培训网

 找回密码
 注册

QQ登录

只需一步,快速开始

你正在寻找更好的Excel学习教程吗?Excel技巧80集+数据透视表+函数初中高全套+VBA80集,想学的这儿全都有
查看: 167|回复: 8

[求助] 求助大神,文件夹中有200多个Excel文件怎么批量添加VBA代码进去?

[复制链接]
发表于 2020-1-14 14:46 | 显示全部楼层 |阅读模式
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
求助大神,文件夹中有200多个Excel文件怎么批量添加VBA代码进去?

Private Sub Workbook_AfterSave(ByVal Success As Boolean)
ActiveSheet.Copy
ActiveWorkbook.SaveAs Filename:="D:\zhaoying\" & Format(Now, "hhmmss") & [P5] & ".xls", _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close
MsgBox "数据处理成功"
End Sub

发表于 2020-1-14 17:55 | 显示全部楼层
Sub test()
    Dim p, fld, f
    Application.ScreenUpdating = False
    p = ThisWorkbook.Path & "\"
    fld = "files\"
    f = Dir(p & fld)
    Do While f <> ""
        With GetObject(p & fld & f)
            With .VBProject.VBComponents("Sheet1").CodeModule
                .DeleteLines 1, .CountOfLines
                .AddFromFile p & "Code.txt"
            End With
            Windows(.Name).Visible = True
            .Close True
        End With
        f = Dir
    Loop
End Sub


AddCode.rar (16.88 KB, 下载次数: 4)
回复

使用道具 举报

 楼主| 发表于 2020-1-14 23:17 | 显示全部楼层
爱疯 发表于 2020-1-14 17:55
Sub test()
    Dim p, fld, f
    Application.ScreenUpdating = False

请问大神,如果换种方式:
把代码保存为加载宏,启用加载宏后。得出我要的结果
这样的代码怎么写,求教。
回复

使用道具 举报

发表于 2020-1-15 09:13 | 显示全部楼层
如果如3楼,则是在保存该加载宏文档时才执行,而不是在保存那200个工作簿时执行。
所以,我觉得3楼方式应该不行。


http://club.excelhome.net/thread-86642-1-1.html
2楼可以吗
回复

使用道具 举报

 楼主| 发表于 2020-1-15 14:27 | 显示全部楼层
大神,我就是想要3楼的效果。保存该加载宏文档时才执行(当前sheet保存后将当前sheet另存为工作薄)。代码应该怎么写?
回复

使用道具 举报

 楼主| 发表于 2020-1-15 22:36 | 显示全部楼层
爱疯 发表于 2020-1-15 09:13
如果如3楼,则是在保存该加载宏文档时才执行,而不是在保存那200个工作簿时执行。
所以,我觉得3楼方式应 ...

大神,我就是想要3楼的效果。保存该加载宏文档时才执行(当前sheet保存后将当前sheet另存为工作薄)。代码应该怎么写?
回复

使用道具 举报

发表于 2020-1-16 08:21 | 显示全部楼层
lyp10258 发表于 2020-1-15 22:36
大神,我就是想要3楼的效果。保存该加载宏文档时才执行(当前sheet保存后将当前sheet另存为工作薄)。代 ...

我还想不出按3楼方法做的方法
回复

使用道具 举报

 楼主| 发表于 2020-1-16 09:40 | 显示全部楼层
爱疯 发表于 2020-1-16 08:21
我还想不出按3楼方法做的方法

改变一下思路
加载宏
关闭工作表事件
Dim WithEvents app As Application
Private Sub app_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
    If Wb.Name = ThisWorkbook.Name Then Exit Sub
    app.DisplayAlerts = False
    Wb.SaveAs Filename:="D:\" & Format(Now, "hhmmss") & [P5] & ".xls", FileFormat:=xlNormal
    Wb.Close
End Sub
Private Sub Workbook_Open()
    Set app = Excel.Application
End Sub
现在代码效果为:关闭后工作薄整个另存为工作薄。
想实现效果当前sheet另存为工作薄,代码应该怎么改
回复

使用道具 举报

发表于 2020-1-19 10:24 | 显示全部楼层
lyp10258 发表于 2020-1-16 09:40
改变一下思路
加载宏
关闭工作表事件

Dim WithEvents app As Application


Private Sub app_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
    Dim sh As Worksheet
    If Wb.Name = ThisWorkbook.Name Then Exit Sub


    app.DisplayAlerts = False
    For Each sh In Wb.Sheets
        If sh.Name <> "Sheet1" Then sh.Delete
    Next
    Wb.SaveAs Filename:="D:\" & Format(Now, "hhmmss") & [P5] & ".xls", FileFormat:=xlNormal
    Wb.Close
End Sub


Private Sub Workbook_Open()
    Set app = Excel.Application
End Sub




可以把wb处理成只有1个需保留工作表的工作簿,再另存。


回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2020-1-25 12:16 , Processed in 0.078000 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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