Файл со списком заказов со временем стал очень долго открываться и закрываться. Потом ещё стал очень долго реагировать на любые изменения внутри него. Например небольшое количество данных из выпадающего списка, может отфильтровываться с минуту.
Удалил из файла весь текст, картинки, всё равно весит много. Пробовал методом выделения и копирования данных переносить в другой чистый файл. Эта зараза туда тоже переносится. Чистый файл тоже прибавил в весе. И лишний вес остался даже после удаления текста.
Удалением данных проблема не удаляется, зато вмесе с копированием в другой файл, с удовольствием переезжает.
В экселе не силен, подскажите пожалуйста в чем тут может быть дело. Спасибо заранее.
Файл со списком заказов со временем стал очень долго открываться и закрываться. Потом ещё стал очень долго реагировать на любые изменения внутри него. Например небольшое количество данных из выпадающего списка, может отфильтровываться с минуту.
Удалил из файла весь текст, картинки, всё равно весит много. Пробовал методом выделения и копирования данных переносить в другой чистый файл. Эта зараза туда тоже переносится. Чистый файл тоже прибавил в весе. И лишний вес остался даже после удаления текста.
Удалением данных проблема не удаляется, зато вмесе с копированием в другой файл, с удовольствием переезжает.
В экселе не силен, подскажите пожалуйста в чем тут может быть дело. Спасибо заранее.
Может подскажете какой из макросов той темы рабочий? Переробовал все с первой страницы указанной темы - все выдают какие-то ошибки
Вот например этот:
[vba]
Код
Private Sub ExportAllStdModules(newWbk As Workbook, oldWbk As Workbook) ' скопировать все компоненты VBA в новую книгу Dim iTempPath As String, iModuleName As String Dim iVBComponent As Object Dim a As Boolean With Application .ScreenUpdating = False iTempPath = .DefaultFilePath & .PathSeparator With newWbk.VBProject.VBComponents For Each iVBComponent In oldWbk.VBProject.VBComponents iModuleName$ = iTempPath$ & iVBComponent.Name a = CopyModule(iVBComponent.Name, _ oldWbk.VBProject, _ newWbk.VBProject, True) Next End With .ScreenUpdating = True End With End Sub
Function CopyModule(ModuleName As String, _ FromVBProject, _ ToVBProject, _ OverwriteExisting As Boolean) As Boolean Dim VBComp As Object 'As VBIDE.VBComponent Dim FName$, CompName$, S$ Dim SlashPos&, ExtPos& Dim TempVBComp 'As VBIDE.VBComponent Dim vbext_pp_locked As Boolean On Error Resume Next Set VBComp = FromVBProject.VBComponents(ModuleName) If Err.Number <> 0 Then CopyModule = False Exit Function End If FName = Environ("Temp") & "\" & ModuleName & ".bas" If OverwriteExisting = True Then If Dir(FName, vbNormal + vbHidden + vbSystem) <> vbNullString Then Err.Clear Kill FName If Err.Number <> 0 Then CopyModule = False Exit Function End If End If With ToVBProject.VBComponents .Remove .Item(ModuleName) End With Else Err.Clear Set VBComp = ToVBProject.VBComponents(ModuleName) If Err.Number <> 0 Then If Err.Number = 9 Then ' module doesn't exist. ignore error. Else ' other error. get out with return value of False CopyModule = False Exit Function End If End If End If FromVBProject.VBComponents(ModuleName).Export FileName:=FName SlashPos = InStrRev(FName, "\") ExtPos = InStrRev(FName, ".") CompName = Mid(FName, SlashPos + 1, ExtPos - SlashPos - 1) Set VBComp = Nothing Set VBComp = ToVBProject.VBComponents(CompName) If VBComp Is Nothing Then ToVBProject.VBComponents.Import FileName:=FName Else Set TempVBComp = ToVBProject.VBComponents.Import(FName) ' TempVBComp is source module With VBComp.CodeModule .DeleteLines 1, .CountOfLines S = TempVBComp.CodeModule.Lines(1, TempVBComp.CodeModule.CountOfLines) .InsertLines 1, S End With On Error GoTo 0 ToVBProject.VBComponents.Remove TempVBComp End If Kill FName CopyModule = True End Function
[/vba]
Даёт ошибку "sub or function not defined"
Спасибо!
Может подскажете какой из макросов той темы рабочий? Переробовал все с первой страницы указанной темы - все выдают какие-то ошибки
Вот например этот:
[vba]
Код
Private Sub ExportAllStdModules(newWbk As Workbook, oldWbk As Workbook) ' скопировать все компоненты VBA в новую книгу Dim iTempPath As String, iModuleName As String Dim iVBComponent As Object Dim a As Boolean With Application .ScreenUpdating = False iTempPath = .DefaultFilePath & .PathSeparator With newWbk.VBProject.VBComponents For Each iVBComponent In oldWbk.VBProject.VBComponents iModuleName$ = iTempPath$ & iVBComponent.Name a = CopyModule(iVBComponent.Name, _ oldWbk.VBProject, _ newWbk.VBProject, True) Next End With .ScreenUpdating = True End With End Sub
Function CopyModule(ModuleName As String, _ FromVBProject, _ ToVBProject, _ OverwriteExisting As Boolean) As Boolean Dim VBComp As Object 'As VBIDE.VBComponent Dim FName$, CompName$, S$ Dim SlashPos&, ExtPos& Dim TempVBComp 'As VBIDE.VBComponent Dim vbext_pp_locked As Boolean On Error Resume Next Set VBComp = FromVBProject.VBComponents(ModuleName) If Err.Number <> 0 Then CopyModule = False Exit Function End If FName = Environ("Temp") & "\" & ModuleName & ".bas" If OverwriteExisting = True Then If Dir(FName, vbNormal + vbHidden + vbSystem) <> vbNullString Then Err.Clear Kill FName If Err.Number <> 0 Then CopyModule = False Exit Function End If End If With ToVBProject.VBComponents .Remove .Item(ModuleName) End With Else Err.Clear Set VBComp = ToVBProject.VBComponents(ModuleName) If Err.Number <> 0 Then If Err.Number = 9 Then ' module doesn't exist. ignore error. Else ' other error. get out with return value of False CopyModule = False Exit Function End If End If End If FromVBProject.VBComponents(ModuleName).Export FileName:=FName SlashPos = InStrRev(FName, "\") ExtPos = InStrRev(FName, ".") CompName = Mid(FName, SlashPos + 1, ExtPos - SlashPos - 1) Set VBComp = Nothing Set VBComp = ToVBProject.VBComponents(CompName) If VBComp Is Nothing Then ToVBProject.VBComponents.Import FileName:=FName Else Set TempVBComp = ToVBProject.VBComponents.Import(FName) ' TempVBComp is source module With VBComp.CodeModule .DeleteLines 1, .CountOfLines S = TempVBComp.CodeModule.Lines(1, TempVBComp.CodeModule.CountOfLines) .InsertLines 1, S End With On Error GoTo 0 ToVBProject.VBComponents.Remove TempVBComp End If Kill FName CopyModule = True End Function
[/vba]
Даёт ошибку "sub or function not defined"Kolomoets
Сообщение отредактировал Kolomoets - Среда, 22.05.2013, 13:49
Это точно. Там на пересечении левой границы столбца I и верхней границы строки 2 лежит друг на друге огромная куча невидимых (ширина=0, высота=0) объектов (наверное, строки и столбцы удаляли?) Вот они и весят столько. А пара квадратиков без границы и без заливки, лежащие левее - это мелочь.
Цитата (Serge_007)
F5 - выделить - объекты - Delete
Это точно. Там на пересечении левой границы столбца I и верхней границы строки 2 лежит друг на друге огромная куча невидимых (ширина=0, высота=0) объектов (наверное, строки и столбцы удаляли?) Вот они и весят столько. А пара квадратиков без границы и без заливки, лежащие левее - это мелочь.Alex_ST
Можно. Но при этом надо удалять объекты, иначе они неконтролируемо множатся Если Вы удаляете столбец - то Вы удаляете именно столбец, но не объекты, которые в нём были
Можно. Но при этом надо удалять объекты, иначе они неконтролируемо множатся Если Вы удаляете столбец - то Вы удаляете именно столбец, но не объекты, которые в нём былиSerge_007
Посмотрите по ПКМ формат любой картинки/фигуры. На вкладке "Свойства" есть только три возможных варианта привязки графического объекта к фону (а фоном в данном случае являются ячейки листа): - перемещать и изменять объект вместе с ячейками - перемещать, но не изменять размеры - не перемещать и не изменять размеры И по умолчанию при создании объекта выбирается первый пункт. Давним-давним глюком Excel'я, повторяющимся в каждой новой версии, является то, что объект привязывается к фону (ячейке) не полностью (как в Word'e, к абзацу, например), а частично - только в части размеров. Поэтому при удалении ячейки/столбца/строки объекты не уничтожаются, а просто принимают ширину/высоту объекта-родителя - 0 - и становятся невидимыми. Правда, видной остаётся граница "схлопнувшегося" рисунка (если она есть, конечно). И при удалении только строки от скрывшегося объекта останется видной горизонтальная черта, а при удалении столбца - вертикальная. А вот если удалить и строку, и столбец, то останется видно точка, которую не так-то просто и заметить Для облегчения борьбы с такими скрытыми рисунками я написал и выложил ЗДЕСЬ макрос Draws_0D_Select, который выделяет на активном листе все шэйпы, имеющие хотя бы одну нулевую размерность и ставшие невидимыми на листе после удаления с него строк/столбцов.[vba]
Код
Sub Draws_0D_Select() ' выделить НА ЛИСТЕ все рисунки с нулевыми размерами Dim oDraw As Shape For Each oDraw In ActiveSheet.DrawingObjects.ShapeRange If oDraw.Width = 0 Or oDraw.Height = 0 Then oDraw.Select (False) Next End Sub
[/vba] удалять автоматически я такие картинки не стал, т.к. нажать Delete после выделения не сложно и самостоятельно если посчитаете нужным, а вот действия макроса, самостоятельно удалившего что-то нужное, уже не отменишь. Но если хотите, то можно и сделать удаление без лишних телодвижений, всего лишь заменив [vba]
Код
oDraw.Select (False)
[/vba] на [vba]
Код
oDraw.Delete
[/vba]
Посмотрите по ПКМ формат любой картинки/фигуры. На вкладке "Свойства" есть только три возможных варианта привязки графического объекта к фону (а фоном в данном случае являются ячейки листа): - перемещать и изменять объект вместе с ячейками - перемещать, но не изменять размеры - не перемещать и не изменять размеры И по умолчанию при создании объекта выбирается первый пункт. Давним-давним глюком Excel'я, повторяющимся в каждой новой версии, является то, что объект привязывается к фону (ячейке) не полностью (как в Word'e, к абзацу, например), а частично - только в части размеров. Поэтому при удалении ячейки/столбца/строки объекты не уничтожаются, а просто принимают ширину/высоту объекта-родителя - 0 - и становятся невидимыми. Правда, видной остаётся граница "схлопнувшегося" рисунка (если она есть, конечно). И при удалении только строки от скрывшегося объекта останется видной горизонтальная черта, а при удалении столбца - вертикальная. А вот если удалить и строку, и столбец, то останется видно точка, которую не так-то просто и заметить Для облегчения борьбы с такими скрытыми рисунками я написал и выложил ЗДЕСЬ макрос Draws_0D_Select, который выделяет на активном листе все шэйпы, имеющие хотя бы одну нулевую размерность и ставшие невидимыми на листе после удаления с него строк/столбцов.[vba]
Код
Sub Draws_0D_Select() ' выделить НА ЛИСТЕ все рисунки с нулевыми размерами Dim oDraw As Shape For Each oDraw In ActiveSheet.DrawingObjects.ShapeRange If oDraw.Width = 0 Or oDraw.Height = 0 Then oDraw.Select (False) Next End Sub
[/vba] удалять автоматически я такие картинки не стал, т.к. нажать Delete после выделения не сложно и самостоятельно если посчитаете нужным, а вот действия макроса, самостоятельно удалившего что-то нужное, уже не отменишь. Но если хотите, то можно и сделать удаление без лишних телодвижений, всего лишь заменив [vba]
Дома у меня на компах только Excel-2003. Попробовал открыть через конвертер. Открылся, но ругнулся, что слишком много стилей форматирования. Я посмотрел - действительно у Вас в файле огромное количество стилей. Нужно открыть "Стили" и удалить не нужные пользовательские, оставив только встроенные.
Дома у меня на компах только Excel-2003. Попробовал открыть через конвертер. Открылся, но ругнулся, что слишком много стилей форматирования. Я посмотрел - действительно у Вас в файле огромное количество стилей. Нужно открыть "Стили" и удалить не нужные пользовательские, оставив только встроенные.Alex_ST
Вообще-то данный топик давно заброшен. Но где-то на форуме несколько лет назад пару раз глубоко копались... Поищите в названиях топиков по слову "фитнесс" и по "файл распух"
Вообще-то данный топик давно заброшен. Но где-то на форуме несколько лет назад пару раз глубоко копались... Поищите в названиях топиков по слову "фитнесс" и по "файл распух"Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Суббота, 28.08.2021, 23:16
сравните с исходным - сотни пользовательских стилей лечение [vba]
Код
Sub btnDel_Click() For i = ActiveWorkbook.Styles.Count To 1 Step -1 If Not ActiveWorkbook.Styles(i).BuiltIn Then ActiveWorkbook.Styles(i).Delete Next i
End Sub
[/vba]
сравните с исходным - сотни пользовательских стилей лечение [vba]
Код
Sub btnDel_Click() For i = ActiveWorkbook.Styles.Count To 1 Step -1 If Not ActiveWorkbook.Styles(i).BuiltIn Then ActiveWorkbook.Styles(i).Delete Next i
Джентльмены! Столкнулся с похожей проблемой, что и в данной ветке форума. Пытался через стандартное восстановление разобраться, почему маленькая табличка весит 5,4 мб. Даже на вирусы (на всякий случай проверил) через Касперского прогнал. Безрезультатно. Может найдется мастер-археолог, кто сможет раскопать, что же за знания в недрах данной таблицы?
Джентльмены! Столкнулся с похожей проблемой, что и в данной ветке форума. Пытался через стандартное восстановление разобраться, почему маленькая табличка весит 5,4 мб. Даже на вирусы (на всякий случай проверил) через Касперского прогнал. Безрезультатно. Может найдется мастер-археолог, кто сможет раскопать, что же за знания в недрах данной таблицы?