ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

代码操作代码 导入模块

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-8-19 20:17 | 显示全部楼层 |阅读模式
附件内含 自定义函数: 获取文件清单, 星号显示的inputboxPWD



代码操作代码.rar (29.02 KB, 下载次数: 66)

  1. Sub 批量导入模块()
  2.    
  3.     Rem BAS  模块
  4.     Rem FRM 窗体
  5.     Rem CLS 类模块  但是也代表sheet内代码导出文件, 现有代码不能导入: sheet代码
  6.    
  7.     Rem 获取要导入的模块,窗体,类模块文件
  8.     FileArr = FileAllArr(ThisWorkbook.Path, "*.*", ThisWorkbook.Name, True, False, "BAS,FRM,CLS", "") '//含子文件夹;文件路径
  9.     For I = 0 To UBound(FileArr)
  10.         Rem 如果存在就删除
  11.         For Each mk In ThisWorkbook.VBProject.VBComponents
  12.             If InStr(mk.Name, GetPathFromFileName(FileArr(I), False)) > 0 Then
  13.                 ThisWorkbook.VBProject.VBComponents.Remove mk    '//删除这个模块
  14.                 Exit For
  15.             End If
  16.         Next
  17.         Rem 插入: 模块,窗体,类模块文件
  18.         ThisWorkbook.Application.VBE.ActiveVBProject.VBComponents.Import FileArr(I)
  19.     Next
  20.    
  21. End Sub
复制代码


评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-8-20 09:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 opiona 于 2022-8-20 09:38 编辑

改成下面这样 自动判断导入文件的类型  更稳妥些

  1. Sub 批量导入模块()
  2.     Rem BAS  模块
  3.     Rem FRM 窗体
  4.     Rem CLS 类模块  但是也代表sheet内代码导出文件, 现有代码不能导入: sheet代码
  5.     Rem 获取要导入的模块,窗体,类模块文件
  6.     FileArr = FileAllArr(ThisWorkbook.Path, "*.*", ThisWorkbook.Name, True, False, "BAS,FRM,CLS", "") '//含子文件夹;文件路径
  7.     For I = 0 To UBound(FileArr)
  8.         Rem 如果存在就删除
  9.         For Each mk In ThisWorkbook.VBProject.VBComponents
  10.             If UCase(mk.Name) = UCase(GetPathFromFileName(FileArr(I), False)) Then
  11.                 If mk.Type = 100 Then   '//sheet内代码导出文件
  12.                     BL = False
  13.                 Else
  14.                     ThisWorkbook.VBProject.VBComponents.Remove mk    '//删除这个模块
  15.                     BL = True
  16.                 End If
  17.                 Exit For
  18.             End If
  19.         Next
  20.         Rem 插入: 模块,窗体,类模块文件
  21.         If BL = True Then
  22.             ThisWorkbook.Application.VBE.ActiveVBProject.VBComponents.Import FileArr(I)
  23.         End If
  24.     Next
  25. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-8-21 11:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
再次迭代一下
Sheet的导出文件  使用文本文件导入代码
  1. ''
  2. '''*********************************
  3. '''*******  北极狐工作室出品  ******
  4. '''*******  QQ:14885553      ******
  5. '''*********************************

  6. Sub C_批量导入模块()
  7.     Rem BAS  模块
  8.     Rem FRM 窗体
  9.     Rem CLS 类模块  但是也代表sheet内代码导出文件, 现有代码不能导入: sheet代码
  10.     Rem 获取要导入的模块,窗体,类模块文件
  11.     FileArr = FileAllArr(ThisWorkbook.Path, "*.*", ThisWorkbook.Name, True, False, "BAS,FRM,CLS", "") '//含子文件夹;文件路径
  12.     If FileArr(0) <> "" Then
  13.         For I = 0 To UBound(FileArr)
  14.             Rem 如果存在就删除
  15.             For Each MK In ThisWorkbook.VBProject.VBComponents
  16.                 Rem 正在使用的几个模块不导入
  17.                 If MK.Name <> "FUNCTIONS" And MK.Name <> "C_导入模块" And MK.Name <> "D_导出模块" Then
  18.                     If UCase(MK.Name) = UCase(GetPathFromFileName(FileArr(I), False)) Then
  19.                         If MK.Type = 100 Then   '//sheet内代码导出文件
  20.                             MK.CodeModule.DeleteLines 1, MK.CodeModule.CountOfLines   '//按行删除
  21.                             BL = False
  22.                         Else
  23.                             ThisWorkbook.VBProject.VBComponents.Remove MK    '//删除这个模块
  24.                             BL = True
  25.                         End If
  26.                         Exit For
  27.                     End If
  28.                 End If
  29.             Next
  30.             
  31.             If BL = True Then
  32.                 Rem 直接导入: 模块,窗体,类模块文件
  33.                 ThisWorkbook.Application.VBE.ActiveVBProject.VBComponents.Import FileArr(I)
  34.             Else
  35.                 Rem  sheet代码的导出文件 用文本文件打开  去掉不需要的内容
  36.                 '''VERSION 1.0 CLASS
  37.                 '''BEGIN
  38.                 '''  MultiUse = -1  'True
  39.                 '''End
  40.                 '''Attribute VB_Name = "Sheet1"
  41.                 '''Attribute VB_GlobalNameSpace = False
  42.                 '''Attribute VB_Creatable = False
  43.                 '''Attribute VB_PredeclaredId = True
  44.                 '''Attribute VB_Exposed = True
  45.                 '''
  46.                 '''Sub A()
  47.                 '''MsgBox "OK"
  48.                 '''End Sub
  49.                
  50.                 Rem  目前办法比较Low
  51.                 StrText = ""
  52.                 BLB = FASLE '//判断  BEGIN 段落
  53.                 INTX = 0
  54.                 INTY = -1
  55.                 Open FileArr(I) For Input As #1 ' 以只读的方式打开文件,参考open方法的帮助
  56.                 Do While Not EOF(1) ' 循环至文件尾。
  57.                     Line Input #1, TextLine ' 读入一行数据并将其赋予某变量
  58.                     BLA = FASLE  '//是否需要此行
  59.                     INTX = INTX + 1  '//记录第几行  为对比END 所在行做准备
  60.                     TextLine = Trim(TextLine)
  61.                     If InStr(TextLine, "VERSION ") <> 1 Then
  62.                         If InStr(TextLine, "Attribute ") <> 1 Then
  63.                             If InStr(TextLine, "BEGIN") = 1 Then BLB = True  '//判断  BEGIN 段落开始
  64.                             If BLB = True And InStr(TextLine, "END") = 1 Then
  65.                                 BLB = FASLE '//判断  BEGIN 段落结束
  66.                                 INTY = INTX   '//记录END 所在行
  67.                             End If
  68.                             If BLB = FASLE Then
  69.                                 Rem 是正文, 如果有BEGIN  则要在END之下
  70.                                 If INTX > INTY Then BLA = True
  71.                             End If
  72.                         End If
  73.                     End If
  74.                     If BLA = True Then
  75.                         If StrText <> "" Then StrText = StrText & vbCrLf
  76.                         StrText = StrText & TextLine
  77.                     End If
  78.                 Loop
  79.                 Close #1 ' 关闭文件。
  80.                
  81.                 MK.CodeModule.AddFromString StrText  '//插入代码
  82.             End If
  83.         Next
  84.         MsgBox "OK"
  85.     Else
  86.         MsgBox "未发现 导入文件"
  87.     End If
  88.    
  89. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2022-8-25 09:49 | 显示全部楼层
opiona 发表于 2022-8-20 09:29
改成下面这样 自动判断导入文件的类型  更稳妥些

您好,感谢分享
请问其中有一句
“现有代码不能导入: sheet代码”
这句注释是什么意思?谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-8-25 10:28 | 显示全部楼层
morpheus126 发表于 2022-8-25 09:49
您好,感谢分享
请问其中有一句
“现有代码不能导入: sheet代码”

sheet代码

就是写在工作表 代码区域内的代码
可以导出,但是不能直接导入
最新版的 是以文本的形式写进去的

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-8-25 10:42 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-11-17 14:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

拜读了,
.感谢分享!!!!!

TA的精华主题

TA的得分主题

发表于 2022-11-18 08:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
牛牛牛,看看
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-21 02:36 , Processed in 0.046007 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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