Здравствуйте,
в учебно-познавательных целях (а если получится удачное решение, то и возьму на вооружение) решил формулы в книге заменить на макросы. Но переводить все формулы в макросы (известным мне способом, пример во вложении) довольно долго и неэффективно.
Прошу подсказать, как можно макрос упростить для написания (не сильно тормозящим вычисления способом, так как в конечной книге будет 5-10 листов с используемыми ячейками по 15 столбцов и до 10 000 строк в каждом. Обновление данных на каждом листе хочу сделать раздельно, привязав макрос страницы к событию открытия данного листа.
Все это задумал с целью выяснения следующих вопросов (публикую для учитывания этих аспектов при упрощении макроса с оглядкой на п. 2.6 ПРАВИЛА ФОРУМА):
1. Уменьшится ли вес файла, если большинство формул книги переведу в макросы.
2. Увеличится ли быстродействие открытия книги.
3. Увеличится ли защита формул от копирования и распространения.
4. Насколько сложно будет вносить улучшения и изменения в формулы книги и отлавливать ошибки
Прилагаю код пробного макроса
Код |
---|
Option Explicit
Sub формулы()
Application.ScreenUpdating = False
Лист1.Select
Dim iQ As Integer
iQ = 1000
'объявление переменной
Dim TextFormula As String
Dim TextFormula3 As String
Dim TextFormula4 As String
Dim TextFormula5 As String
'Dim TextFormula6 As String
'Dim TextFormula7 As String
'Dim TextFormula8 As String
'Dim TextFormula9 As String
'формулы
TextFormula = "=1+2"
TextFormula3 = "=B5+3"
TextFormula4 = "=C5+2"
TextFormula5 = "=D5+6"
'TextFormula6 = ""
'TextFormula7 = ""
'TextFormula8 = ""
'TextFormula9 = ""
'запись формул в первую используемую строку
Range("b5").Formula = TextFormula
Range("C5").Formula = TextFormula3
Range("D5").Formula = TextFormula4
Range("E5").Formula = TextFormula5
'заполнение результатов формул в виде текста в последующие строки
Range("b5:b" & iQ).FillDown
Range("b5:b" & iQ).Value = Range("b5:b" & iQ).Value
Range("C5:C" & iQ).FillDown
Range("C5:C" & iQ).Value = Range("C5:C" & iQ).Value
Range("D5:D" & iQ).FillDown
Range("D5:D" & iQ).Value = Range("D5:D" & iQ).Value
Range("E5:E" & iQ).FillDown
Range("E5:E" & iQ).Value = Range("E5:E" & iQ).Value
Application.ScreenUpdating = True
End Sub
|