『壹』 vba提取多層文件夾的*.xls文件,根據獲取到的文件名及路徑逐個打開*.xls文件,去判斷某幾列有多少個數據
一、所需DOS命令
dir [drive:][path] /b > [drive:][path]filename
二、應用實例
如下圖,在D盤中,有一個名稱為「TQIPC」的文件夾,這個文件夾裡面,存放了很多的照片!
看到了沒有,文件夾中的照片名稱,自動就顯示在excel表格中了!
該dos命令非常強大,用好dos命令,可省去我們很多的功夫。
三、知識擴展
下面,再給大家一個例子,即,自動根據照片(根據人物名稱),建立文件夾。
如果某個文件夾下面,您存放的是某些人物的照片,並且,每個人物的照片,都使用其名字來命名;這個時候,如何要自動根據人物的自動建立其對應的文件夾,也相當方便!
操作的方法是,先根據上述的方法,獲取所有人物的照片的名稱,生成EXCEL文件;
然後,在人物名稱列前面,插入一列,並輸入MD;
接下來,使用查找替換功能,將excel文件中的人物名稱,去掉擴展名(只保留名字);
最後,將excel的內容,復制粘貼到記事本中,現在,我們就得到了形如:「MD人物名稱」這樣的命令格式了。(md 文件名稱,該命令格式,是使用來建立文件夾的命令,上述的操作,都是為此做准備!)
將記事本文件保存成為形如:124.bat格式的文件,最後,雙擊此文件,文件夾名稱就自動建立好了!
『貳』 vba 遍歷指定文件夾(含子目錄)獲取文件名,哪種方法速度最快
Sub LoopAllExcelFilesInFolder()
Dim wb As Workbook
Dim myPath As String
Dim myFile As String
Dim myExtension As String
Dim FldrPicker As FileDialog
'這里很關鍵,決定宏執行快慢的關鍵
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
'打開目錄選擇框
Set FldrPicker = Application.FileDialog(msoFileDialogFolderPicker)
With FldrPicker
.Title = "請選擇目錄"
.AllowMultiSelect = False
If .Show <> -1 Then GoTo NextCode
myPath = .SelectedItems(1) & "\"
End With
'取消選擇
NextCode:
myPath = myPath
If myPath = "" Then GoTo ResetSettings
'指定過濾的文件後綴
myExtension = "*.xls*"
'遍歷全路徑
myFile = Dir(myPath & myExtension)
'循環處理每一個文件
Do While myFile <> ""
'打開
Set wb = Workbooks.Open(Filename:=myPath & myFile)
'確保工作簿被打開,在處理下一個文件時
DoEvents
'設置背景色
wb.Worksheets(1).Range("A1:Z1").Interior.Color = RGB(51, 98, 174)
'保存工作簿
wb.Close SaveChanges:=True
'確保工作簿被關閉,在處理下一個文件時
DoEvents
'接著處理下一個
myFile = Dir
Loop
'提示處理完成
MsgBox "處理完成!"
ResetSettings:
'恢復設置
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
『叄』 Excel VBA列出某文件夾下子文件夾及文件名
遍歷文件夾 並列出文件 & 文件夾 名 代碼如下:
在文件夾內 新建 個 Excel文件
Excel文件內 按 Alt+F11 視圖--代碼窗口, 把如下代碼復制進去, F5運行
Sub遍歷文件夾()
'OnErrorResumeNext
Dimfn(1To10000)AsString
Dimf,i,k,f2,f3,x
Dimarr1(1To100000,1To1)AsString,qAsInteger
Dimt
t=Timer
fn(1)=ThisWorkbook.path&""
i=1:k=1
DoWhilei<UBound(fn)
Iffn(i)=""ThenExitDo
f=Dir(fn(i),vbDirectory)
Do
IfInStr(f,".")=0Andf<>""Then
k=k+1
fn(k)=fn(i)&f&""
EndIf
f=Dir
LoopUntilf=""
i=i+1
Loop
'*******下面是提取各個文件夾的文件***
Forx=1ToUBound(fn)
Iffn(x)=""ThenExitFor
f3=Dir(fn(x)&"*.*")
DoWhilef3<>""
q=q+1
arr1(q,1)=fn(x)&f3
f3=Dir
Loop
Nextx
ActiveSheet.UsedRange=""
Range("a1").Resize(q)=arr1
MsgBoxFormat(Timer-t,"0.00000")
EndSub
效果如圖:
『肆』 用VBA代碼如何獲得指定文件夾內的所有子文件夾名稱
Set fso=CreateObject("Scripting.FileSystemObject")
Set folder=fso.GetFolder("D:")
dim a() as string
dim b
b=1
for each thing in folder.subfolders
addfolder fso,thing,a,b
next
msgbox b
function addfolder(byref fso,byref dir,byref a,byref b)
set folder=fso.getfolder(dir)
a(b)=dir
b=b+1
For Each thing in folder.SubFolders
set folder=fso.getfolder(thing)
a(b)=thing
b=b+1
addfolder fso,thing,a,b
Next
end function