Размер файла в макросе excel

DarkJoker1992

148 / 4 / 0

Регистрация: 19.02.2013

Сообщений: 369

1

Как узнать размер файла?

03.03.2015, 17:21. Показов 14867. Ответов 5

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте,нашел такой код только он чёт не правельно работает, подскажите пожалуйста

Visual Basic
1
2
3
4
5
6
 If (f.Size < 20000) Then
            MsgBox (123)
            End If
        MsgBox (321)
        
        End Sub

когда размер файла меньше 20к байт выдаёт MsgBox (123) и MsgBox (321) а когда больше только MsgBox (321)



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

03.03.2015, 17:49

2

Лучший ответ Сообщение было отмечено DarkJoker1992 как решение

Решение

Visual Basic
1
2
3
4
5
6
7
If (f.Size < 20000) Then
            MsgBox (123)
Else
        MsgBox (321)
            End If
        
        End Sub



1



Hugo121

6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

03.03.2015, 21:13

3

Visual Basic
1
2
3
4
5
6
If (f.Size < 20000) Then MsgBox (123):exit sub
 
        MsgBox (321)
 
        
        End Sub



0



The trick

Модератор

9167 / 3405 / 853

Регистрация: 22.02.2013

Сообщений: 5,185

Записей в блоге: 78

03.03.2015, 21:24

4

Visual Basic
1
2
3
MsgBox IIf(f.Size < 20000, 123, 321)
' Для данного, конкретного случая
MsgBox 123 - (f.Size < 20000) * 198



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

03.03.2015, 21:34

5

Прикольная тема
Титульный вопрос с темой вообще не связан, какой нужен ответ — тоже не сказано…



1



Catstail

Модератор

Эксперт функциональных языков программированияЭксперт Python

34709 / 19230 / 4040

Регистрация: 12.02.2012

Сообщений: 32,197

Записей в блоге: 13

04.03.2015, 09:39

6

В VBA есть по крайней мере три способа узнать размер файла:

1)

Visual Basic
1
      sz&=FileLen("Имя_файла")

2)

Visual Basic
1
2
3
4
     fi%=freeFile
     open "Имя_файла" for binary access read as #fi%
     sz&=LOF(fi%)
     Close #fi%

3)

Visual Basic
1
2
3
   Set FSO = CreateObject("Scripting.FileSystemObject")
   Set File = FSO.GetFile("Имя_файла")
   sz&=Clng(File.Zize)

Можно еще API использовать…



1



Here how to use it in Excel Cell:

 =GetDirOrFileSize("C:UsersxxxPlayground","filename.xxx")

If you have a german Windows than:

=GetDirOrFileSize("C:UsersxxxPlayground";"filename.xxx")

Here is the function for the VBA modul: (Just enable the Developer tools, and copy and paste this into a new modul)

Function GetDirOrFileSize(strFolder As String, Optional strFile As Variant) As Long

'Call Sequence: GetDirOrFileSize("drivepath"[,"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 ***

 

Здравствуйте уважаемые форумчане.    
Скажите пожалуйста, у меня такой вопрос, например есть код который считывает из закрытой книги с определенных ячеек данные. Процесс реализован с помощью формы, по нажатии на кнопку открыть, выбираешь путь к файлу, и уже из этого файла в форму вставляются искомые значения. Существует ли код, с помощью которого можно было бы проверить какой размер имеет тот документ из которого нужно получить значения? Тоесть,    
Если Документ С:1.xls размер его 100kb То  
msgbox «OK»  
Else  
msgbox «Великовато будет»  
Конец Если  
Если можете подскажите пожалуйста как реализовать задуманное?  
Спасибо.

 

Set FSO = CreateObject(«Scripting.FileSystemObject»)  
Set File = FSO.GetFile(«C:autoexec.bat»)  
Str = vbNullString  
Str = Str & «Дата создания — » & File.DateCreated & vbCrLf  
Str = Str & «Дата последнего доступа — » & File.DateLastAccessed & vbCrLf  
Str = Str & «Дата последней модификации — » & File.DateLastModified & vbCrLf  
Str = Str & «Диск — » & File.Drive.DriveLetter & vbCrLf  
Str = Str & «Имя — » & File.Name & vbCrLf  
Str = Str & «Родительский каталог — » & File.ParentFolder.Path & vbCrLf  
Str = Str & «Путь — » & File.Path & vbCrLf  
Str = Str & «Короткое имя — » & File.ShortName & vbCrLf  
Str = Str & «Путь в формате 8.3 — » & File.ShortPath & vbCrLf  
Str = Str & «Размер — » & File.Size & vbCrLf  
Str = Str & «Тип файла — » & File.Type  
MsgBox Str

 

Юрий М

Модератор

Сообщений: 60588
Регистрация: 14.09.2012

Контакты см. в профиле

Ещё:  
Sub qqq()  
iFullName = «C:TempTest.xls»  
iFileSize = FileLen(iFullName)  
MsgBox «Размер файла составляет : » & iFileSize & » байт», , «»  
End Sub

 

Сергей125

Гость

#4

10.02.2011 21:41:25

Ух, друзья, столько информации и в такие короткие сроки, Спасибо Вам. Думаю дальше уже сам разберусь.  
Спасибо!

FileLen

FileLen(PathName)

Функция FileLen позволяет узнать длину файла в байтах. Перед вызовом функции есть смысл проверить существование файла с помощью функции Dir. Если в момент вызова фунции указанный файл открыт, то возвращается длина файла до его открытия. Для определения размера открытого файла используйте фукцию LOF

Возвращаемое значение

Возвращает значение типа Long, содержащее длину заданного файла

Параметры

PathName Обязательный аргумент типа String, содержащий имя файла(может содержать имя диска или папки). Если диск или папка не заданы, по умолчанию принимаются текущие диск и папка. Если файл не существует, генерируется ошибка времени исполнения File not found

Пример

' Узнаем длину файла autoecex.bat
Print FileLen("c:autoexec.bat")

Категория
Функции работы с файлами

Хитрости »

1 Май 2011              260086 просмотров


Как уменьшить размер файла

Данный вопрос возникает периодически на различных форумах. Решил написать некоторые рекомендации по уменьшению веса файла. Применив их Вы сможете понять — действительно ли Ваши данные настолько раздувают файл или же в файле имеется много лишнего.
Почему я это пишу. Бывают ситуации, когда в файле всего один лист, данных на нем на 1000 строк и 20 столбцов. Никаких формул, только значения. Но размер файла непомерно велик — скажем 10 Мб. Этого недопустимо. Или есть различные формулы, но Вы все равно считаете, что размер файла не соответствует тому, что должно бы быть.

Автоматически убрать все лишнее из файла так же поможет команда надстройки MulTEx Оптимизировать книгу

При этом описанные ниже причины, которые влияют на размер файла, так же могут влиять и на его «быстродействие».


Следующие действия необходимо проделать на каждом листе книги:

  • Первое, что необходимо вспомнить — а не в общем ли доступе файл? Если в Общем, то есть вероятность, что размер файла растет именно из-за этого. Дело в том, что при установке общего доступа к файлу, по умолчанию ведется журнал изменений, в который записываются все действия, произведенные в книге каждым пользователем за период, указанный в параметрах. Чем больше пользователей — тем сильнее раздувается файл. Как избавиться или изменить период:
    Excel 2007 и выше: вкладка Рецензирование(Review)Доступ к книге(Shared workbook);
    Excel 2003: СервисДоступ к книге.
    Переходим на вкладку Подробнее(Advanced) и выбираем Не хранить журнал изменений(don’t keep change history).
    Еще лучше — снять общий доступ с книги, сохранить. Если общий доступ все еще нужен, то открываем книгу и опять даем общий доступ, но теперь устанавливаем кол-во дней, в течении которых надо хранить журнал. По умолчанию — 30, но можно сделать меньше, если файл сильно разбухает за озвученный период. Далее неплохо бы отключить оба пункта в разделе Включить в личное представление(Include in personal view): параметры печати(Print settings) и фильтры(Filter settings). Личные представления позволяют сохранять для каждого пользователя файла свои параметры печати и настройки фильтров. Чем больше разных пользователей – тем больше настроек сохраняется и тем выше вероятность замедления работы файла и увеличения его размеров. А практическая ценность этих пунктов в ущерб удобству и быстроте работы с файлом сомнительная.
    После этого сохранить файл.
    Подробнее про общий доступ можно прочитать в статье: Ведение журнала сделанных в книге изменений
  • Убедитесь, что лист не содержит ячеек без данных, но занимающих пространство. Перейдя на лист, нажмите Ctrl+End. Активируется последняя ячейка листа. Если она расположена ниже или правее последних нужных рабочих данных — то удалите все строки и столбцы после последних данных таблицы. Удалите полностью строки. Сделать это быстро можно так. Нажимаем Ctrl+End и попадаем на последнюю ячейку. Выделяем эту строку и нажимаем Ctrl+Shift+стрелка Вверх. Выделились все строки вместе с последней строкой данных. Удерживая Shift жмем на клавиатуре стрелку Вниз. Тоже самое и со столбцами.
  • Посмотрите лист на предмет форматирования. Необходимо избегать форматирования ЦЕЛИКОМ столбцов либо строк. Это приводит к раздуванию файла. Все форматирование, выходящее за границы таблицы необходимо убрать. А еще лучше — вообще избегать излишнего форматирования, особенно если книгой никто, кроме Вас не пользуется. Вместо Заливки ячеек — Белым цветом ставьте «Нет заливки».Чтобы убрать все форматирование из ячеек: выделяете необходимый диапазон и:
    для Excel 2003: ПравкаОчиститьФормат.
    В Excel 2007-2010: вкладка Главная(Home)Очистить(Clear)Очистить форматы(Clear formats)
    Очистка форматов
  • Проверить наличие в книге лишних объектов. Удаляем объекты:
    В Excel 2003: меню ПравкаПерейтиВыделитьОбъекты.
    в Excel 2007-2010: вкладка Главная(Home)Найти и выделить(Find & Select)Выделение группы ячеек(Go To Special…)Объекты(Objects).
    Нажмите Delete. Все объекты на листе будут удалены. Правда есть небольшой шанс, что на листе так же есть и скрытые объекты. Тогда надо идти в редактор VBA (Alt+F11) —Ctrl+R. Отображаете окно свойств (F4). Находите объект ЭтаКнига(ThisWorkbook), в окне свойств этого объекта находите свойство DisplayDrawingObjects и ставите там значение — -4104xlDisplayShapes. После этого переходите опять на лист и повторяете операции по выделению и удалению объектов, описанные выше. Зачем все так сложно? То, что мы не видим все объекты на листе не означает, что их там нет. Плюс могут быть объекты нулевых размеров. Как правило «невидимые» и «нулевые» объекты попадают на лист в результате копирования из других файлов и работы различных макросов. И в некоторых случаях объекты переносятся с нулевой длиной и шириной или вообще невидимые. Как следствие — объект не видно, но файл увеличивается в размерах. И при каждом копировании он начинает увеличиваться в размерах в геометрической прогрессии, т.к. по умолчанию объекты копируются вместе с ячейками. После нескольких таких копирований-вставок файл начинает дико тормозить даже при выделении ячеек. Выделили ячейку, хотите выделить другую — файл задумался на пару секунд.
  • Если привыкли помечать ячейки примечаниями (вкладка РецензированиеСоздать примечание), то самое время задуматься так ли это необходимо. Т.к. примечание это тоже объект, то их избыточное количество на листах так же может привести к замедлению работы файла. Удалить все примечания из выделенных ячеек очень просто: выделяем ячейки — вкладка РецензированиеУдалить. Небольшой совет: если нет прямой необходимости в хранении примечаний именно таким образом, то самый правильный способ выделить отдельный столбец в таблице, в который заносить примечания для строки данных. Данный способ оптимально подходит для таблиц в правильной структуре. Тогда можно будет осуществлять поиск, сортировку и фильтрацию по примечаниям. Если примечаний уже много и информацию из них необходимо перенести в ячейки, то можно воспользоваться этим решением: Как получить текст примечания в ячейку?
  • Еще очень хорошо помогает удаление всех формул и связей. Удаление не в прямом смысле: заменить все формулы значениями, которые они вернули. Это можно сделать без макросов: выделяем все ячейки с данными на листе-Копируем-правая кнопка мыши-Специальная вставка-Значения. Но это не очень удобно, если листов много, поэтому я заготовил для этого еще и макрос, который проделает эту операцию на всех листах активной книги:
    Sub All_Cells_In_All_Sheets_To_Value()
        Dim wsSh As Object
        For Each wsSh In Sheets
            wsSh.UsedRange.Value = wsSh.UsedRange.Value
        Next wsSh
    End Sub

    Данный макрос необходимо вставить в стандартный модуль и выполнить (нажав F5 в редакторе VBA или непосредственно с листа: нажать Alt+F8-выбрать макрос All_Cells_In_All_Sheets_To_Value-Выполнить)

  • Так же в книге могут содержаться имена, которые тоже порой довольно неплохо прибавляют вес файлу. Посмотреть их можно, нажав сочетание клавиш Ctrl+F3на листе. Но может оказаться так, что имена будут скрытыми, и тогда Вы просто так их не увидите. Отобразить их можно при помощи следующего кода:
    Sub All_Names_Visible()
        Dim objName As Object, wsSh As Object
        For Each objName In ActiveWorkbook.Names
            objName.Visible = True
        Next objName
        For Each wsSh In Sheets
            For Each objName In wsSh.Names
                objName.Visible = True
            Next objName
        Next wsSh
    End Sub

    Данный код используется как и предыдущий. Он отображает все имена на листе и в книге. После выполнения макроса необходимо повторно нажать сочетание клавиш Ctrl+F3 на листе. Теперь Вы можете удалить ненужные Вам имена. Так же все имена можно сразу удалить при помощи следующего кода:

    Sub Delete_All_Names()
        Dim objName As Object, wsSh As Object
        On Error Resume Next
        For Each objName In ActiveWorkbook.Names
            objName.Delete
        Next objName
        For Each wsSh In Sheets
            For Each objName In wsSh.Names
                objName.Delete
            Next objName
        Next wsSh
    End Sub

    Только применяя данный код Вы должны быть уверены, что Вам действительно не нужны все имена в книге. Т.к. выполнив данный макрос Вы уже не сможете вернуть удаленные имена.

  • Проверьте, нет ли в книге скрытых листов, на которых может содержаться ненужная информация и с которыми можно проделать операции, описанные выше. Как их обнаружить можно узнать, прочитав эти статьи:
    Как сделать лист скрытым?
    Как сделать лист очень скрытым

После всех этих действий необходимо сохранить файл, чтобы изменения вступили в силу. Только после этого станет видно изменился размер файла или нет. Я бы советовал сохранять файл как копию, если не уверены, что удалили действительно ненужное.

Также см.:
Оптимизировать книгу
Файл долго фильтрует строки/тормозит при фильтрации


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Понравилась статья? Поделить с друзьями:
  • Размер шрифта в условное форматирование excel
  • Размер страницы word в пикселях
  • Размер уравнений в word
  • Размер шрифта в текстовом редакторе ms word устанавливается в чем
  • Размер страницы word 2007