Tôi muốn trả về kích thước tệp của một số tệp trong cùng một thư mục hoặc trong một tệp khác với VBA trong Excel 2010.Chức năng VBA Excel để trả về kích thước tệp theo byte
Trả lời
Ở đây cách sử dụng nó trong Excel Cell:
=GetDirOrFileSize("C:\Users\xxx\Playground\","filename.xxx")
Nếu bạn có một Windows Đức hơn:
=GetDirOrFileSize("C:\Users\xxx\Playground\";"filename.xxx")
đây là chức năng cho các modul VBA: (Chỉ cần cho phép các công cụ phát triển, và sao chép và dán vào một modul mới)
Function GetDirOrFileSize(strFolder As String, Optional strFile As Variant) As Long
'Call Sequence: GetDirOrFileSize("drive\path"[,"filename.ext"])
Dim lngFSize As Long, lngDSize As Long
Dim oFO As Object
Dim oFD As Object
Dim OFS As Object
lngFSize = 0
Set OFS = CreateObject("Scripting.FileSystemObject")
If strFolder = "" Then strFolder = ActiveWorkbook.path
If Right(strFolder, 1) <> "\" Then strFolder = strFolder & "\"
'Thanks to Jean-Francois Corbett, you can use also OFS.BuildPath(strFolder, strFile)
If OFS.FolderExists(strFolder) Then
If Not IsMissing(strFile) Then
If OFS.FileExists(strFolder & strFile) Then
Set oFO = OFS.Getfile(strFolder & strFile)
GetDirOrFileSize = oFO.Size
End If
Else
Set oFD = OFS.GetFolder(strFolder)
GetDirOrFileSize = oFD.Size
End If
End If
End Function '*** GetDirOrFileSize ***
Điều này rất lạ! Bạn nghĩ cái gì ';' đang làm? Nó có tách hai thông số của hàm của bạn hay nó hoạt động như một toán tử nối? Tôi chưa bao giờ thấy nó được sử dụng như trước đây, và chỉ trong các câu lệnh 'Print' như sau. Trong hàm của bạn, có phải 'IsMissing (StrFile)' trả về Đúng hay Sai? Dấu chấm phẩy cũng được sử dụng nếu bạn gọi hàm từ bên trong VBA, hoặc chỉ khi nó là một hàm bảng tính? – Floris
';' là một tùy chọn cài đặt ngôn ngữ trong Windows, bạn có thể thay đổi nó mọi lúc. Trong cài đặt tiếng Đức, ',' không hoạt động trong excel như một dấu tách. Nó nằm trong Cài đặt, Khu vực và Ngôn ngữ dưới dạng Định dạng tiếng Đức. – xmux
Có một VBA chức năng rất tốt đẹp và đơn giản, mà đã không được đề cập đến nay, FileLen:
FileLen("C:\Temp\test file.xls")
Nó trả về kích thước của các tập tin trong byte.
Kết hợp với lặp qua các tệp trong thư mục, bạn có thể đạt được những gì bạn muốn ban đầu (có kích thước tệp trong thư mục).
Rất tiếc, nó chỉ hoạt động với <2GB tệp trừ khi bạn sử dụng một số phép tính đặc biệt, sau đó nó bị giới hạn ở <4GB. – NetMage
xin lỗi lỗi của tôi, chức năng hoạt động hoàn hảo. Máy tính của tôi là trong cài đặt ngôn ngữ Đức đó là lý do tại sao tôi cần phải sử dụng ";" không "," Cảm ơn anyway – xmux
Thay vì 'Nếu phải (strFolder, 1) <>" \ "Sau đó strFolder = strFolder &" \ "' và sau đó 'strFolder & strFile' chỉ sử dụng' OFS.BuildPath (strFolder, strFile) '. –
Hãy chỉnh sửa câu hỏi để phản ánh cái nhìn sâu sắc mới của bạn, đăng câu trả lời hoặc xóa nó ... Ngay bây giờ nó chỉ ngồi ở đó không được trả lời, có khả năng lãng phí thời gian của mọi người. – Floris