VBA Code блокирует Excel при запуске, но работает нормально при пошаговом выполнении кода - PullRequest
0 голосов
/ 13 марта 2020

надеюсь, что все хорошо!

Я разместил этот вопрос на MrExcel, но подумал, что он может набрать больше сил.

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

Этот набор был определен строками, равными друг другу. Для любого заданного значения lat / long / timestamp мне дается до пяти значений. Я использовал функцию, чтобы определить, какой элемент в каждом наборе имеет наибольшее значение. Это работает.

Функция:

=IF(F13=MAX(IF($A:$A=A13, $F:$F)), "Yes", "No")

Я хотел бы открыть каждый файл, а затем запустить скрипт. Итак, я написал VBA для автоматизации. Сначала сработало, потом начал замораживать мой блок. Я не уверен, почему.

Я вставил ссылку на тестовый файл ниже: Тестовый файл CSV Но также использовал скриншоты, чтобы обеспечить понимание без загрузки файла.

Original CSV File Screenshot

Обратите внимание на одни и те же метки времени, для каждой из которых я хочу получить наибольшее значение.

При нажатии F8 и переходе по коду , У меня будет следующее: Filtered Data Screenshot

Это правильно, но когда я запускаю это как скрипт (без шагов), файл CSV мигает бесконечно.

Любая помощь будет принята с благодарностью. Код показан ниже.

Sub FilterRSRP_From_CSV()

    Application.ScreenUpdating = False

    Application.DisplayAlerts = False 'switching off the alert button

    ActiveSheet.Name = "OriginalData"

    Range("I8").Select
    Selection.FormulaArray = "=IF(RC[-3]=MAX(IF(C1=RC[-8], C6)), ""Yes"", ""No"")"
    Selection.AutoFill Destination:=Range("I8:I30000"), Type:=xlFillDefault
    Range("I8:I30000").Select

    Columns("I:I").Select
    Selection.AutoFilter
    ActiveSheet.Range("$I$1:$I$30000").AutoFilter Field:=1, Criteria1:="Yes"
    Cells.Select
    Range("L19").Activate
    Selection.Copy

    Sheets.Add After:=ActiveSheet
    ActiveSheet.Name = "FilteredData"
    ActiveSheet.Paste
    Application.CutCopyMode = False

    Columns("I:I").Select
    Selection.Delete Shift:=xlToLeft

    Worksheets("OriginalData").Delete

    ActiveWorkbook.Save

    Workbooks.Close

1 Ответ

2 голосов
/ 13 марта 2020

Я очистил ваш код, чтобы вы убрали выбор и снова включили свет в конце.

Откуда вы это запускаете? Личная макрокоманда или книга хозяина? Вы можете получить предупреждение в конце, так как вы массово закрываете книги, вам лучше указать книги, установить для их свойства .Saved значение true, а затем закрыть их, и предупреждение будет превышено.

Sub FilterRSRP_From_CSV()

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False 'switching off the alert button

    ActiveSheet.Name = "OriginalData"

    Range("I8").FormulaArray = "=IF(RC[-3]=MAX(IF(C1=RC[-8], C6)), ""Yes"", ""No"")"
    Range("I8").AutoFill Destination:=Range("I8:I30000"), Type:=xlFillDefault
    Columns("I:I").AutoFilter
    ActiveSheet.Range("$I$1:$I$30000").AutoFilter Field:=1, Criteria1:="Yes"
    Cells.Copy

    Sheets.Add After:=ActiveSheet
    ActiveSheet.Name = "FilteredData"
    ActiveSheet.Paste

    Columns("I:I").Delete Shift:=xlToLeft

    Worksheets("OriginalData").Delete

    ActiveWorkbook.Save
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    Workbooks.Close
End Sub

Кроме того, что такое кнопка «оповещения», которую вы пытаетесь избежать, отключив displayalerts, если это всего лишь сохранение, тогда мы можем обойти это, как я объяснил выше, и не нужно скрывать все оповещения из Excel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...