精华内容
下载资源
问答
  • 示例代码:filename = Dir("F:userdataDesktop新建文件夹")dir后面的参数应该以反斜杠“”结尾,这样才能返回该文件夹下的文件名称。否则“新建文件夹”会被当成一个文件名进行处理。Dir运行一次只能得到一个文件名...

    33c22cf94831850c522f1734ab57fcf4.png

    VBA编程知识点(10)——Dir函数

    学习自杨洋老师《全民一起VBA》

    1. 在VBA中,dir函数可以返回一个文件夹下一个文件的名字(包含后缀)。

    示例代码:

    filename = Dir("F:userdataDesktop新建文件夹")

    dir后面的参数应该以反斜杠“”结尾,这样才能返回该文件夹下的文件名称。否则“新建文件夹”会被当成一个文件名进行处理。

    Dir运行一次只能得到一个文件名。为得到下一个文件名,代码应该这样写:filename = Dir。

    Dir后面不写任何参数,如果写了与前面相同的参数"F:userdataDesktop新建文件夹",则会重新扫描该文件夹,又得到第一个文件名,如果更改为其他文件夹,就扫描该文件夹,得到它的第一个文件名

    如果文件夹中有n个文件,或者说有n个符合条件的文件,那么当Dir运行第n+1次时,则返回一个空字符串,代表已经查找完所有的文件。Dir运行第n+2次时,程序将报错。

    2. 扫描一个文件夹下所有文件的通用模板

    Dim filename as string
    filename = Dir("F:userdataDesktop新建文件夹")  '可以更改为任意文件夹
    Do while filename <> ""
    	相关操作
    	filename = Dir  '获取下一个文件名
    Loop

    3. Dir扫描符合条件的文件名(通配符*)

    示例代码:

    F = Dir("F:userdataDesktop新建文件夹*.xls"),扫描所有后缀为.xls的文件。

    4. 判断一个文件是否存在

    示例代码:

    F = Dir("F:userdataDesktop新建文件夹123.xls")

    如果文件123.xls存在,则返回字符串123.xls,如果不存在,则返回空字符串。

    5. 扫描文件和子文件夹名称

    一般情况下,Dir函数只返回文件名,而不返回子文件夹名。如果想要两者都返回,则需要加上vbDirectory参数。示例代码如下:

    F = Dir("F:userdataDesktop新建文件夹" , vbDirectory)

    特别要注意的是,子文件夹包括“.”和“..”两个特殊名字,分别代表本目录F:userdataDesktop新建文件夹及其父目录F:userdataDesktop。

    Dir函数只能返回第一层的子文件夹和文件名,子文件夹下的文件与文件夹不返回。

    展开全文
  • 上回书说到,如何用EXCEL建立自己的工作台(导航与日志),有朋友说,自己的文件太多了,做起导航很费劲。别急,其实我们可以快速提取文件名,以便于我们批量建立...提取当前文件夹下的文件、文件夹名称(不含子文件...

    e28216de-7c14-eb11-8da9-e4434bdf6706.png

    e48216de-7c14-eb11-8da9-e4434bdf6706.png

    上回书说到,如何用EXCEL建立自己的工作台(导航与日志),有朋友说,自己的文件太多了,做起导航很费劲。别急,其实我们可以快速提取文件名,以便于我们批量建立超链接。

    延伸阅读:

    点墨楼:高效秘技!用EXCEL制作导航页和日志表管理日常工作zhuanlan.zhihu.com
    e88216de-7c14-eb11-8da9-e4434bdf6706.png

    1. 无门槛通用bat法——用批处理脚本提取文件名

    >>>>提取当前文件夹下的文件、文件夹名称(不含子文件夹)

    新建一个文本文档,命名为“提取文件名”。

    打开文本文档,输入公式:dir *.*/b>文件清单.txt

    eb8216de-7c14-eb11-8da9-e4434bdf6706.png
    dir为列表命令,/b为只保留文件名和扩展名参数,&gt;为将命令结果导入到指定文件内

    将文本文档的文件类型改为bat,即将“提取文件名.txt”更改为“提取文件名.bat”。如果你的电脑没有显示文件扩展名,另存为.bat文件即可。

    注:bat文件就是批处理文件,DOS年代的命令,不挑系统。

    双击bat文件运行,即可得到文件清单:

    ef8216de-7c14-eb11-8da9-e4434bdf6706.png

    >>>>提取当前文件夹下的文件、文件夹名称(包括子文件夹),输出文件树

    上述方法有时候并不能满足我们,比如,有的同事就喜欢将文件分门别类都放到文件夹下。然后,我去查一个文件,就需要一个个文件夹去找,点了十几下,最后发现还是个空文件夹,真是让人心累。

    有没有办法能够将文件夹下所有文件的名称都提取出来?
    有!而且可以提取成文件树!

    步骤同上,公式替换成:tree /F > 文件树1.txt

    f08216de-7c14-eb11-8da9-e4434bdf6706.png

    运行结果如下:

    f18216de-7c14-eb11-8da9-e4434bdf6706.png

    瞧,我就在某人的电脑下发现了秘密文件(上图倒数第三行),抓他个现行。

    点开一看

    .

    .

    .

    .

    .

    .

    .

    f28216de-7c14-eb11-8da9-e4434bdf6706.png
    这什么标题党?

    >>>>仅提取当前文件夹名称(包含子文件夹)

    步骤同上,公式替换成:tree > 文件树2.txt

    f48216de-7c14-eb11-8da9-e4434bdf6706.png

    运行结果如下(不提取文件的名称):

    f78216de-7c14-eb11-8da9-e4434bdf6706.png

    方法小结:

    f98216de-7c14-eb11-8da9-e4434bdf6706.png

    上述三种方法输出文件都可以改变类型,扩展名“.txt”替换成对应的文件扩展名就可以了,比如替换成“.xls”就生成EXCEL文件。

    2. WIN10党福利——复制路径

    新系统带来新功能,WIN10系统可以直接选中文件,复制路径。

    ff8216de-7c14-eb11-8da9-e4434bdf6706.png

    粘贴到EXCEL表格中:

    028316de-7c14-eb11-8da9-e4434bdf6706.png

    EXCEL 2016及以上版本可以用快速填充命令,得到文件名。

    048316de-7c14-eb11-8da9-e4434bdf6706.png

    EXCEL版本低也没关系,可以用替换,将“文件名之前的路径”替换为“空”。

    058316de-7c14-eb11-8da9-e4434bdf6706.png

    3. 高阶VBA大法——用EXCEL提取文件名

    上面两种方法简单快捷,但有一个缺点,每次文件有变化,还需要重新运行一次批处理命令,再粘贴到EXCEL中。

    能不能将更简单一点?
    可以,用EXCEL的VBA功能即可。

    VBA是微软的一种宏语言,EXCEL学会使用VBA就相当于打开了一片新天地。

    具体方法:

    1)插入一个长方形,输入名称,然后制定宏。(此步骤是为了方便运行,非必须)

    098316de-7c14-eb11-8da9-e4434bdf6706.png

    2)新建宏。

    0b8316de-7c14-eb11-8da9-e4434bdf6706.png

    3)将下面的代码复制代码框中:

    Sub 提取文件名()
    On Error GoTo 100
    Dim wsh As Object, mypath As String, ar, i&, br
    mypath = CreateObject("shell.application").BrowseForFolder(0, "请选择要搜索的文件夹", 0).Items.Item.Path '在此指定目录
    Set wsh = CreateObject("wscript.shell")
    mypath = wsh.exec("cmd /c tree /f " & Chr(34) & mypath & Chr(34)).StdOut.ReadAll
    mypath = Left(mypath, Len(mypath) - 1)
    ar = Split(mypath, vbCrLf)
    ReDim br(1 To UBound(ar) + 1, 1 To 1)
    For i = 0 To UBound(ar)
    br(i + 1, 1) = ar(i)
    Next
    Range("a1").Resize(UBound(br)) = br
    Set wsh = Nothing
    100:
    End Sub

    以上代码来自EXhome论坛@yangyangzhifeng(学习VBA编程还是颇耗时间的,网上很多代码可以借鉴)

    0f8316de-7c14-eb11-8da9-e4434bdf6706.png

    4)点击长方形按钮运行,选择制定提取文件树的文件夹。

    118316de-7c14-eb11-8da9-e4434bdf6706.png

    得到文件树:

    148316de-7c14-eb11-8da9-e4434bdf6706.png

    也有代码可以实现只提取文件名(类似dir批处理命令的效果),下期告诉你。

    总结

    158316de-7c14-eb11-8da9-e4434bdf6706.png

    文件名提取成功了,那如何快速建立超链接呢?且听下回分解!

    展开全文
  • 近日在工作中常常遇到需要将多个工作薄中工作表合并到一张工作表里,手动打开每个工作薄复制里面内容然后粘贴进同一张表里非常麻烦,最近在学习vba,所以自己练习写了一段代码以简化工作。(为了防止自己忘记...

    近日在工作中常常遇到需要将多个工作薄中的工作表合并到一张工作表里,手动打开每个工作薄复制里面的内容然后粘贴进同一张表里非常麻烦,最近在学习vba,所以自己练习写了一段代码以简化工作。(为了防止自己忘记python,工作中遇到的问题用vba实现了以后,也会全部用python实现一遍,本文也对python实现文件合并的代码做了解释)

    vba实现文件合并有两个重要的知识点:1. 使用dir函数读取每个文件的文件名 2.使用工作表函数counta()获取单元格使用区域的最大行数和列数 (注:counta()只能获取非空单元格的数量,所以使用counta()计算时的作为其参数的行或列必须没有空值,这样才能准确计算数据区域的最大行列数)

    获取vba单元格使用区域最大行数和列数的方法还有:sheet1.Range(“A65536”).End(x1up). row

    sheet1.Range(“IV1”).End(x1toleft). column

    但是以上代码我在运行时报错(具体原因未明)

    另外,在其他人的分享里也有看到使用sheet1. usedrange.rows.count

    sheet1.usedrange.columns.count

    来获取已使用的单元格的最大行数和列数,这个获取出来的行列数有可能会比工作表现有数据区域的行列数要大,因为它获取的是使用过的单元格区域最大行列数,如果工作表的数据区域有过删除行操作,那么它返回的还是删除之前的行列数。

    下面介绍一下dir()的用法:str=dir("D:data*.*")

    str=dir

    如上所示,参数是工作簿存储的路径,使用*通配符可以获得D盘data文件夹下所有文件(如果你有别的需求可以自己改成*.xls,*.csv,*.xls*等)第一行代码返回文件夹下第一个文件的名称,第2行代码返回第二个文件的名称,继续使用str=dir可以继续获取后面的文件的名称,直到str返回为空,则说明所有文件的名字都已经遍历过了,再继续使用str=dir则程序会报错。

    vba具体实现如下:

    d20059768ee4c7830a72e6a22e95522a.png

    m1,m2是打开的EXCEL文件的行数和列数;n是编写宏的这个工作簿中的表的当前的行数。

    另外,为什么使用counta()而不使用count()来对单元格计数?counta()计算非空单元格的个数,无论单元格的值是文本数据、数值数据或日期数据,使用counta()都会计算进来;但是count()只计算数值型数据的单元格个数。

    python实现代码如下:

    2a7291af2888b448aa5181a5d01b47c4.png

    python实现主要使用os模块下listdir()函数,这个函数可以将当前路径下的所有文件的文件名以列表的形式返回(当然,首先要使用os模块下的chdir()跳转到需合并的文件的文件路径下);最后合并文件使用pandas模块下的concat()函数。

    展开全文
  • 这项任务就是将图片文件名款号单独复制黏贴到EXCEL表中,如图:将图片文件名款号如红色框框圈中F293232029,复制到Excel表中,如果1个文件名中有多个款号都要复制到Excel表中,如果款号一样就不要复制...

    前几天领导安排了同事一项任务,因为任务量非常大,基本上整个部门都去支援了。这项任务就是将图片文件名中的款号单独复制黏贴到EXCEL表中,如下图:

    967159696d9d916f642ccb182a10aeef.png

    将图片文件名中的款号如红色框框圈中的F293232029,复制到Excel表中,如果1个文件名中有多个款号都要复制到Excel表中,如果款号一样就不要复制黏贴了。因为图片太多,所以每个同事包括我都分到了200张左右的图片。。。。T_T

    fe4008ff998425c233fdc14c582b5020.png

    手动复制黏贴是不可能的,这辈子都不可能的,机械的工作当然是用机器去做~~~

    —— —— —— —— ——手动分割—— —— —— —— —— ——

    思路:①批量获取每个图片的文件名,②批量获取每个文件名中的款号复制黏贴

    第一步批量获取文件名:思路我懂但方法我不懂啊,于是遵循着有不懂就百度的原则,很幸运成功搜到了方法。

    1、首先打开要提取文件名的文件夹,新建一个txt文本文件。

    2、编辑txt文本,输入以下批处理命令,保存文本文件。

    dir *.* /b >a.txt

    3、更改txt文件的后缀为.bat,将其转换为批处理文件。

    4、双击执行批处理文件,实现批量提取文件名。

    噔噔噔噔~~~~在文件夹中找到txt后缀的文件名,打开它,它已经将文件夹中的所有文件名都记录了(我认真的看了一遍,它把自己的文件名也记录进去了)

    5207ee83448d059836101d2a72ee9189.png

    第二步用VBA的正则方法将款号提取出来。

    1、首先将记事本中的记录全部复制黏贴到Excel表中。

    0240248b7e97d1a98ed6fb2a528f64e0.png

    2、观察后发现商品款号是基本是以R、F、RW开头,于是乎本着不懂就百度的原则,搜索了下“如何提取固定字母开头的款号”找到了一些VBA代码,在这些代码基础上我修改了一下(差不多修改70%吧)

    Sub test()
      Dim r%, i%
      Dim arr
      Dim brr()
      Dim reg As New RegExp '定义正则
      With reg
        .IgnoreCase = True '不区分大小写
        .Global = True   '全部范围内匹配
        .Pattern = "(?:R|F|RW|RM)?(d+)"  '匹配条件
      End With
      With Worksheets("vba11")
        r = .Cells(.Rows.Count, 1).End(xlUp).Row
        arr = .Range("a1:a" & r)
        For i = 1 To UBound(arr)
          Set mh = reg.Execute(arr(i, 1)) '将正则模式应用于字符串,并返回Matchs匹配结果集合
          If mh.Count > 0 Then  '结果条目计数判断
             For t = 0 To mh.Count - 1
               ' H = mh.Item(t)条目值
                If mh.Item(t).Length >= 10 Then   '判断匹配结果款号长度
                K = K + 1
                ReDim Preserve brr(1 To 1, 1 To K) '保留原数组并重新定义数组
                brr(1, K) = mh.Item(t)
                End If
             Next
          End If
        Next
        .Range("c1").Resize(UBound(brr, 2), 1) = Application.Transpose(brr) '结果转置
      End With
    End Sub

    有个重新定义数组的地方跟你们分享下,ReDim Preserve brr(1 To 1, 1 To K) 重新定义数组,只能对数组的最后一维进行扩充,千万不要这样 ReDim Preserve brr( 1 To K,1 To 1)。

    3、代码运行后成果

    86a277ea15d29831841aa7472fc856ba.png

    C列结果中有款号是重复的,违背了领导要求的“如果款号一样就不要复制黏贴了”,那就选中C列点击删除重复项吧,哈哈。如果你连这一步也不想操作的话,就用VBA的字典功能去重吧。

    以上,over!

    展开全文
  • 如何获取指定文件夹下文件名称?很久以前(2年前?)我们分享过DOS方法,操作动画如下:VBA可以通过Wscript.Shell调用DOS语句,以后我们可能会分享到这部分内容~所以这里先简单说下动画中DOS语句意思DIR *.*/B&...
  • Dim fn$ '定义一些要用到变量,分别获取文件夹名,文件名 Set Fso = CreateObject("Scripting.FileSystemObject") '创建文件操作 Set fd = Application.FileDialog(msoFileDialogFolderPicker) '用对话框...
  • 编按:哈喽,大家好!前段时间我们和大家分享了使用...在实际工作中,出于建立目录或者核查表格收集进度等目的,我们经常需要提取文件夹所有文件名称。在不使用VBA的情况,我们该如何实现这一需求呢?方法有很...
  • 在实际工作中,出于建立目录或者核查表格收集进度等目的,我们经常需要提取文件夹所有文件名称。在不使用VBA的情况,我们该如何实现这一需求呢?方法有很多,今天小花就和各位小花瓣分享其中比较实...
  • 131.删除表格中使用范围内的所有空白单元格 132.返回数组中有多少个指定的字符串 133.返回当前工作表中引用了指定的单元的地址 134.获取Excel中字型列表 135.获取一个字符串中有多少个数字字符 136.在Excel中对多列...
  • Excel VBA实用技巧大全 附书源码

    热门讨论 2010-10-08 18:59:24
    04055获取计算公式的所有引用单元格 04056获取计算公式中引用的其他工作表单元格 04057获取某个单元格的从属单元格 04058引用某个单元格所在的整个行 04059引用某个单元格所在的整个列 04060引用单元格区域所在的行...
  • VBA常用技巧

    2014-12-21 16:39:28
    77-2 获取选定文件的文件名 12 77-3 使用“另存为”对话框 12 技巧78 调用操作系统“关于”对话框 12 第7章 菜单和工具栏 12 技巧79 在菜单中添加菜单项 12 技巧80 在菜单栏指定位置添加菜单 12 技巧81 屏蔽和删除...
  • VBA学习笔记之DIR函数

    2019-09-26 00:36:49
    Dir()主要用于获取(遍历)目录下的文件名 Sub open_all_files() Dim a a = Dir("C:\Users\Administrator\Desktop\新建文件夹\*.txt")'将txt结尾的所有文件打开,但是在这里只打开第一个符合的文件,接下来的...
  • VBA编程技巧大全

    2013-08-05 09:03:19
    77-2 获取选定文件的文件名 186 77-3 使用“另存为”对话框 188 技巧78 调用操作系统“关于”对话框 190 第7章 菜单和工具栏 192 技巧79 在菜单中添加菜单项 192 技巧80 在菜单栏指定位置添加菜单 195 技巧81 屏蔽和...
  • 在日常工作中,修改文件名称是平常事情,如果只是...第一个大步骤:需要批量获取原文件名称所有的图片都放在一个叫“图片”的文件夹里面,如图所示批量获取文件名的方法有很多,本文是用VBA来完成1、新建一张...
  • 函数作用:取消所有隐藏宏表.......................97 '96.函数作用:导出VBA Project代码.....................97 '97.函数作用:导入VBA Project代码.....................97 '98.函数作用:取得汉字拼音第一个...
  • 审计师在归档时候,会大量整理文件,比如对归档附件重命名。...获取文件名选择一个文件夹目录,获取文件夹目录下所有文件(不获取文件夹)代码如下:Sub Getfd(ByVal pth) Set Fso = CreateObject("s...
  • 审计师在归档时候,会大量整理文件,比如对归档附件重命名。...获取文件名选择一个文件夹目录,获取文件夹目录下所有文件(不获取文件夹)代码如下:Sub Getfd(ByVal pth) Set Fso = CreateObject("s...
  • Excel百宝箱9.0无限制破解版

    热门讨论 2012-02-03 19:05:29
    【建立图片目录】:对指定文件夹下所有图片(GIF、PNG、JPG,JPEG)建立目录,并批量导入 【批量导入图片(精确匹配)】:瞬间导入所有与选区字符同名图片到单元格,可以自由设定图片大小及格式,且全部统一对齐...
  • Excel百宝箱

    2012-10-27 17:09:21
    【建立图片目录】:对指定文件夹下所有图片(GIF、PNG、JPG,JPEG)建立目录,并批量导入 【批量导入图片(精确匹配)】:瞬间导入所有与选区字符同名图片到单元格,可以自由设定图片大小及格式,且全部统一对齐...
  • excel 工具箱

    2012-01-22 15:04:34
    【建工作表目录】:对当前工作簿的所有工作表建立目录与编号,且生成链接,单击可以打开工作表 【批量新建/复制工作表】:批量新建或者复制工作表,可以瞬间建立/复制1到255个。还可以在新建或复制时全自动命名 ...
  • 【建立图片目录】:对指定文件夹下所有图片(GIF、PNG、JPG,JPEG)建立目录,并批量导入 【批量导入图片(精确匹配)】:瞬间导入所有与选区字符同名图片到单元格,可以自由设定图片大小及格式,且全部统一...
  • 【建立图片目录】对指定文件夹下所有图片(GIF、PNG、JPG、JPEG四种格式)建立目录 ,包括名称目录及批量导入图片,可以自由设置其大小 【批量导入图片(精确匹配)】根据选区的文件名瞬间导入所有同名图片到单元格...
  • Windows XP(包括 Windows 2000)的控制台命令是在系统出现一些意外情况下的一种非常有效的诊断和测试以及恢复系统功能的工具。小编的确一直都想把这方面的命令做个总结,这次辛苦老范给我们整理了这份实用的秘笈。 ...
  • 【建立图片目录】:对指定文件夹下所有图片(GIF、PNG、JPG,JPEG)建立目录,并批量导入 【批量导入图片(精确匹配)】:瞬间导入所有与选区字符同名图片到单元格,可以自由设定图片大小及格式,且全部统一对齐...
  • EXCEL百宝箱8.0终极版

    2011-11-05 16:48:02
    【建工作表目录】:对当前工作簿的所有工作表建立目录与编号,且生成链接,单击可以打开工作表 【批量新建/复制工作表】:批量新建或者复制工作表,可以瞬间建立/复制1到255个。还可以在新建或复制时全自动命名 ...
  • Excel百宝箱8.0

    2011-06-07 21:32:17
    【建工作表目录】:对当前工作簿的所有工作表建立目录与编号,且生成链接,单击可以打开工作表 【批量新建/复制工作表】:批量新建或者复制工作表,可以瞬间建立/复制1到255个。还可以在新建或复制时全自动命名 ...

空空如也

空空如也

1 2
收藏数 27
精华内容 10
关键字:

vba获取文件夹下的所有文件名