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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.07.2009, 16:30   #1
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
Злость Можно ли как-то ускорить выполнение этого кода (обработка примечаний)?

Ниже показан код, который для числа ячеек с примечаниями на листе порядка 300 уже выполняется около 10 секунд на хорошем компьютере. Можно ли как-то ускорить его?

Код:
Sub Кнопка7_Щелчок()

 For i = 1 To (Worksheets.Count - 1)
        Set sh = Worksheets(i)
        Set TRange = Range(sh.Cells(2, 2), sh.Cells.SpecialCells(xlCellTypeLastCell))

        For Each cell In TRange
          
    If (Not cell.Comment Is Nothing) Then
    Text = cell.Comment.Text
    Text = Replace(Text, "[", """[")
    Text = Replace(Text, "]", "]""")
    Text = Replace(Text, ";", ",")
    Text = Replace(Text, "->", "&""->""&")
    If (Mid(Text, 1, 1) = "=") Then Text = Mid(Text, 2, Len(Text) - 1)
    
    If ((Mid(Text, 1, 1) = "<" Or Mid(Text, 1, 1) = ">") And Mid(Text, 2, 1) <> "=") Then
    Text = """" + Mid(Text, 1, 1) + """" + "&" + Mid(Text, 2, Len(Text) - 1)
    End If

    If (Mid(Text, 1, 2) = "<=" Or Mid(Text, 1, 2) = ">=") Then
    Text = """" + Mid(Text, 1, 2) + """" + "&" + Mid(Text, 3, Len(Text) - 2)
    End If

    Text = "A(" + Text + ")"

    cell.formula = "=" & Text
    
    End If

	Next cell
        
    Next i
 
            
End Sub
Тут просто проверяется, есть ли в ячейках примечание, если есть, то в формулу добавляется внутрь функции А() его текст, иногда с заменами символов.
motorway вне форума Ответить с цитированием
Старый 23.07.2009, 16:39   #2
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Я бы посоветовал хотя бы не весь диапзаон проверять на наличие примечаний, а сразу определять диапазон только с примечаниями
Код:
Dim rRange As Range
On Error Resume Next
Set rRange = sh.Cells.SpecialCells(xlCellTypeComments)
On Error GoTo 0
If Not rRange Is Nothing Then
' Выполнение операций над ячейками с примечаниями
Else
msgbox "На листе нет ячеек с примечаниями!"
End If
Тогда вот это условие можно убрать
Код:
If (Not cell.Comment Is Nothing) Then
Ну соответственно и кол-во ячеек для обработки сократится, ведь обрабатываться будут только те, в которых примечания есть без каких-либо проверок на наличие примечаний.

Ну и в начале кода поставьте
Код:
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
а в конце
Код:
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 23.07.2009, 17:06   #3
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Что-то все равно очень долго... На обработку 465 примечаний больше минуты на 3 ГГц, 2 ГБ памяти. При том, что в реальном приложении их может быть больше

Последний раз редактировалось motorway; 23.07.2009 в 17:23.
motorway вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выполнение строки как кода в Delphi Asteroid Общие вопросы Delphi 11 21.09.2009 18:46
Как ускорить работу этого макроса? Neo007 Microsoft Office Excel 1 22.06.2009 18:14
Выполнение кода из файла.. NSvirus Паскаль, Turbo Pascal, PascalABC.NET 25 14.06.2009 00:56
Как ускорить программу ? juan666777 Общие вопросы Delphi 2 02.05.2009 19:48
Как ускорить выполнение макросов tat-besidovska Microsoft Office Excel 1 22.01.2008 12:12