同是藏身文件夹 相逢何必问姓名
主要内容
一、关于文本编号
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函数不会查找子文件夹中的文件及文件名;