Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 06.05.2019
Сообщений: 57

Как измерить вес фигур, форматирования ячеек и текста - для каждого листа

25.09.2019, 09:53. Показов 1338. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня.
У меня появился такой вопрос.

Как измерить в килобайтах - содержимое каждого листа в экселе 7
Понятно, что вес файла зависит от форматирования ячеек, фигур, текста, и модели ВБА.
Насчет модели ВБА - понятно, что ее никак не измерить, сколько она может весить.

Но вот - как макросом измерить для каждого листа - сколько весят на нем (в килобайтах) фигуры, форматирование ячеек и текст и вывести этот список через MsgBox ?
Вложения
Тип файла: xls 1.xls (35.0 Кб, 6 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.09.2019, 09:53
Ответы с готовыми решениями:

Для каждого статуса поставщика посчитать суммарный вес, средний вес и количество уникальных заказных товаров
Вот таблицы spool cre_demo.log CONNECT demo/demo@ORCL prompt prompt Creating table ПОСТАВЩИКИ prompt =========================...

для каждого ученика известны Ф.И.О Пол и вес.Ученику имеющему вес 50 кг.положено 0,5 л молока.Разобрать проект,позволяющий
для каждого ученика известны Ф.И.О Пол и вес.Ученику имеющему вес 50 кг.положено 0,5 л молока.Разобрать проект,позволяющий. 1)Вводить и...

Заполнение ячеек одного листа содержимым ячеек с другого листа, которые соответствуют заданному условию
Приветствую, други! Помогите с решением задачки: На листе 1 есть таблица. Необходима такая функция для использования на листе 2,...

14
 Аватар для Narimanych
2751 / 1725 / 779
Регистрация: 23.03.2015
Сообщений: 5,449
25.09.2019, 11:00
Как вариант- разделить на файлы и измерить..
0
209 / 184 / 43
Регистрация: 02.08.2019
Сообщений: 586
Записей в блоге: 23
25.09.2019, 11:18
Пиркаф, могу предложить ранжировать по количеству заполненных ячеек

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Private Sub RefreshSheetsList()
    Dim sh As Worksheet
    Dim used_cells As Long, Max_cells As Long, i As Long
    Dim ArrStr() As String
    Max_cells = 1
 
    For Each sh In ActiveWorkbook.Sheets
        If sh.Type = xlWorksheet Then
            ReDim Preserve ArrStr(0 To i)
            used_cells = WorksheetFunction.CountA(sh.Cells)
            ArrStr(i) = sh.Name & " кол ячеек: " & used_cells
            i = i + 1
            If used_cells > Max_cells Then Max_cells = used_cells
        End If
    Next sh
    i = 0
    For Each sh In ActiveWorkbook.Sheets
        If sh.Type = xlWorksheet Then
            Debug.Print ArrStr(i) & " " & WorksheetFunction.Rept("|", Int(20 * (WorksheetFunction.CountA(sh.Cells) / Max_cells)))
            i = i + 1
        End If
    Next sh
 
End Sub
________________________________________ ________________
Надстройка: Macro Tools VBA – инструменты разработки макросов VBATools
0
0 / 0 / 0
Регистрация: 06.05.2019
Сообщений: 57
25.09.2019, 11:30  [ТС]
art1289, нет я спрашивал про измерение в килобайтах.
И ваш макрос никак не оценивает форматирование и фигуры.
0
209 / 184 / 43
Регистрация: 02.08.2019
Сообщений: 586
Записей в блоге: 23
25.09.2019, 12:28
Пиркаф, средствами VBA я не знаю, предложил хоть какой то рейтинг

Добавлено через 1 минуту
только сторонними программами

Добавлено через 51 минуту
Пиркаф, есть способ измерить размеры всех частей Excel

1)нужно распаковать файл Excel в zip
2) потом переходите в нужную папку или написать макрос который будет перебирать все файлы и выводить их размер

вот функция которая выводит размер файла

Visual Basic
1
2
3
4
5
6
7
8
Function FileSize(Path As String) As Long
    Dim sz As Long
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set File = fso.GetFile(Path)
    FileSize = File.Size
    Set File = Nothing
End Function

вот инструмент для автоматической распаковки файла Excel
0
0 / 0 / 0
Регистрация: 06.05.2019
Сообщений: 57
25.09.2019, 12:35  [ТС]
Цитата Сообщение от art1289 Посмотреть сообщение
нужно распаковать файл Excel в zip
Ясно, буду проверять.
0
209 / 184 / 43
Регистрация: 02.08.2019
Сообщений: 586
Записей в блоге: 23
25.09.2019, 12:42
пишите если, что )
файл разорхивируйте и в нем можно все посмотреть
0
209 / 184 / 43
Регистрация: 02.08.2019
Сообщений: 586
Записей в блоге: 23
26.09.2019, 09:08
Пиркаф, Привет заморочился сделал макрос измерения размера частей файла Excel

1) распаковываете файл в zip
2) с помощью моего кода парсите папки и выводите размер файлов в новую книгу

выложить файл не могу, но код вот

главная процедура:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Public Const PathStr As String = "C:\UnZipped_test_data.xlsb.zip"
Sub ПримерИспользованияФункции_FilenamesCollection()
    ' Ищем на рабочем столе все файлы TXT, и выводим на лист список их имён.
    ' Просматриваются папки с глубиной вложения не более трёх.
 
    Dim coll As Collection, ПутьКПапке As String
    ' получаем путь к папке РАБОЧИЙ СТОЛ
    ПутьКПапке = PathStr
    ' считываем в колекцию coll нужные имена файлов
    Set coll = FilenamesCollection(ПутьКПапке, "*.*", 3)
 
    Application.ScreenUpdating = False    ' отключаем обновление экрана
    ' создаём новую книгу
    Dim sh As Worksheet: Set sh = Workbooks.Add.Worksheets(1)
    ' формируем заголовки таблицы
    With sh.Range("a1").Resize(, 4)
        .Value = Array("№", "Имя файла", "Полный путь", "Размер файла")
        .Font.Bold = True: .Interior.ColorIndex = 17
    End With
 
    ' выводим результаты на лист
    For i = 1 To coll.Count ' перебираем все элементы коллекции, содержащей пути к файлам
        sh.Range("a" & sh.Rows.Count).End(xlUp).Offset(1).Resize(, 4).Value = _
        Array(i, Dir(coll(i)), coll(i), FileSize(coll(i)))   ' выводим на лист очередную строку
        DoEvents    ' временно передаём управление ОС
    Next
    sh.Range("a:d").EntireColumn.AutoFit    ' автоподбор ширины столбцов
    [a2].Activate: ActiveWindow.FreezePanes = True ' закрепляем первую строку листа
End Sub
доп функции:

Visual Basic
1
2
3
4
5
6
7
8
Private Function FileSize(Path As String) As Long
    Dim sz As Long
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set File = fso.GetFile(Path)
    FileSize = File.Size
    Set File = Nothing
End Function
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Function FilenamesCollection(ByVal FolderPath As String, Optional ByVal Mask As String = "", _
                             Optional ByVal SearchDeep As Long = 999) As Collection
    ' © EducatedFool  excelvba.ru/code/FilenamesCollection
    ' Получает в качестве параметра путь к папке FolderPath,
    ' маску имени искомых файлов Mask (будут отобраны только файлы с такой маской/расширением)
    ' и глубину поиска SearchDeep в подпапках (если SearchDeep=1, то подпапки не просматриваются).
    ' Возвращает коллекцию, содержащую полные пути найденных файлов
    ' (применяется рекурсивный вызов процедуры GetAllFileNamesUsingFSO)
 
    Set FilenamesCollection = New Collection    ' создаём пустую коллекцию
    Set fso = CreateObject("Scripting.FileSystemObject")    ' создаём экземпляр FileSystemObject
    GetAllFileNamesUsingFSO FolderPath, Mask, fso, FilenamesCollection, SearchDeep ' поиск
    Set fso = Nothing: Application.StatusBar = False    ' очистка строки состояния Excel
End Function
 
Function GetAllFileNamesUsingFSO(ByVal FolderPath As String, ByVal Mask As String, ByRef fso, _
                                 ByRef FileNamesColl As Collection, ByVal SearchDeep As Long)
    ' перебирает все файлы и подпапки в папке FolderPath, используя объект FSO
    ' перебор папок осуществляется в том случае, если SearchDeep > 1
    ' добавляет пути найденных файлов в коллекцию FileNamesColl
    On Error Resume Next: Set curfold = fso.GetFolder(FolderPath)
    If Not curfold Is Nothing Then    ' если удалось получить доступ к папке
 
        ' раскомментируйте эту строку для вывода пути к просматриваемой
        ' в текущий момент папке в строку состояния Excel
        ' Application.StatusBar = "Поиск в папке: " & FolderPath
 
        For Each fil In curfold.Files    ' перебираем все файлы в папке FolderPath
            If fil.Name Like "*" & Mask Then FileNamesColl.Add fil.Path
        Next
        SearchDeep = SearchDeep - 1    ' уменьшаем глубину поиска в подпапках
        If SearchDeep Then    ' если надо искать глубже
            For Each sfol In curfold.SubFolders    ' перебираем все подпапки в папке FolderPath
                GetAllFileNamesUsingFSO sfol.Path, Mask, fso, FileNamesColl, SearchDeep
            Next
        End If
        Set fil = Nothing: Set curfold = Nothing    ' очищаем переменные
    End If
End Function
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
27.09.2019, 12:54
Пиркаф, записать два временных файла - с одним листом и второй с двумя одинаковыми такими же листами.
2-1=1 в чистом виде.

Добавлено через 4 часа 28 минут
SoftIce, Пиркаф, решил проверить, всё не так просто, как мне представлялось. При копировании страницы похоже картинки не копируются. Видимо, шэйпы объединяются в коллекции при копировании берутся ссылки на неё. Даже переименование шэйпов не помогает. С одной страницей в моём примере файл 399 Кб, с двумя 416 Кб. Если удалить из страницы (если очень надо) все шэйпы, то разница будет соответствовать их весу. А разница двух и одной страниц соответствует, приблизительно, чистому весу одной страницы без шейпов. Но надо, конечно, исследовать. Вот такие мысли
1
209 / 184 / 43
Регистрация: 02.08.2019
Сообщений: 586
Записей в блоге: 23
27.09.2019, 13:06
Burk, Привет!
мойм макросом см.выше это все вытаскивается в такую таблицу, и да верно шэйпы вот тут drawings\drawing1.xml




Добавлено через 28 секунд
файл паспотрашил на байты)

Добавлено через 4 минуты
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
№ Имя файла   Полный путь   Размер файла Расширение файла
1   [Content_Types].xml C:\Users\ffff\Desktop\UnZipped_Книга1.xlsm.zip\[Content_Types].xml 1751    xml
2   app.xml C:\Users\ffff\Desktop\UnZipped_Книга1.xlsm.zip\docProps\app.xml    948 xml
3   core.xml    C:\Users\ffff\Desktop\UnZipped_Книга1.xlsm.zip\docProps\core.xml   693 xml
4   sharedStrings.xml   C:\Users\ffff\Desktop\UnZipped_Книга1.xlsm.zip\xl\sharedStrings.xml    703 xml
5   styles.xml  C:\Users\ffff\Desktop\UnZipped_Книга1.xlsm.zip\xl\styles.xml   1288    xml
6   vbaProject.bin  C:\Users\ffff\Desktop\UnZipped_Книга1.xlsm.zip\xl\vbaProject.bin   43520   bin
7   workbook.xml    C:\Users\ffff\Desktop\UnZipped_Книга1.xlsm.zip\xl\workbook.xml 816 xml
8   drawing1.xml    C:\Users\ffff\Desktop\UnZipped_Книга1.xlsm.zip\xl\drawings\drawing1.xml    2315    xml
9   theme1.xml  C:\Users\ffff\Desktop\UnZipped_Книга1.xlsm.zip\xl\theme\theme1.xml 7130    xml
10  sheet1.xml  C:\Users\ffff\Desktop\UnZipped_Книга1.xlsm.zip\xl\worksheets\sheet1.xml    711 xml
11  sheet2.xml  C:\Users\ffff\Desktop\UnZipped_Книга1.xlsm.zip\xl\worksheets\sheet2.xml    659 xml
12  sheet3.xml  C:\Users\ffff\Desktop\UnZipped_Книга1.xlsm.zip\xl\worksheets\sheet3.xml    659 xml
13  sheet4.xml  C:\Users\ffff\Desktop\UnZipped_Книга1.xlsm.zip\xl\worksheets\sheet4.xml    1574    xml
14  workbook.xml.rels   C:\Users\ffff\Desktop\UnZipped_Книга1.xlsm.zip\xl\_rels\workbook.xml.rels  1243    rels
15  .rels   C:\Users\ffff\Desktop\UnZipped_Книга1.xlsm.zip\_rels\.rels 588 rels
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
27.09.2019, 13:42
art1289, рад за вас и за себя, и за автора, хорошо, что получилось, только не знаю практически зачем это нужно. Но интересно.
0
209 / 184 / 43
Регистрация: 02.08.2019
Сообщений: 586
Записей в блоге: 23
27.09.2019, 13:44
) автору Пиркаф спасибо!
я себе сделал инструмент для быстрого мониторинга внутренностей Excel файла))
0
0 / 0 / 0
Регистрация: 06.05.2019
Сообщений: 57
27.09.2019, 13:50  [ТС]
art1289, спасибо.
Не проверял, но наверняка все работает.

А может выложите файл с макросом ?
Упакуйте его в архив - до 5 Мб может влезть на сайт.
0
209 / 184 / 43
Регистрация: 02.08.2019
Сообщений: 586
Записей в блоге: 23
27.09.2019, 13:54
Пиркаф, не могу сейчас, но код весь выше я выложил

А так я в свою надстройку этот инструмент встроил после выходных выложу тут VBA Tools

Добавлено через 47 секунд
________________________________________ __________________________
Надстройка: Macro Tools VBA – инструменты разработки макросов VBATools
0
209 / 184 / 43
Регистрация: 02.08.2019
Сообщений: 586
Записей в блоге: 23
30.09.2019, 06:48
Пиркаф, Доброе утро!

Выложил инструмент скачивайте!)

лежит тут: VBATools.ru
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.09.2019, 06:48
Помогаю со студенческими работами здесь

Из типизированного файла прочитать фамилии и вес людей, увеличить вес каждого на 3%, записать в другой файл
В типизированном файле записаны фамилии людей и их вес. Увеличить вес каждого человека на 3%, записать в другой файл.

В файл записаны фамилии и вес людей.Изменить вес каждого человека на з% . Нужно реализовать в МатЛабе
В файл записаны фамилии и вес людей.Изменить вес каждого человека на з% . Нужно реализовать в МатЛабе.

Известен вес каждого ученика из двух классов. Определить количество учеников в каждом классе, вес которых больше 50 кг
1.Известен вес каждого ученика из двух классов. Определить количество учеников в каждом классе, вес которых больше 50 кг.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru