2013-04-08 29 views
7

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

+1

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

+0

Thay vì 'Nếu phải (strFolder, 1) <>" \ "Sau đó strFolder = strFolder &" \ "' và sau đó 'strFolder & strFile' chỉ sử dụng' OFS.BuildPath (strFolder, strFile) '. –

+1

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

Trả lời

8

Ở đâ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 *** 
+0

Đ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

+0

';' 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

14

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).

+0

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