Some extra notes for this forum post: https://eileenslounge.com/viewtopic....313578#p313578
I took a look at this
Here is the test file and folder details https://i.postimg.cc/pX90bM2Q/MM-Pro...est-Folder.jpg https://i.postimg.cc/2SN78v0H/MM-Pro...est-Folder.jpg
Sample File ___ sample.wmv https://app.box.com/s/leu06ql1fu9uzt59wnoizedg85qoo7k4
Folder ___ MMPropertyTest https://app.box.com/s/27u7dyjee3rez44pdjq52uu2e7tgzu8v
File with coding in ___ Movie Maker Versions.xls https://app.box.com/s/axle7nflnmgkfbztto1wsmhc2ml2ynes
' c009 Built in VBA FileLen( ) way , ' c109 Scripting Runtime Object Library way
Code:
Sub SumSnbs_() ' http://www.eileenslounge.com/viewtopic.php?p=313578#p313578 https://www.snb-vba.eu/VBA_Bestanden.html#L_2.17
Dim FileThing As Variant, FolderThing As Variant, FlFldrNme As String
' c009 Built in VBA FileLen( ) way
Let FlFldrNme = Dir(PathName:=ThisWorkbook.Path & Application.PathSeparator & "*", Attributes:=vbDirectory + vbNormal)
Do While Left(FlFldrNme, 1) = "." ' https://www.accessforums.net/showthread.php?t=60879&p=325335#post325335
Let FlFldrNme = Dir
Loop ' While Left(FlFldrNme, 1) = "."
Do While FlFldrNme <> ""
Debug.Print FlFldrNme & " ";
Let FileThing = FileLen(ThisWorkbook.Path & "\" & FlFldrNme) ' VBA built in way
If FileThing = 0 Then ' Probably got a Folder
' c109 Scripting Runtime Object Library way
Let FolderThing = CreateObject("scripting.filesystemobject").GetFolder(ThisWorkbook.Path & "\" & FlFldrNme).Size
Debug.Print FolderThing
Else ' Probably got a file
Debug.Print FileThing & " "; ' VBA built in way
Let FileThing = CreateObject("scripting.filesystemobject").GetFile(ThisWorkbook.Path & "\" & FlFldrNme).Size
Debug.Print FileThing ' c109 Scripting Runtime Object Library way
End If
Let FlFldrNme = Dir
Loop ' While vTemp <> ""
End Sub
Results:
Code:
sample.wmv 643170 643170
Microsoft Scripting Runtime Library referrence.JPG 96231 96231
snbsize.JPG 96857 96857
Windows Script Host Object Model Library referrence.JPG 85009 85009
MySubFolder 96857
Movie Maker Versions.xls 1630720 1630720
Conclusions:
Both the in-built VBA file size function and the file size from scripting file system object appear to give a nice Bytes size number
The folder size from the scripting file system object gives a similar number. (Note that in the folder, MySubFolder, is a single file, snbsize.JPG, and I also ran the code with nothing in MySubFolder and got a size of 0. So it would appear that an empty folder has a size of the things in it.
' c309 Microsoft Shell Controls And Automation way
Code:
Sub MicrosoftShellControlsAndAutomation() ' referrence Microsoft Shell Controls And Automation https://i.postimg.cc/Fz9zrnNm/Tools-Referrences-Microsoft-Shell-Controls-And-Automation.jpg https://i.postimg.cc/sDC9S54h/Tools-Referrences-Microsoft-Shell-Controls-And-Automation.jpg
' c309 Microsoft Shell Controls And Automation way
Dim oShell As Shell32.Shell: Set oShell = New Shell32.Shell
Dim Itm As Shell32.FolderItem, objFolder As Shell32.Folder: Set objFolder = oShell.Namespace(ThisWorkbook.Path)
For Each Itm In objFolder.Items
Debug.Print Itm.Name & " " & Itm.Size & " " & objFolder.GetDetailsOf(Itm, 1)
Next Itm
End Sub
Results:
Code:
sample.wmv 643170 628 KB
Microsoft Scripting Runtime Library referrence.JPG 96231 93,9 KB
snbsize.JPG 96857 94,5 KB
Windows Script Host Object Model Library referrence.JPG 85009 83,0 KB
MySubFolder 0
Movie Maker Versions.xls 1630720 1,55 MB
Conclusion:
The .size and .GetDetailsOf(Itm, 1) seem to give different numbers and the .size looks like the nice number
It seems to be broken for a folder. The .size gives 0 and the .GetDetailsOf(Itm, 1) gives nothing
' c709 VBA Open For Input Close way
Code:
' c709 VBA Open For Input Close way
Sub c709() ' https://www.snb-vba.eu/VBA_Bestanden.html#L_2.17 Size: file size / file length in bytes
Dim vTemp As Variant
Open ThisWorkbook.Path & "\" & "sample.wmv" For Input As #1
Let vTemp = LOF(1): Debug.Print vTemp ' 643170
Close
'Open ThisWorkbook.Path & "\" & "MySubFolder" For Input As #1 ' Does not work for Folders
' Let vTemp = LOF(1): Debug.Print vTemp
'Close
End Sub
Result:
643170
Conclusions
For a file, this returns the nice Byte number. (It does not work for a folder)
The final way suggested by snb, the Windows Script Host Object Model look like it needs some more consideration, so I will look at that in the next post, https://www.excelfox.com/forum/showt...ll=1#post23918
Bookmarks