Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2011, 22:54   #1
SergeiK
 
Регистрация: 27.04.2011
Сообщений: 7
По умолчанию тормозит макрос после первой печати данного документа

Господа, и Дамы, доброго времени суток! Помогите пожалуйста вот с чем: есть макрос(привязан к кнопке), который скрывает строки, работает как надо, но, после первой печати данного листа нажимаю снова на кнопку макроса, тогда excelевкий файл начинает очень сильно виснуть (примерно секунд на 20). Подскажите пожалуйста, как можно избежать такое торможение. вот код:


Option Explicit
Dim bl As Boolean
Sub sergHid()
Dim r As Range: Application.ScreenUpdating = False
With [b9:b258]
For Each r In .Cells
r.EntireRow.Hidden = r = ""
Next
End With: Application.ScreenUpdating = True
End Sub

забыл сказать, в скрываемых строках есть формулы, но значения пустые.

Последний раз редактировалось SergeiK; 11.05.2011 в 01:01.
SergeiK вне форума Ответить с цитированием
Старый 11.05.2011, 10:08   #2
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Посмотрите свою старую тему, там есть второй вариант - немного быстрее.
Хотя и там, и там виснуть особо не из-за чего. Может у Вас в книге есть еще какие-то макросы?
nilem вне форума Ответить с цитированием
Старый 11.05.2011, 10:51   #3
slan
Форумчанин
 
Аватар для slan
 
Регистрация: 30.01.2008
Сообщений: 314
По умолчанию

вот так может быть чуть быстрее:

Sub sergHid()
Dim i&, x, c&
c = Application.Calculation
Application.ScreenUpdating = False: Application.Calculation = xlCalculationManual
Set x = [b9:b258].Value
x.Rows.Hidden = False
For i = 1 To UBound(x)
If x(i) = "" Then Rows(i + 8).Height = 0
Next
Application.ScreenUpdating = True: Application.Calculation = c
End Sub
slan вне форума Ответить с цитированием
Старый 11.05.2011, 11:12   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

slan, смутило, проверил, заработало так:

Код:
Sub sergHid()
Dim i&, x, c&
c = Application.Calculation
Application.ScreenUpdating = False: Application.Calculation = xlCalculationManual
Set x = [b9:b258]
x.Rows.Hidden = False
Let x = [b9:b258].Value
For i = 1 To UBound(x)
If x(i, 1) = "" Then Rows(i + 8).RowHeight = 0
Next
Application.ScreenUpdating = True: Application.Calculation = c
End Sub
А чуть быстрее так:
Код:
Sub sergHid()
Dim i&, x, c&
c = Application.Calculation
Application.ScreenUpdating = False: Application.Calculation = xlCalculationManual
[b9:b258].Rows.Hidden = False
x = [b9:b258].Value
For i = 1 To UBound(x)
If x(i, 1) = "" Then Rows(i + 8).RowHeight = 0
Next
Application.ScreenUpdating = True: Application.Calculation = c
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 11.05.2011 в 11:15.
Hugo121 вне форума Ответить с цитированием
Старый 11.05.2011, 11:45   #5
slan
Форумчанин
 
Аватар для slan
 
Регистрация: 30.01.2008
Сообщений: 314
По умолчанию

согласен, второй вариант и имел ввиду..
slan вне форума Ответить с цитированием
Старый 11.05.2011, 12:03   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ну и ещё RowHeight
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 11.05.2011, 18:06   #7
SergeiK
 
Регистрация: 27.04.2011
Сообщений: 7
По умолчанию

Да есть еще один макрос, на другой вкладке, который преобразовывает в число
вот он:
Sub ïðåîáðàçîâàòüÂ÷èñëî()
For a = 2 To 3000
For b = 1 To 4
If (b <> 8 Or b <> 6 Or b <> 5) Then
Cells(a, b).Value = Val(Cells(a, b).Value)
End If
Next
Next
End Sub
SergeiK вне форума Ответить с цитированием
Старый 11.05.2011, 18:21   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Вот это интересно:
For b = 1 To 4
If (b <> 8 Or b <> 6 Or b <> 5) Then



А так - проверяйте перебором массив (Вы ведь вероятно что-то проверить хотели), а потом уже правьте на листе.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 11.05.2011, 19:09   #9
SergeiK
 
Регистрация: 27.04.2011
Сообщений: 7
По умолчанию

все, спасибо ребята за помощь! разобрался!
SergeiK вне форума Ответить с цитированием
Старый 11.05.2011, 19:09   #10
SergeiK
 
Регистрация: 27.04.2011
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Вот это интересно:
For b = 1 To 4
If (b <> 8 Or b <> 6 Or b <> 5) Then



А так - проверяйте перебором массив (Вы ведь вероятно что-то проверить хотели), а потом уже правьте на листе.
так и есть он на листе
SergeiK вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задание разных принтеров для печати одного документа Bagema Microsoft Office Word 2 08.12.2016 13:18
Проблемы с полями при печати документа. alina2012 Microsoft Office Word 1 21.03.2011 22:59
как создать событие при печати документа funthing Microsoft Office Excel 2 07.08.2009 11:28
Сохранение документа при печати vovk Microsoft Office Word 2 12.09.2008 10:12
Макрос сохранения после печати lala_white Microsoft Office Word 2 10.08.2008 12:50