Excel精英培训网

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

提示文件名(文件名不带路径和后缀名)

[复制链接]
发表于 2019-11-27 01:02 | 显示全部楼层 |阅读模式
打开当前文件目录,选择一个文件(指定了EXCEL,DOC二种文件,),选择一个文件后,提示文件名(文件名不带路径和后缀名)请老师们帮修改下,谢谢老师们了! test.rar (6.7 KB, 下载次数: 4)
发表于 2019-11-27 11:58 | 显示全部楼层
Sub SelectFile()
    ChDrive Left(ActiveWorkbook.Path, 1)
    ChDir ActiveWorkbook.Path

    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = False
        .Filters.Clear
        .Filters.Add "Excel Files", "*.xls;*.doc;*.xls*"
        .Filters.Add "All Files", "*.*"
        If .Show = -1 Then MsgBox .SelectedItems(1), vbOKOnly + vbInformation, "您选择的文件是"
    End With
End Sub
回复

使用道具 举报

 楼主| 发表于 2019-11-27 12:04 | 显示全部楼层
爱疯 发表于 2019-11-27 11:58
Sub SelectFile()
    ChDrive Left(ActiveWorkbook.Path, 1)
    ChDir ActiveWorkbook.Path

老师你好,我想提示信息不显示路径和后缀名直接只显示个 文件名,就行了
麻烦老师帮修改下,谢谢了老师!
回复

使用道具 举报

发表于 2019-11-27 12:33 | 显示全部楼层
yjwdjfqb 发表于 2019-11-27 12:04
老师你好,我想提示信息不显示路径和后缀名直接只显示个 文件名,就行了
麻烦老师帮修改下,谢谢了老师 ...

一般都是用mid函数搭配inst函数r截取你需要的部分:对于路径,会有多个“\”,有两种方法截取:
1、可以通过算法获得,这个方法代码少一点,但推理会难一点,思路是与工作表函数SUBSTITUTE的方法类似,在vba里是用replace来操作;
2、另一种就是for循环,我个人推荐这一种,操作和理解比较简单,就是代码稍微长一点,也好记:
    s = "c:\aaa\bbb\ccc\文件.slx"      '全路径的文件名
    For i = 1 To 10                          '假设最多包含10层子路径,如果不够还可以增加
        If InStr(s, "\") > 0 Then          '包含有"\"
           s = Mid(s, InStr(s, "\") + 1, 100)   '截取"\"之后的部分,一次只能截掉一层
       Else
          Exit For  '如果没有"\",退出
       End If
    Next i
    s1 = Mid(s, 1, InStr(s, ".") - 1)     '截取文件名
    s2 = Mid(s, InStr(s, ".") + 1, 4)    '截取扩展名,最长就4个字符
    Cells(1, 1) = s1     '在a1显示文件名
    Cells(2, 1) = s2     '在a2显示扩展名




回复

使用道具 举报

发表于 2019-11-27 14:44 | 显示全部楼层
也可以这样




Sub SelectFile()
    ChDrive Left(ActiveWorkbook.Path, 1)
    ChDir ActiveWorkbook.Path

    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = False
        .Filters.Clear
        .Filters.Add "Excel Files", "*.xls;*.doc;*.xls*"
        .Filters.Add "All Files", "*.*"
        If .Show = -1 Then MsgBox f(.SelectedItems(1))
    End With
End Sub


'返回一个包含路径中最后部件的基本名字(去掉任何文件扩展名)的字符串
Function f(x)
        f = CreateObject("Scripting.FileSystemObject").GetBaseName(x)
End Function

评分

参与人数 1学分 +2 收起 理由
yjwdjfqb + 2 谢谢老师了,这个完美!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2019-11-27 17:50 | 显示全部楼层
hfwufanhf2006 发表于 2019-11-27 12:33
一般都是用mid函数搭配inst函数r截取你需要的部分:对于路径,会有多个“\”,有两种方法截取:
1、可以 ...

谢谢你老师!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 18:25 , Processed in 0.681163 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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