А дальше прочесть слабо? Или ещё лучше - оттуда по ССЫЛКЕ в посте перейти на более продвинутый топик Володи (v__step) и там на последних страницах взять почти готовую утилиту?
А дальше прочесть слабо? Или ещё лучше - оттуда по ССЫЛКЕ в посте перейти на более продвинутый топик Володи (v__step) и там на последних страницах взять почти готовую утилиту?Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Среда, 16.12.2015, 13:41
читал,ходил,решил посмотреть все по порядку.И первый же код меня удовлетворил практически.Чуть попозже попробую и остальные.На работе так файлы загажены, что ппц спасибо!
читал,ходил,решил посмотреть все по порядку.И первый же код меня удовлетворил практически.Чуть попозже попробую и остальные.На работе так файлы загажены, что ппц спасибо!китин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852
Не за что, Игорь! Самое простое и первоважнейшее - без всяких утилит сначала ВУКОПАШНУЮ отменить-вернуть общий доступ к сетевым файлам. Худеют просто на глазах!
Не за что, Игорь! Самое простое и первоважнейшее - без всяких утилит сначала ВУКОПАШНУЮ отменить-вернуть общий доступ к сетевым файлам. Худеют просто на глазах!Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Среда, 16.12.2015, 14:02
Куда уж подробнее-то? "Сервис"-"Доступ к файлу" Меняешь "Общий доступ" на "Монопольный доступ". Соглашаешься с необходимостью сохранения файла. Сохраняешь. Смотришь на размер. Радуешься. Потом опять даёщь общий доступ. Но это так, конечно, в 2003-ем. А куда мелко-мягкие это зарыли в гиббон-интерфейсе, понятия не имею, т.к. 2007 и выше не юзаю принципиально. Мне вполне возможностей 2003-го хватает. Зато свои панели сам под себя создаю и кнопочки какие хочу, такие куда хочу в панелях и ставлю оперативно, сразу как только новую процедурку слеплю.
Куда уж подробнее-то? "Сервис"-"Доступ к файлу" Меняешь "Общий доступ" на "Монопольный доступ". Соглашаешься с необходимостью сохранения файла. Сохраняешь. Смотришь на размер. Радуешься. Потом опять даёщь общий доступ. Но это так, конечно, в 2003-ем. А куда мелко-мягкие это зарыли в гиббон-интерфейсе, понятия не имею, т.к. 2007 и выше не юзаю принципиально. Мне вполне возможностей 2003-го хватает. Зато свои панели сам под себя создаю и кнопочки какие хочу, такие куда хочу в панелях и ставлю оперативно, сразу как только новую процедурку слеплю.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Среда, 16.12.2015, 16:05
Ну, я ж не знал... Но точно помню, что там одна из процедур убивает на листах всё, что вне UsedRange. Посмотри. К стати, а графикой на исходных листах никто не балуется? А то после удаления строк/столбцов привязанные к ним DrawingObjects обожают не удаляться, а схлопываться в "0-мерные" объекты, которые на листе в обычном режиме не видно, зато весят и гадят они "по-бльшому". Я для себя накатал как-то пару процедур.
[vba]
Код
Sub Draws_0D_Select() ' выделить НА ЛИСТЕ все рисунки с нулевыми размерами Dim oDraw As Shape If ActiveSheet.DrawingObjects.Count = 0 Then: MsgBox "В выделенном диапазоне нет рисунков", , "Нет объектов!": Exit Sub For Each oDraw In ActiveSheet.DrawingObjects.ShapeRange If oDraw.Width = 0 Or oDraw.Height = 0 Then oDraw.Select (False) Next End Sub
[/vba]
[vba]
Код
Sub Draws_In_Selection_Select() ' выделить В ВЫБРАННОМ ДИАПАЗОНЕ все рисунки Dim oDraw, rSel As Range If ActiveSheet.DrawingObjects.Count = 0 Then: MsgBox "В выделенном диапазоне нет рисунков", , "Нет объектов!": Exit Sub Set rSel = ActiveWindow.RangeSelection ' диапазон выбранных ячеек листа даже если после этого был выбран графический объект For Each oDraw In ActiveSheet.DrawingObjects.ShapeRange If Not Intersect(Range(oDraw.TopLeftCell, oDraw.BottomRightCell), rSel) Is Nothing Then oDraw.Select (False) Next End Sub
Ну, я ж не знал... Но точно помню, что там одна из процедур убивает на листах всё, что вне UsedRange. Посмотри. К стати, а графикой на исходных листах никто не балуется? А то после удаления строк/столбцов привязанные к ним DrawingObjects обожают не удаляться, а схлопываться в "0-мерные" объекты, которые на листе в обычном режиме не видно, зато весят и гадят они "по-бльшому". Я для себя накатал как-то пару процедур.
[vba]
Код
Sub Draws_0D_Select() ' выделить НА ЛИСТЕ все рисунки с нулевыми размерами Dim oDraw As Shape If ActiveSheet.DrawingObjects.Count = 0 Then: MsgBox "В выделенном диапазоне нет рисунков", , "Нет объектов!": Exit Sub For Each oDraw In ActiveSheet.DrawingObjects.ShapeRange If oDraw.Width = 0 Or oDraw.Height = 0 Then oDraw.Select (False) Next End Sub
[/vba]
[vba]
Код
Sub Draws_In_Selection_Select() ' выделить В ВЫБРАННОМ ДИАПАЗОНЕ все рисунки Dim oDraw, rSel As Range If ActiveSheet.DrawingObjects.Count = 0 Then: MsgBox "В выделенном диапазоне нет рисунков", , "Нет объектов!": Exit Sub Set rSel = ActiveWindow.RangeSelection ' диапазон выбранных ячеек листа даже если после этого был выбран графический объект For Each oDraw In ActiveSheet.DrawingObjects.ShapeRange If Not Intersect(Range(oDraw.TopLeftCell, oDraw.BottomRightCell), rSel) Is Nothing Then oDraw.Select (False) Next End Sub
привязанные к ним DrawingObjects обожают не удаляться, а схлопываться в "0-мерные" объекты,
Да есть такое - несколько недель назад был вопрос на форуме там была куча графических объектов файл после окрытия тупо зависал. А для удаления всех рисунков листа за раз я использую:[vba]
привязанные к ним DrawingObjects обожают не удаляться, а схлопываться в "0-мерные" объекты,
Да есть такое - несколько недель назад был вопрос на форуме там была куча графических объектов файл после окрытия тупо зависал. А для удаления всех рисунков листа за раз я использую:[vba]
Ну тогда скорее Alex_ST, прав - нажмите на каждом листе CTRL + End и смотрите куда закинет курсор. Или запустите макрос: [vba]
Код
Sub t() Dim sh As Worksheet, s$, k#, lc As Range For Each sh In ActiveWorkbook.Sheets Set lc = sh.Cells(1, 1).SpecialCells(xlLastCell) k = sh.Range("a1:" & lc.Address).CountLarge s = s & vbCr & sh.Name & ": " & lc.Address & ". " & k & " ячеек. " Next MsgBox s Debug.Print s End Sub
[/vba] Он покажет сразу все листы , адреса последних ячеек и количество задействованных ячеек. .
Зы еще может быть УФ - оно всегда криво копируется. и создаются ненужные дубликаты.
Ну тогда скорее Alex_ST, прав - нажмите на каждом листе CTRL + End и смотрите куда закинет курсор. Или запустите макрос: [vba]
Код
Sub t() Dim sh As Worksheet, s$, k#, lc As Range For Each sh In ActiveWorkbook.Sheets Set lc = sh.Cells(1, 1).SpecialCells(xlLastCell) k = sh.Range("a1:" & lc.Address).CountLarge s = s & vbCr & sh.Name & ": " & lc.Address & ". " & k & " ячеек. " Next MsgBox s Debug.Print s End Sub
[/vba] Он покажет сразу все листы , адреса последних ячеек и количество задействованных ячеек. .
Зы еще может быть УФ - оно всегда криво копируется. и создаются ненужные дубликаты.SLAVICK
Иногда все проще чем кажется с первого взгляда.
Сообщение отредактировал SLAVICK - Четверг, 24.12.2015, 14:33
Слава да эту процедуру я первым делом проделал.а сейчас и еще твоим (ничего что на ТЫ?) макросом пройдусь проверю.Спасибо ну да .последняя ячейка там где надо.
Слава да эту процедуру я первым делом проделал.а сейчас и еще твоим (ничего что на ТЫ?) макросом пройдусь проверю.Спасибо ну да .последняя ячейка там где надо.китин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852
Сообщение отредактировал китин - Четверг, 24.12.2015, 14:37
а вот тупой вопрос.про группировку.неужто она много места занимает?утром еще прошелся макросом из поста 18.С 14 метров уменьшился до 8.на листах ни одной группировки не осталось
а вот тупой вопрос.про группировку.неужто она много места занимает?утром еще прошелся макросом из поста 18.С 14 метров уменьшился до 8.на листах ни одной группировки не осталось китин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852
Сделал тест практически пустая книга с последней заполненной ячейкой wc1300: 12кб кучей разных группировок: 30кб. Делаю вывод - группировка не занимает много места.
А вот потом заполнил все ячейки текстом 30 символов. Размер файла = 3мб Т.е. делаем вывод, что может . зависит от содержимого этих ячеек.
Добавил разной заливки ячеек - файл вырос до 3,5 мб.
Сделал тест практически пустая книга с последней заполненной ячейкой wc1300: 12кб кучей разных группировок: 30кб. Делаю вывод - группировка не занимает много места.
А вот потом заполнил все ячейки текстом 30 символов. Размер файла = 3мб Т.е. делаем вывод, что может . зависит от содержимого этих ячеек.
Добавил разной заливки ячеек - файл вырос до 3,5 мб.SLAVICK
А для удаления всех рисунков листа за раз я использую: ActiveSheet.DrawingObjects.Delete
Это как раз самое простое и очевидное, что можно сделать. Вот только далеко не всегда нужно удалять ВСЕ рисунки на листе. А мой макрос удаляет только в выделенном диапазоне. (что, к стати, оказалось намного сложнее - без цикла никак обойтись не смог)
А для удаления всех рисунков листа за раз я использую: ActiveSheet.DrawingObjects.Delete
Это как раз самое простое и очевидное, что можно сделать. Вот только далеко не всегда нужно удалять ВСЕ рисунки на листе. А мой макрос удаляет только в выделенном диапазоне. (что, к стати, оказалось намного сложнее - без цикла никак обойтись не смог)Alex_ST
А мой макрос удаляет только в выделенном диапазоне. (что, к стати, оказалось намного сложнее - без цикла никак обойтись не смог)
Если в выделенном то да. я вот такой использую:
[vba]
Код
Sub Удалить_все_картинки() Dim sh As Worksheet If Selection.Count > 1 Then For Each kart In ActiveSheet.DrawingObjects.ShapeRange If Not Intersect(kart.TopLeftCell, Selection) Is Nothing Then kart.Delete Next End If a = MsgBox("Удалить во всей книге= да, на листе = Нет", 291) If a = vbCancel Then Exit Sub If a = 7 Then If Not ActiveSheet.ProtectDrawingObjects Then ActiveSheet.DrawingObjects.Delete Else MsgBox "Удалить сразу все графические об'екты, по всей видимости, нельзя" End If Else For Each sh In ActiveWorkbook.Sheets sh.Rectangles.Delete sh.DrawingObjects.Delete Next End If End Sub
[/vba]
Запихнул в него три разных - в зависимости от того, что нужно. Просто мне чаще нужно грохнуть все картинки либо на листе либо во всей книге.
А мой макрос удаляет только в выделенном диапазоне. (что, к стати, оказалось намного сложнее - без цикла никак обойтись не смог)
Если в выделенном то да. я вот такой использую:
[vba]
Код
Sub Удалить_все_картинки() Dim sh As Worksheet If Selection.Count > 1 Then For Each kart In ActiveSheet.DrawingObjects.ShapeRange If Not Intersect(kart.TopLeftCell, Selection) Is Nothing Then kart.Delete Next End If a = MsgBox("Удалить во всей книге= да, на листе = Нет", 291) If a = vbCancel Then Exit Sub If a = 7 Then If Not ActiveSheet.ProtectDrawingObjects Then ActiveSheet.DrawingObjects.Delete Else MsgBox "Удалить сразу все графические об'екты, по всей видимости, нельзя" End If Else For Each sh In ActiveWorkbook.Sheets sh.Rectangles.Delete sh.DrawingObjects.Delete Next End If End Sub
[/vba]
Запихнул в него три разных - в зависимости от того, что нужно. Просто мне чаще нужно грохнуть все картинки либо на листе либо во всей книге.SLAVICK
Т.е. делаем вывод, что может . зависит от содержимого этих ячеек.
Попробуйте скопировать рабочий диапазон в новую книгу - только значения - сохраните ее - какой размер? Если не сильно меньше - значит питаться уменьшить уже не стоит.
Т.е. делаем вывод, что может . зависит от содержимого этих ячеек.
Попробуйте скопировать рабочий диапазон в новую книгу - только значения - сохраните ее - какой размер? Если не сильно меньше - значит питаться уменьшить уже не стоит.SLAVICK
For Each oDraw In ActiveSheet.DrawingObjects.ShapeRange If Not Intersect(Range(oDraw.TopLeftCell, oDraw.BottomRightCell), rSel) Is Nothing Then oDraw.Select (False) Next
For Each kart In ActiveSheet.DrawingObjects.ShapeRange If Not Intersect(kart.TopLeftCell, Selection) Is Nothing Then kart.Delete Next
[/vba]
Чувствуете разницу? Я просто выделяю объекты чтобы пользователь потом сам уже решил, что с ними делать, а Вы - сразу удаляете. И ещё говорят, что я злой!...
For Each oDraw In ActiveSheet.DrawingObjects.ShapeRange If Not Intersect(Range(oDraw.TopLeftCell, oDraw.BottomRightCell), rSel) Is Nothing Then oDraw.Select (False) Next
For Each kart In ActiveSheet.DrawingObjects.ShapeRange If Not Intersect(kart.TopLeftCell, Selection) Is Nothing Then kart.Delete Next
[/vba]
Чувствуете разницу? Я просто выделяю объекты чтобы пользователь потом сам уже решил, что с ними делать, а Вы - сразу удаляете. И ещё говорят, что я злой!...Alex_ST