Microsoft技术社区联盟成员,全球领先的Excel2003/2007/2010门户,Office培训学习的最佳社区
设为首页收藏本站|繁體中文 切换到窄版

Excel Home论坛

 找回密码
 免费注册

用新浪微博连接

一步搞定

QQ登录

只需一步,快速开始

魔方网表,Excel终结者,永久免费 Excel服务器2010软件和教程下载 菜鸟啃Excel: 样章试读
Excel不给力? 何不试试FoxTable! 2012年Excel免费培训班2-6月开课计划 新人必读:ExcelHome最佳学习方法 免费下载Excel行业应用视频教程
精粹:成为Excel高手的捷径 免费下载39集新Excel精粹视频教程 免费学习Excel数据透视表视频教程 入门必看《循序渐进学Excel》视频
Excel辅助工具的巅峰之作--Kutools 免费学习Excel 2007精粹视频教程 Office Tab,Office界面的革命性创新 搞不定老板要的报表?我们来帮您
  • 9753财富
  • 2鲜花
  • 32技术
  • 积分排行
    98
    帖子
    3632
    精华
    14
    分享
    0

    能不能列出一个工作簿中所有已使用的自定义函数 [复制链接]

    能不能列出一个工作簿中所有已使用的自定义函数?

    自定义函数和excel自带函数有什么本质的区别?

    http://club.excelhome.net/viewthread.php?tid=443469 150余项功能 全免费开源的 超级加载宏更新!
  • 117763财富
  • 26鲜花
  • 8技术
  • 积分排行
    1
    帖子
    42876
    精华
    3
    分享
    2

    优秀管理者 金牌管理者

    发表于 2007-5-29 01:14:25 |显示全部楼层
    一起等待解答。
  • 29419财富
  • 63鲜花
  • 63技术
  • 积分排行
    15
    帖子
    12283
    精华
    1
    分享
    0
    发表于 2007-5-29 10:06:29 |显示全部楼层
    Sub UDFSOFACTIVEWORKBOOK()
    Dim sh As Worksheet, r As Range, dic As Object, i As Long, temp As String, vbcomp, s() As String, UDF As String
    For i = 1 To ActiveWorkbook.VBProject.VBComponents.Count
    Set vbcomp = ActiveWorkbook.VBProject.VBComponents(i)
    If vbcomp.Type = 1 Then temp = temp & vbCrLf & vbcomp.CodeModule.Lines(1, 65536)
    Next
    s = Split(temp, vbCrLf)
    temp = ""
    For i = 0 To UBound(s)
    If s(i) Like "Function * As *" Then temp = temp & "@" & "=" & Trim(Split(Split(s(i), "(")(0), "Function")(1)) & "(" '--->All functions with or without parameters
    Next
    Set dic = CreateObject("scripting.dictionary")
    For Each sh In Sheets
    For Each r In sh.UsedRange
    If r.HasFormula Then
    If InStr(temp, "@" & Split(r.Formula, "(")(0)) > 0 Then
    UDF = r.Formula & "udf"
    Else
    UDF = ""
    End If
    If Not dic.exists(r.Formula) Then dic.Add r.Formula, UDF
    End If
    Next
    Next
    Debug.Print "All functions used in activesheet" & vbCrLf & String(50, "-") & vbCrLf & Join(dic.keys, vbCrLf) & vbCrLf & vbCrLf '列出一个工作簿中所有函数
    Debug.Print "All user define functions used in activesheet" & vbCrLf & String(50, "-") & vbCrLf & Replace(Join(Filter(dic.items, "udf"), vbCrLf), "udf", "") '列出一个工作簿中所有已使用的自定义函数
    Set dic = Nothing
    End Sub
  • 29419财富
  • 63鲜花
  • 63技术
  • 积分排行
    15
    帖子
    12283
    精华
    1
    分享
    0
    发表于 2007-5-29 10:07:06 |显示全部楼层

     需要添加对VB项目的信任

  • 314财富
  • 0鲜花
  • 0技术
    • 等级 2EH初级
    积分排行
    3000+
    帖子
    74
    精华
    0
    分享
    0
    发表于 2008-12-3 11:23:15 |显示全部楼层
    多谢狼版主解决了困扰了我很长时间的一个问题,就是有些电脑运行关于VBComponents的代码会报安全错误。
    这里顺便说一下“需要添加对VB项目的信任”的方法。Excel -> 工具 -> 宏 -> 安全 -> 第二张选项卡 -> 选中添加对VB项目的信任,因为我用的是英文版Excel,有的表达可能有问题,请见谅。
    规划人生

    发表回复

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

    发帖时请遵守我国法律,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任。
    回顶部