Страницы: 1
RSS
Вычисления в книге, автоматически или вручную, как проверить в vba.
 
Всем здрасти.
Есть код c циклом по вставке данных по ячейкам.
Код
Sub zzz()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
For i = 1 To 10000
    For j = 1 To 20
        Worksheets("Лист1").Cells(i, j) = 4
    Next j
Next i
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Проблема в том что во время работы данного цикла в книге могут происходить еще некоторые действия в которых присутствует:
 Application.Calculation = xlCalculationAutomatic, и тогда капец.
Можно ли перед циклом запретить любые действия или в самом цикле проверять режим вычисления?
Код
Sub zzz()
For i = 1 To 10000
    For j = 1 To 20

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

        Worksheets("Лист1").Cells(i, j) = 4
    Next j
Next i
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
 
Ну так и сравнивайте Application.Calculation = xlCalculationManual или Application.Calculation = xlCalculationAutomatic
По вопросам из тем форума, личку не читаю.
 
БМВ,
Вот так:
Код
Sub zzz()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
For i = 1 To 10000
    For j = 1 To 20
    If Application.Calculation = xlCalculationAutomatic Then
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
    End If
        Worksheets("Лист1").Cells(i, j) = 4
    Next j
Next i
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
 
смысл сравнивать если сперва пригудительно установили Application.Calculation = xlCalculationManual
По вопросам из тем форума, личку не читаю.
 
Цикл длинный и во время него может включится Application.Calculation = xlCalculationAutomatic из другого макроса.
БМВ, Спасибо.
 
тогда снова вопрос, зачем сравнивать если просто нужно устанавливать  перед изменением
Application.Calculation = xlCalculationManual

но ,  как оно включится? Есть макрос что обрабатывает изменения?  
По вопросам из тем форума, личку не читаю.
 
События отключайте, чтоб другие макросы не реагировали.
 
Цитата
Stalevar написал:
может включится Application.Calculation = xlCalculationAutomatic из другого макроса.
Определяйте место, где это произойдет, и вновь отключайте пересчет.
 
Цитата
Stalevar написал:
Цикл длинный
цикл не длинный, но довольно дурацкий
вместо
Код
For i = 1 To 10000
    For j = 1 To 20
        Worksheets("Лист1").Cells(i, j) = 4
    Next j
Next i
пишем
Код
Worksheets("Лист1").Cells(1).Resize(1000,20) = 4
(без всяких циклов)
Изменено: Ігор Гончаренко - 03.01.2021 17:51:59
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко,Это пример.
Вот такой цикл:
Код
For i = 1 To maTable.Rows.Length 'как можно по другому вставить эти данные на лист?'
    For j = 1 To maTable.Rows(i - 1).Cells.Length    
     If Application.Calculation = xlCalculationAutomatic Then
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
    End If    
        Worksheets("table").Cells(i, j) = maTable.Rows(i - 1).Cells(j - 1).innerText
    Next j
Next i
 
Цитата
Stalevar написал:
To maTable.Rows.Length 'как можно по другому вставить эти данные на лист?'
Это вообще что такое? 8-0
 
RAN,
Set maTable = Htable(1) ' таблица под номером 1
 
RAN,Данные со страницы html  
 
Цитата
Stalevar написал:
.Rows.Length
вот это свойство заинтриговало. да и innerText как то тоже не сильно знакомо в контексте VBA.
Изменено: БМВ - 07.01.2021 14:14:03
По вопросам из тем форума, личку не читаю.
 
БМВ, Есть страница в закрытой сети с которой нужно вытащить данные на лист excel, через импорт дынных не получается, по этому вот так:
Изменено: Stalevar - 31.03.2022 15:23:07
 
Ну да, это весьма важное дополнение.
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх