Функция VBA Excel для возврата размера файла в байтах

Я хочу вернуть размер файла некоторых файлов в той же папке или в другой с VBA в Excel 2010.

3 ответов


существует очень хорошая и простая функция VBA, которая до сих пор не упоминалась,FileLen:

FileLen("C:\Temp\test file.xls")

он возвращает размер файла в байт.

в сочетании с циклическим перебором файлов в каталоге можно достичь того, что вы изначально хотели (получить размеры файлов в папке).


вот как использовать его в ячейке Excel:

 =GetDirOrFileSize("C:\Users\xxx\Playground\","filename.xxx")

Если у вас есть немецкие окна, чем:

=GetDirOrFileSize("C:\Users\xxx\Playground\";"filename.xxx")

вот функция для модуля VBA: (просто включите инструменты разработчика и скопируйте и вставьте это в новый модуль)

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 ***

Это ответ на вопрос относительно использования точки с запятой ; в качестве разделителя параметров.

в местных жителей (как мы), которые используют точку/fullstop . как десятичная точка, кома , используется как разделитель списка, в данном случае как разделитель в списке параметров функций и процедур VBA.

в других местных жителей (как DE и Европы в целом), где десятичной точкой является кома , то все будет странно, если один и тот же символ использовался как разделитель списка, поэтому semcolon ; используется вместо