Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 15035|回复: 31

[已解决]提取每个宏

  [复制链接]
发表于 2010-12-31 04:14 | 显示全部楼层 |阅读模式
我的一个excel里面有很多模块,每个模块里面有许多的宏

希望做到每个宏的内容,能存放到表1的每一列里,即表1的每一列为一个宏的内容,注:宏的每一句话独立在没一个单元格内。

另:希望在每一列的第一行,列示处该宏所处的模块


模式如图:

未命名.JPG


最佳答案
2010-12-31 04:14
本帖最后由 Dj_soo 于 2010-12-31 11:05 编辑

先要引用 MICROSOFT VISUAL  BASIC FOR APPLICATION  EXTENSIBLITY


  1. Sub Test()
  2.     Dim Mdl As VBComponent
  3.     Dim Line As Long
  4.     Dim i As Long
  5.     Dim Col As Integer
  6.     Dim SubName As String
  7.     Dim arr As Variant
  8.     For Each Mdl In ThisWorkbook.VBProject.VBComponents
  9.         With Mdl.CodeModule
  10.             For i = 1 To .CountOfLines
  11.                 SubName = .ProcOfLine(i, vbext_pk_Proc)
  12.                 If SubName <> "" Then
  13.                     Col = Col + 1
  14.                     Line = .ProcCountLines(SubName, vbext_pk_Proc)
  15.                     arr = Split(.Lines(i, Line), vbCrLf)
  16.                     arr(0) = Mdl.Name
  17.                     Cells(1, Col).Resize(Line) = Application.Transpose(arr)
  18.                     i = i + .ProcCountLines(SubName, vbext_pk_Proc) - 1
  19.                 End If
  20.             Next i
  21.         End With
  22.     Next
  23.     Columns.AutoFit
  24. End Sub
复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2010-12-31 09:13 | 显示全部楼层
额。。。。明确的说,这个我不会,我只是来留个记号,看有没会的。加个关注。{:08:}
回复

使用道具 举报

发表于 2010-12-31 09:29 | 显示全部楼层
回复

使用道具 举报

发表于 2010-12-31 04:14 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Dj_soo 于 2010-12-31 11:05 编辑

先要引用 MICROSOFT VISUAL  BASIC FOR APPLICATION  EXTENSIBLITY


  1. Sub Test()
  2.     Dim Mdl As VBComponent
  3.     Dim Line As Long
  4.     Dim i As Long
  5.     Dim Col As Integer
  6.     Dim SubName As String
  7.     Dim arr As Variant
  8.     For Each Mdl In ThisWorkbook.VBProject.VBComponents
  9.         With Mdl.CodeModule
  10.             For i = 1 To .CountOfLines
  11.                 SubName = .ProcOfLine(i, vbext_pk_Proc)
  12.                 If SubName <> "" Then
  13.                     Col = Col + 1
  14.                     Line = .ProcCountLines(SubName, vbext_pk_Proc)
  15.                     arr = Split(.Lines(i, Line), vbCrLf)
  16.                     arr(0) = Mdl.Name
  17.                     Cells(1, Col).Resize(Line) = Application.Transpose(arr)
  18.                     i = i + .ProcCountLines(SubName, vbext_pk_Proc) - 1
  19.                 End If
  20.             Next i
  21.         End With
  22.     Next
  23.     Columns.AutoFit
  24. End Sub
复制代码

Book1.rar

8.28 KB, 下载次数: 145

评分

参与人数 1金币 +50 收起 理由
爱疯 + 50

查看全部评分

回复

使用道具 举报

发表于 2010-12-31 11:09 | 显示全部楼层
上面的代码在两个过程直接必须有至少一个空行.否则会出错.
回复

使用道具 举报

发表于 2010-12-31 11:19 | 显示全部楼层
学习下。:D
回复

使用道具 举报

 楼主| 发表于 2010-12-31 11:27 | 显示全部楼层
Dj_soo 发表于 2010-12-31 10:25
先要引用 MICROSOFT VISUAL  BASIC FOR APPLICATION  EXTENSIBLITY

未命名.JPG

我复制代码到我的工作薄,运行提示错误,请求在指教

点评

看到我那么红的字了没?  发表于 2010-12-31 11:43
回复

使用道具 举报

发表于 2010-12-31 11:45 | 显示全部楼层
本帖最后由 Dj_soo 于 2010-12-31 11:45 编辑

先要引用 MICROSOFT VISUAL  BASIC FOR APPLICATION  EXTENSIBLITY

点评

看不懂这个是什么意思 :(  发表于 2010-12-31 11:50
回复

使用道具 举报

 楼主| 发表于 2010-12-31 11:49 | 显示全部楼层
Dj_soo 发表于 2010-12-31 11:45
先要引用 MICROSOFT VISUAL  BASIC FOR APPLICATION  EXTENSIBLITY

看不懂是什么意思,可下载的工作薄可以运行讲师写的宏,把代码复制到我的工作薄就提示如上错误

点评

VBE窗口中点工具-引用,找到我上面的那串前面勾选起来就OK了.  发表于 2010-12-31 11:51
回复

使用道具 举报

发表于 2010-12-31 11:53 | 显示全部楼层
另外我代码的缺陷你可以自己尝试修改一下,看看如果过程之间不带空行应该怎么改.
我就不改了,给你自己练习吧.
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 09:12 , Processed in 0.579472 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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