全民一起VBA提高篇-第十二回

同是藏身文件夹   相逢何必问姓名

主要内容

一、关于文本编号

1.正在打开的文件,必须有唯一的编号;

2.文件关闭后,编号释放并可以重用;

二、如何打开同一文件夹下所有文件:DIR

Sub dirTest()

    Dim f as string

    f=dir("d:\demo2\")

    f=dir

    Msgbox f

End Sub

提示1:程序运行结果将返回D盘下名为demo2文件夹下第一个文件的名字;

提示2:DIR函数查找文件的顺序在不同系统中各不相同,往往与我们看到的不一致;

提示3:目录名以反斜杠“\”结尾代表文件夹,否则会被当做一个文件,即D盘下名为“demo2"的文件;

提示4:当dir返回空字符串时,代表所有文件名都已被找到,本次查找结束;

提示5:第二个f=dir代表:接着前一次,继续在同一文件夹中寻找下一个文件名;

提示6:dir后面写参数与不写参数的区别。Dir(文件夹)代表(重新)返回该文件夹的第一个文件名,不论之前已经找到多少文件;

Sub dirDemo()

Dim f as string

f=Dir("d:\demo2\")

Do While f<>""

Call readFrom File("d:\dmoe2\" & f)

f=Dir

Loop

End Sub

提示1:程序运行结果代表对名为f的文件夹进行打开和读取操作;

提示2:Do While 内部调用了子程序,子程序见基础篇第十五回;

提示3:因为dir只能返回一个文件的名字,如“上海客户.txt",不包括盘符。但子程序中的Open语句必须知道所有信息,如"D:\demo2\上海客户.txt"。所以不能将dir返回的f直接交给子程序,需要在前面加上盘符。Call readFrom File("d:\dmoe2\" & f)

Sub readFromFile(fullName As String)

Dim ws As Worksheet,i as Long ,s as String

    Set ws = Worksheets.Add

    ws.Name =Mid(fullName,InStrRev(fullName,"\")+1)

    Open fullName For Input As #1

    i=1

Do While Not EOF(1)

Line Input #1,s

ws.cells(i,2)=Left(s,2)

ws.cells(i,3)=Mid(s,Instr(s,"电话")+3,8)

i=i+1

Loop

Close #1

  End Sub

提示4:以上为子程序;

提示5:dir返回的是所有文件的名字,可以是各种类型,不仅仅是.txt;

三、文件夹中既有文本文件,也有excel文件,如何只打开文本文件

Sub OpenAllExcelfile()

    Dim path As String, fileName As String

    Dim w As Workbook

    path = "d:\demo\"

    fileName = Dir(path)

    Do While fileName <> ""

        If LCase(Right(fileName, 5)) = ".xlsx" Then

            Set w = Workbooks.Open(path & fileName)

            w.Close

        End If

        fileName = Dir

    Loop 

End Sub

提示1:以上程序运行结果是将d盘下demo文件夹下所有的excle文件全部打开关闭一次

Sub 打开所有excel()

    Dim fileName As String

    Dim w As Workbook

    fileName = Dir("d:\demo\*.xlsx")

    Do While fileName <> ""

          Set w = Workbooks.Open("d:\demo\" & fileName)

           w.Close

        fileName = Dir

    Loop

End Sub

提示1:dir函数中的*代表通配符,代表任意长度,任意内容的字符串

Sub OpenSomeTxtFiles()

    Dim filename As String

    filename = Dir("d:\demo\a*.txt")

    Do While filename <> ""

        Open "d:\demo\" & filename For Input As #1

        Close #1

        filename = Dir

    Loop

End Sub

提示1:以上程序以Open for input as的形式打开,单步运行结果并未看到真正打开的txt文件,但看到了filename的变化。换成xlsx也一样。

提示2:通配符前a代表打开首字母为a的文件

Sub dir的另外用途()

    Dim filename As String

    filename = Dir("d:\demo\存在吗.xlsx")

    MsgBox filename

End Sub

提示1:上述程序运行结果msgbox显示为空值,代表dir括号中的内容不是以“\"结尾,则返回的是一个文件的名字。

提示2:因此,dir(路径名+文件全名)可以用来判断文件是否存在:如果返回的是空字符串,则代表该文件不存在。

Sub 判断文件是否存在(filename As String)

    If Dir(filename) <> "" Then

        Open filename For Input As #1

        Close #1

    Else

        MsgBox "对不起,改文件并不存在,无法打开“"

End Sub

提示1:以上程序为子过程,接收主程序传来的filename,然后打开并读入。

提示2:用途:在打开传来的文件名之前,先判断是否存在,以免出错。

提示3:dir在默认情况下只返回文件的名字,对于文件夹的名字,需要另外加入参数vbdirectoty

Sub 搜索文件夹名字()

    Dim f As String

    f = Dir("d:\demo\", vbdirectory)

    Do While f <> ""

        MsgBox f

        f = Dir

    Loop

End Sub

提示1:运行上述程序会返回"."  ".."以及文件夹下所有文件夹及文件的名称。

提示2:"."和”.."分别代表本目录(d:\demo\)及其父目录(d:\)

提示3:dir函数不会查找子文件夹中的文件及文件名;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容