Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Исправить макрос, для корректной работы. (заверешение макроса при закрытии файла)
 
Добрый день.
Есть файл, в нем есть 2 макроса, которые зациклены(повторяют действие каждые 3 секунды).
Если мы закрываем файл с макросами, но при этом открыт другой файл Excel, файл с макросами закрывается, и открывается заново через 3 секунды.
Тоесть нельзя закрыть файл, т.к. цикличный макрос не останавливается.

Нужно скорректировать данный файл. Привести в порядок макрос.
Как остановить цикличный макрос при закрытии книги.
 
Цитата
Hugo написал:
да как так, первая ссылка https://learn.microsoft.com/en-us/office/vba/api/excel.application.ontime и там в самом конце, что логично

Спасибо за ответ. Общий смысл прояснился. Осталось релизовать. Вроде все просто, но где-то сильно туплю...

Код
Private Sub Workbook_Open()
Dim conditionRange As Range
    Dim resultRange As Range
    Dim trueResult As String
    Dim falseResult As String
    
    Set conditionRange = Range("C9:C146")
    Set resultRange = Range("F9:F146")
    trueResult = "RAL 9016"
    falseResult = ""
    
    fillBasedOnCondition conditionRange, resultRange, trueResult, falseResult
    Application.OnTime Now + TimeValue("00:00:03"), "ExampleUsag"
    
    fillBasedOnCondition conditionRange, resultRange, trueResult, falseResult
    Application.OnTime Now + TimeValue("00:00:03"), "ExampleUsage"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Procedure:="ExampleUsag", Schedule:=False
    Procedure:="ExampleUsage", Schedule:=False
End Sub


Дописал код, с командой "BeforeClose".
Но Excel ругается.
Пишет "Syntax error", а потом "Can,t execute code in break mode".
Как остановить цикличный макрос при закрытии книги.
 
Цитата
БМВ написал:
надо предусматривать вызов деактивации текущего OnTime по событию деактивации книги.   Для этого нужно хранить значение Now + TimeValue("00:00:03") в глобальной переменной

Спасибо за ответ. Какие операторы для этого использовать?
Цитата
Мистер Экселистор написал:
Ну прям ооочень долго файл закрывается...

Он открывается через 3 секунда, сам.
Его не возможно закрыть.

Цитата
Hugo написал:
Так если прочитать хелп - там есть описание, и пример как это нужно делать.

К сожалению не нашел необходимого решения.
Изменено: БМВ - 16.08.2024 07:44:58
Как остановить цикличный макрос при закрытии книги.
 
Всем доброго времени суток.
Есть 2 макроса, которые зациклены, и срабатывают каждые 3 секунды.
         Проблема заключается в следующем:
Пример: Если открыты 2а файла Excel, один обычный без макросов, 2-ой с этими макросами. То при закрытии файла с макросами, он открывается через 3 секунды. Т.к. макрос не останавливается.
Прошу помощи, как прописать остановку?
Заранее спасибо.

Такой код в WorkBook:

Код
Private Sub Workbook_Open()
Dim conditionRange As Range
    Dim resultRange As Range
    Dim trueResult As String
    Dim falseResult As String
    
    Set conditionRange = Range("C9:C146")
    Set resultRange = Range("F9:F146")
    trueResult = "RAL 9016"
    falseResult = ""
    
    fillBasedOnCondition conditionRange, resultRange, trueResult, falseResult
    Application.OnTime Now + TimeValue("00:00:03"), "ExampleUsag"
    
    fillBasedOnCondition conditionRange, resultRange, trueResult, falseResult
    Application.OnTime Now + TimeValue("00:00:03"), "ExampleUsage"
End Sub


Такой код на листе:

Код
Function fillBasedOnCondition(conditionRange As Range, resultRange As Range, _
trueResult As String, falseResult As String)
    Dim i As Long
    For i = 1 To conditionRange.Cells.Count
    If conditionRange.Cells(i).Value Like "*БЕЛ*" Then
        resultRange.Cells(i).Value = trueResult
    End If
Next i
End Function
Sub ExampleUsag()
    Dim conditionRange As Range
    Dim resultRange As Range
    Dim trueResult As String
    Dim falseResult As String
    
    Set conditionRange = Range("C9:C147")
    Set resultRange = Range("G9:G147")
    trueResult = "ГЛЯНЕЦ"
    falseResult = ""
    
    fillBasedOnCondition conditionRange, resultRange, trueResult, falseResult
    Application.OnTime Now + TimeValue("00:00:03"), "ExampleUsag"
End Sub
Sub ExampleUsage()
    Dim conditionRange As Range
    Dim resultRange As Range
    Dim trueResult As String
    Dim falseResult As String
    
    Set conditionRange = Range("C9:C147")
    Set resultRange = Range("F9:F147")
    trueResult = "RAL 9016"
    falseResult = ""
       
    fillBasedOnCondition conditionRange, resultRange, trueResult, falseResult
    Application.OnTime Now + TimeValue("00:00:03"), "ExampleUsage"
End Sub
VBA Удалять строки с любым текстом в ячейке размером 8 пунктов.
 
Цитата
vikttur написал:
Помощь получили -помогите и Вы форуму - вернитесь, исправьте сообщения.

Извините, а что нужно исправить в моих сообщениях?
VBA Удалять строки с любым текстом в ячейке размером 8 пунктов.
 
Всем спасибо!

Решил вопрос макросом "Kuzmich"
Немного доработав его:

Код
Sub DelRow()
Dim i As Long
Dim iLastRow As Long
 iLastRow = Cells(Rows.Count, "B").End(xlUp).Row
  For i = iLastRow To 9 Step -1
   If Cells(i, "D") > 0 And Cells(i, "D").Font.Size = 8 Then Rows(i).Delete
  Next
End Sub
Изменено: Zhenya1357900 - 29.10.2019 14:16:30
VBA Удалять строки с любым текстом в ячейке размером 8 пунктов.
 
Какой код определяет, что в ячейке есть какое либо число? Осталось добавить только это условие.
VBA Удалять строки с любым текстом в ячейке размером 8 пунктов.
 
Цитата
Kuzmich написал:
Я так понял, что вам нужно

Этот код удаляет пустые значения которые иммеют 8 пунктов. И оставляют текст который имеет 8 пунктов.

Нужно удалить ячейки с текстом который имеет 8 пунктов. И оставить пустые ячейки.
VBA Удалять строки с любым текстом в ячейке размером 8 пунктов.
 
Цитата
Kuzmich написал:
If Cells(i, "D").Font.Size = 8 Then Rows(i).Delete

Тоесть в этот код нужно добавить условия наличия какого-либо числа в ячейке. И все должно быть как нужно.
VBA Удалять строки с любым текстом в ячейке размером 8 пунктов.
 
Цитата
Kuzmich написал:
If Cells(i, "D").Font.Size = 8 Then Rows(i).Delete

Нужно оставить строки, в которых в столбце 4 нет значения, и эта ячейка имеет настройку 8 пунктов.

Ваш код, удаляет все строки с 8 пунктами и с числом и без.

Спасибо за труд.
VBA Удалять строки с любым текстом в ячейке размером 8 пунктов.
 
Цитата
Юрий М написал:
И что из того, что добавили про 10 пунктов? Проверка на размер шрифта и проверка на наличие цифры в ячейке - это одинаковые вещи?

Нет конечно. Но мне бы хотелось что бы эти 2 условия исполнялись для столбца 4. Это было бы идеальным решением моей задачи.
VBA Удалять строки с любым текстом в ячейке размером 8 пунктов.
 
Цитата
Юрий М написал:
Вы полагаете, что это одно и то же условие?

Я далее добавил, что кроме заголовков которые 10 пунктов.
VBA Удалять строки с любым текстом в ячейке размером 8 пунктов.
 
Цитата
Kuzmich написал:
удалять строки в которых по 4 столбцу есть какой-либо текст размером 8 пунктовКод ? 12345678Sub DelRow()Dim i As LongDim iLastRow As Long iLastRow = Cells(Rows.Count, "B").End(xlUp).Row  For i = iLastRow To 9 Step -1    If Cells(i, "D") = "" Or Cells(i, "D").Font.Size = 8 Then Rows(i).Delete  NextEnd Sub

Практически да, то что нужно.
Но нужно оставить строки, в которых ячейки, в 4 столбце не имею значения.
VBA Удалять строки с любым текстом в ячейке размером 8 пунктов.
 
Практически да, то что нужно.
Но нужно оставить строки, в которых ячейки, в 4 столбце не имею значения.
VBA Удалять строки с любым текстом в ячейке размером 8 пунктов.
 
Не совсем. Нужно удалить те строки, в которых в ячейках столбца 4, есть хоть какая-либо цифра. Кроме названия группировки, которая 10 пунктов.

В итоге должны остаться те строки, в столбце 4 которых пустые ячейки  и строки с числом в 10 пунктов.
VBA Удалять строки с любым текстом в ячейке размером 8 пунктов.
 
Код
Sub Макрос1()
'
' Макрос1 Макрос
'

'
    Columns("D:D").Select
    Application.FindFormat.NumberFormat = "0.000"
    With Application.FindFormat.Font
        .Size = 8
        .Subscript = False
        .TintAndShade = 0
    End With
    Selection.EntireRow.Delete
End Sub

Записал макрос. Но при выполнении он выделяют всю таблицу и удаляет. И так же не решил проблему с выбором всех ячеек с размером 8.
Допустим можно сделать два этапа в макросе, по поиску одного числового формата, потом другого.
Теперь как все-таки что бы он выделял нужное и удалял?
Изменено: Zhenya1357900 - 29.10.2019 13:38:49
VBA Удалять строки с любым текстом в ячейке размером 8 пунктов.
 
Пробовал искать по формату.
Тут тогда 2 вопроса.
Как сделать так, что бы он пустые ячейки не искал?
Нашел отличия в формате между ячейкой с числом и пустой ячейкой. Разный числовой формат у них. Но у некоторых ячеек с числами стоит разделитель групп разрядов, получается при задании числового формата в поиске,  нужно либо задать разделитель ячеек, либо нет. В итоге половина ячеек не будут находиться.

Ну и даже если получится сделать такой поиск, как потом выделить найденные ячейки, и удалить строки на которых они находятся.  
Изменено: Zhenya1357900 - 29.10.2019 11:50:19
VBA Удалять строки с любым текстом в ячейке размером 8 пунктов.
 
Как это сделать?
Прикрепляю файл.
VBA Удалять строки с любым текстом в ячейке размером 8 пунктов.
 
Всем добрый день.
Есть таблица Excel. На 11000 строк примерно.
В этой таблице нужно удалять строки в которых по 4 столбцу есть какой-либо текст размером 8 пунктов.
Так как текст размером 10 пунктов является заголовком иерархической системы и его удалять не нужно.
Буду признателен за помощь кодом.
Страницы: 1
Наверх