Доброго времени суток. Ваш скрипт просто шикарен, но есть один маленький вопрос. Можно ли сделать вывод не байтах, а в килобайтах (мегабайтах) соответственно. То есть по сути мне нужно 2 скрипта один выводит список с размером в КБ а другой в МБ.
Заранее благодарю.
Доброго времени суток. Ваш скрипт просто шикарен, но есть один маленький вопрос. Можно ли сделать вывод не байтах, а в килобайтах (мегабайтах) соответственно. То есть по сути мне нужно 2 скрипта один выводит список с размером в КБ а другой в МБ.
Размер файла процедура выводит в том виде, в котором она считывает его из файловой системы - в байтах. А уж добавить дополнительные столбцы для перевода ФОРМУЛАМИ байтов в кило/мега/гига и т.д.байты, надеюсь не проблема для любого пользователя Excel Но, конечно, если так уж лень один раз написать формулу и одним даблкликом размножить её на весь дополнительный столбец , то можно и чуть макрос подпилить. Для вывода в килобайтах в процедуре Sub GetAllFileNamesDict замените строку[vba]
Код
If .Name Like "*" & Mask Then oDict.Item(oDict.Count + 1) = Array(oDict.Count + 1, .Name, .Path, .DateCreated, .Size, .DateLastModified)
[/vba]на строку [vba]
Код
If .Name Like "*" & Mask Then oDict.Item(oDict.Count + 1) = Array(oDict.Count + 1, .Name, .Path, .DateCreated, .Size / 2 ^ 10, .DateLastModified)
[/vba]для мегабайт - на [vba]
Код
If .Name Like "*" & Mask Then oDict.Item(oDict.Count + 1) = Array(oDict.Count + 1, .Name, .Path, .DateCreated, .Size / 2 ^ 20, .DateLastModified)
[/vba]
Размер файла процедура выводит в том виде, в котором она считывает его из файловой системы - в байтах. А уж добавить дополнительные столбцы для перевода ФОРМУЛАМИ байтов в кило/мега/гига и т.д.байты, надеюсь не проблема для любого пользователя Excel Но, конечно, если так уж лень один раз написать формулу и одним даблкликом размножить её на весь дополнительный столбец , то можно и чуть макрос подпилить. Для вывода в килобайтах в процедуре Sub GetAllFileNamesDict замените строку[vba]
Код
If .Name Like "*" & Mask Then oDict.Item(oDict.Count + 1) = Array(oDict.Count + 1, .Name, .Path, .DateCreated, .Size, .DateLastModified)
[/vba]на строку [vba]
Код
If .Name Like "*" & Mask Then oDict.Item(oDict.Count + 1) = Array(oDict.Count + 1, .Name, .Path, .DateCreated, .Size / 2 ^ 10, .DateLastModified)
[/vba]для мегабайт - на [vba]
Код
If .Name Like "*" & Mask Then oDict.Item(oDict.Count + 1) = Array(oDict.Count + 1, .Name, .Path, .DateCreated, .Size / 2 ^ 20, .DateLastModified)
Размер файла процедура выводит в том виде, в котором она считывает его из файловой системы - в байтах. А уж добавить дополнительные столбцы для перевода ФОРМУЛАМИ байтов в кило/мега/гига и т.д.байты, надеюсь не проблема для любого пользователя Excel
Для меня к сожалению проблема... Дело в том, что при пересчете получается совершенно другой размер. Я делю байты на 1024, но в итоге Windows показывает один размер, а получается другой. Может я что-то делаю не так?
Все, я разобрался. Посмотрел не на тот файл. Все получилось. Спасибо за совет!
Размер файла процедура выводит в том виде, в котором она считывает его из файловой системы - в байтах. А уж добавить дополнительные столбцы для перевода ФОРМУЛАМИ байтов в кило/мега/гига и т.д.байты, надеюсь не проблема для любого пользователя Excel
Для меня к сожалению проблема... Дело в том, что при пересчете получается совершенно другой размер. Я делю байты на 1024, но в итоге Windows показывает один размер, а получается другой. Может я что-то делаю не так?
Все, я разобрался. Посмотрел не на тот файл. Все получилось. Спасибо за совет!AlexFans
Сообщение отредактировал AlexFans - Понедельник, 09.06.2014, 12:28
В Excel 2016 при изменении в ячейке с путем к каталогу, в котором нужно искать файлы, вылезает ошибка "runtime error 28 out of stack space". После этого все работает, но файл закрыть невозможно - только через диспетчер задач. И проц грузит.
В Excel 2016 при изменении в ячейке с путем к каталогу, в котором нужно искать файлы, вылезает ошибка "runtime error 28 out of stack space". После этого все работает, но файл закрыть невозможно - только через диспетчер задач. И проц грузит.drugojandrew
Ну, вообще-то, Вы первый, кто жалуется на такое. Значит, дело скорее всего не в процедуре, а в настройках вашего компа или установке офиса. Т.к. эффект только у Вас, а у меня Офис-2003 , то проверить, естественно, не могу. При изменении пути в ячейке С1 практически ничего не делается, кроме дописывания в конец слэша при его отсутствии: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, [C1]) Is Nothing Then [C1] = IIf(Right([C1], 1) = "\" Or [C1] = "", [C1], [C1] & "\") End Sub
[/vba]Это должно работать в любом офисе.
Если у Вас не работает, то просто для начала закомментируйте стринг. Если после этого заработает, то преобразуйте однострочный IIf в стандартный многострочный If , поставьте в начале BreakPoint и пройдите по шагам.
Ну, вообще-то, Вы первый, кто жалуется на такое. Значит, дело скорее всего не в процедуре, а в настройках вашего компа или установке офиса. Т.к. эффект только у Вас, а у меня Офис-2003 , то проверить, естественно, не могу. При изменении пути в ячейке С1 практически ничего не делается, кроме дописывания в конец слэша при его отсутствии: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, [C1]) Is Nothing Then [C1] = IIf(Right([C1], 1) = "\" Or [C1] = "", [C1], [C1] & "\") End Sub
[/vba]Это должно работать в любом офисе.
Если у Вас не работает, то просто для начала закомментируйте стринг. Если после этого заработает, то преобразуйте однострочный IIf в стандартный многострочный If , поставьте в начале BreakPoint и пройдите по шагам.Alex_ST
Тут понадобилось на работе делать перечни файлов рабочих проектов. Вспомнил про свою процедуру. Немного подполировал, убрал ИМХО абсолютно не востребованный поиск по маске. В общем, что получилось смотрите в аттаче.
Тут понадобилось на работе делать перечни файлов рабочих проектов. Вспомнил про свою процедуру. Немного подполировал, убрал ИМХО абсолютно не востребованный поиск по маске. В общем, что получилось смотрите в аттаче.Alex_ST