ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何提取工作簿的名称

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-10-8 21:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
明白了。赵老师程序没有做修改吧。

TA的精华主题

TA的得分主题

发表于 2009-10-8 21:55 | 显示全部楼层

回复 52楼 yj0715 的帖子

程序没有修改,请查找excel文件夹名、工作簿名或工作表名禁用的非法字符,我没有太注意这些难记的东西

TA的精华主题

TA的得分主题

发表于 2009-10-9 11:16 | 显示全部楼层
我也使用了一下这个,我的文件名全是例如1-1、1-2…、2-1、2-2…30-1、30-2、30-3……
可检索到的文件名格式都成了日期型了,设置成文本,数字、普通等都不管用。这是为什么。

TA的精华主题

TA的得分主题

发表于 2009-10-9 12:05 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 高玉甫 于 2009-10-6 14:59 发表
zhaogang1960  先生,您好!
     经测试,您 35 楼的代码漂亮之极,太棒了,您真乃世外高人,什么样的VBA代码也难不倒您,zhaogang1960  万岁!

zhaogang1960的确很棒!帮我写了代码程序,非常实用!

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-10-9 22:20 | 显示全部楼层
zhaogang  老师实在强,而且还是个好心人,学生非常感激!!!   我也很喜欢学习EXCEL的VBA     不知道捷径在哪?第一步该怎么走?   希望得到各位老师的指点

TA的精华主题

TA的得分主题

发表于 2009-10-9 23:30 | 显示全部楼层

回复 54楼 walkenbach 的帖子

经查看得知带有“-”的工作表名超链中会在两边都加上“'”撇号,文件名只是个显示问题,在前面加上一个“'”撇号就可以了:
Dim ary(), m As Integer
Sub TQML()
'BY E.H. ZhaoGang1960
    Dim MyPath$, myfile$, mydir$, n%, i%, sh As Worksheet, a, f%, c As Range, s$
    a = Array("序号", "文件名", "日期")
    If Not Selection Is Nothing Then
        Set c = Selection
    Else
        Set c = Range("A1")
    End If
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    For Each sh In Sheets
        If sh.Name <> "总目录" Then sh.Delete
    Next
    MyPath = ThisWorkbook.Path & "\"

    m = 2
    ReDim ary(1 To 2, 1 To m)
    ary(1, 1) = MyPath
    i = 1
    Do While ary(1, i) <> ""
        dirdir (ary(1, i))
        i = i + 1
    Loop
    myfile = Dir(MyPath & "*.*")
    f = 1
    With Sheets("总目录")
        .UsedRange.Offset(1, 0).ClearContents
        Do While myfile <> ""
            If myfile <> ThisWorkbook.Name Then
                f = f + 1
                s = Split(myfile, ".")(0) '工作簿名
                If InStr(s, "-") Then s = "'" & s '前面加上一个撇号
                .Hyperlinks.Add Anchor:=.Cells(f, 2), Address:=MyPath & myfile, TextToDisplay:=s
            End If
            myfile = Dir
        Loop
        .Range("A2").Value = 1
    End With
    For i = 2 To m - 1
        With Sheets.Add(After:=Sheets(Sheets.Count))
            .Name = ary(2, i)
            .Range("a1").Resize(1, 3) = a
        End With
        myfile = Dir(ary(1, i) & "*.*")
        n = 1
        With Sheets(ary(2, i))
            .UsedRange.Offset(1, 0).ClearContents
            Do While myfile <> ""
                    n = n + 1
                    .Hyperlinks.Add Anchor:=.Cells(n, 2), Address:=ary(1, i) & myfile, TextToDisplay:=Split(myfile, ".")(0)
                myfile = Dir
            Loop
            If n > 1 Then .Range("A2").Value = 1
                         '.Range("A2").Value = 1
            If n > 2 Then .Range("A2").AutoFill Destination:=.Range("A2").Resize(n - 1), Type:=xlFillSeries
            If n > 1 Then .Range("C2").Resize(n - 1) = Date
                         '.Range("C2").Resize(n - 1) = Date
            With .Range("A1").CurrentRegion
                .HorizontalAlignment = xlCenter
                .Borders.LineStyle = xlContinuous
                .EntireColumn.AutoFit
            End With
        End With
    Next
    With Sheets("总目录")
        For Each sh In Sheets
            If sh.Name <> "总目录" Then
                f = f + 1
                s = sh.Name
                If InStr(s, "-") Then s = "'" & s & "'" '前后都要加上一个撇号
                .Hyperlinks.Add Anchor:=.Cells(f, 2), Address:="", SubAddress:=s & "!A1", TextToDisplay:=Left(s, Len(s) - 1)
            End If
        Next
        If f > 2 Then .Range("A2").AutoFill Destination:=.Range("A2").Resize(f - 1), Type:=xlFillSeries
        .Range("b65536").End(3).Offset(1).Copy
        .Range("b2").Resize(f - 1).PasteSpecial Paste:=xlPasteFormats
        Application.CutCopyMode = False
    End With
    Sheets(1).Activate
    c.Select
    m = 0
    Erase ary
    Application.ScreenUpdating = True
End Sub
Sub dirdir(MyPath)
    Dim MyName
    MyName = Dir(MyPath, vbDirectory)
    Do While MyName <> ""
        If MyName <> "." And MyName <> ".." Then
            If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
                m = m + 1
                ReDim Preserve ary(1 To 2, 1 To m)
                ary(1, m - 1) = MyPath & MyName & "\"
                ary(2, m - 1) = MyName
            End If
        End If
        MyName = Dir
    Loop
End Sub
文件夹.rar (100.7 KB, 下载次数: 751)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-10-10 10:06 | 显示全部楼层

Re: E.H. ZhaoGang1960

我的一句话,辛苦您老半天。没能力很不好意思。
Thank you very much!

TA的精华主题

TA的得分主题

发表于 2009-10-10 21:29 | 显示全部楼层
zhaogang老师的代码越来越完善,等待最后定下来代码收藏备用

TA的精华主题

TA的得分主题

发表于 2009-10-11 18:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
坛里很多朋友都得到过赵老师的无私帮助。赵老师是公认的好人。

TA的精华主题

TA的得分主题

发表于 2009-10-20 11:50 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 11:19 , Processed in 0.034480 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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