0
我想嘗試一些東西,我確信這是可能的,但不是真正肯定!從excel中讀取文件夾和任何文檔屬性?
在MS Excel(2003年),我可以寫一個腳本,VBA,這將打開一個位置(例如:S://公共/營銷/文件/),並列出位於那裏(文件名)內的所有文件?
的最終目標將是有文件名,最後修改日期,創建和名稱修改日期。
這可能嗎?我想返回表單中行中找到的任何值。例如:類型:文件夾,鍵入:Word文檔等
感謝您的信息!
我想嘗試一些東西,我確信這是可能的,但不是真正肯定!從excel中讀取文件夾和任何文檔屬性?
在MS Excel(2003年),我可以寫一個腳本,VBA,這將打開一個位置(例如:S://公共/營銷/文件/),並列出位於那裏(文件名)內的所有文件?
的最終目標將是有文件名,最後修改日期,創建和名稱修改日期。
這可能嗎?我想返回表單中行中找到的任何值。例如:類型:文件夾,鍵入:Word文檔等
感謝您的信息!
最近做了。使用DSOFile對象。在Excel-VBA中,首先需要創建對Dsofile.dll(「DSO OLE文檔屬性閱讀器2.1」或類似文檔)的引用。另外,請檢查你的辦公室圖書館
首先引用您可能要選擇要檢查的文件路徑
Sub MainGetProps()
Dim MyPath As String
MyPath = GetDirectoryDialog()
If MyPath = "" Then Exit Sub
GetFileProps MyPath, "*.*"
End Sub
讓我們有一個很好的路徑選擇窗口
Function GetDirectoryDialog() As String
Dim MyFD As FileDialog
Set MyFD = Application.FileDialog(msoFileDialogFolderPicker)
With MyFD
.AllowMultiSelect = False
.Show
If .SelectedItems.Count <> 0 Then
GetDirectoryDialog = .SelectedItems(1)
End If
End With
End Function
現在讓我們使用DSO對象讀出信息...我將代碼縮減爲必要的代碼
Private Sub GetFileProps(MyPath As String, Arg As String)
Dim Idx As Integer, Jdx As Integer, MyFSO As FileSearch, MyRange As Range, MyRow As Integer
Dim DSOProp As DSOFile.OleDocumentProperties
Set DSOProp = New DSOFile.OleDocumentProperties
Set MyRange = ActiveSheet.[A2] ' your output is nailed here and overwrites anything
Set MyFSO = Application.FileSearch
With MyFSO
.NewSearch
.LookIn = MyPath
.SearchSubFolders = True ' or false as you like
.Filename = Arg
.FileType = msoFileTypeAllFiles
If .Execute() > 0 Then
MsgBox .FoundFiles.Count & " file(s) found." ' to see what you will get
For Idx = 1 To .FoundFiles.Count
DSOProp.Open .FoundFiles(Idx) ' examine the DSOProp element in debugger to find all summary property names; not all may be filled though
Debug.Print .FoundFiles(Idx)
Debug.Print "Title: "; DSOProp.SummaryProperties.Title
Debug.Print "Subject: "; DSOProp.SummaryProperties.Subject
' etc. etc. write it into MyRange(Idx,...) whatever
' now hunt down the custom properties
For Jdx = 0 To DSOProp.CustomProperties.Count - 1
Debug.Print "Custom #"; Jdx; " ";
Debug.Print " Name="; DSOProp.CustomProperties(Jdx).Name;
If DSOProp.CustomProperties(Jdx).Type <> dsoPropertyTypeUnknown Then
Debug.Print " Value="; DSOProp.CustomProperties(Jdx).Value
Else
Debug.Print " Type=unknowwn; don't know how to print";
End If
MyRow = MyRow + 1
Next Jdx
DSOProp.Close
Next Idx
Else
MsgBox "There were no files found."
End If
End With
End Sub
那就應該是吧
祝你好運MikeD
太棒了!今天我會告訴你一切,讓你知道它是怎麼回事! – 2010-01-14 10:27:17
我已經複製了代碼,因爲你把它和一旦我確認文件夾來查看,它只是崩潰的Excel!我認爲它陷入了一些循環。我會試圖找出什麼.... – 2010-01-14 13:27:15
哎呀!在發佈之前,我通過我的調試器運行了這個程序。我有XP的Excel 2003 SP2和我引用的MSOffice 11.0對象庫,DSO OLE和MS除了默認 – MikeD 2010-01-14 14:12:00