Excel не отвечает после запуска макроса

Я использовал приведенный ниже код, чтобы скопировать столбец с одного листа на другой, а затем заменить пустые ячейки значением Null:

'Copying If Employee sourceSheet.Activate Range(Cells(2, 7), Cells(Rows.Count, 7).End(xlUp)).Select Selection.Copy destSheet.Activate Range("E2", Cells(Rows.Count, 7)).PasteSpecial For Each cell In Range("E2", Cells(Rows.Count, 5)) If Len(cell.Value) = 0 Then cell.Value = "No" End If 

Когда я заменяю оператор for на Range("E2", Cells(500,5)) он работает нормально.

Что может быть проблемой? Я не мог понять. Кто-нибудь может мне с этим помочь?

Пытаться

 For Each cell In Range("E2", Cells(destSheet.UsedRange.Rows.Count, 5)) If Len(cell.Value) = 0 Then cell.Value = "No" End If 

Или более элегантно (и, вероятно, намного быстрее),

 Dim calcStatus As XlCalculation calcStatus = Application.Calculation Application.ScreenUpdating = False Application.Calculation = xlCalculationManual For Each cell In Range("E2:E" & destSheet.UsedRange.Rows.Count) If Len(cell.Value) = 0 Then cell.Value = "No" End If Application.Calculation = calcStatus Application.ScreenUpdating = True 

Excel 2007 содержит 1 048 576 строк.

  1. Для каждого цикла должен пройти миллион ячеек и каждый раз он должен загрузить ячейку (со всеми ее свойствами) в память. Эта постоянная загрузка и выгрузка объектов ячейки очень ресурсоемкая.

  2. Каждый раз, когда вы назначаете значение No ячейке, Excel пересчитывает лист, обновляет экран и может вызывать рабочие листы / события рабочей книги / ячейки. Все это, прежде чем оценивать следующую ячейку в следующей ячейке. Если у вас нет ОГРОМНОГО количества данных, в этом примере это будет происходить через пару сотен tousand раз.

500 ячеек намного меньше и их можно обрабатывать без проблем.

Редактировать:

Охват последней строки.

Если вы хотите получить последнюю видимую строку с данными, используйте:

 With Workbooks(myWorkbook).Worksheets(myWorksheet) LastRow = .Cells(.Rows.Count, "E").End(xlUp).Row End With 

Если вы хотите получить последнюю строку с данными, независимо от ее видимости или скрытости, используйте:

 With Workbooks(myWorkbook).Worksheets(myWorksheet) LastRow =.Range("E2").EntireColumn.Find("*", .Cells(1, .Range("E2").Column), , , xlByRows, xlPrevious).Row End With 

Для получения дополнительной информации Rondebruin имеет хороший сайт с дополнительной информацией о получении строки / колонки las.

Как справедливо указывает Кабибербах, ваша текущая рутина проходит через линии 1М. В дополнение к его решению и JustinJDavies, рассмотрите этот взлом:

Вместо того, чтобы устанавливать значения от 0 до No , вы просто можете изменить формат, если ячейки отображаться No каждый раз, когда значение равно 0 . Это можно сделать без макроса, применяя этот настраиваемый формат к ячейкам: 0,-0,"No",@ . Возможно, вам придется заменить 0 на ваш формат по умолчанию – см. Эту ссылку для подробного описания формата пользовательского номера.

Если вы хотите сделать это в VBA, этой строки будет достаточно:

 Range("E2:E" & Cells(Rows.Count, 1).End(xlUp).Row).CustomFormat = "0,0,""No"",@" 
  • Более быстрый способ импорта таблицы Excel в массив с помощью ADO
  • Excel VBA, чтобы найти дубликаты в столбце и добавить их соответствующие значения из другого столбца
  • Поле слишком маленькое, чтобы принять объем данных, которые вы пытались добавить. Кто-нибудь получил эту ошибку от ADO.NET?
  • Как скопировать один раздел текста из Word в Excel с помощью макроса Excel?
  • Как изменить ориентацию меток оси?
  • Как преобразовать файл excel формата .xlsx в .xls в Java 1.3?
  • Удаление строк по условию в столбце
  • Excel VBA: щелкните правой кнопкой мыши по фигуре и добавьте новый пункт меню
  • Время поиска прошло два раза в формате yyyy-mm-dd hh: mm
  • VLOOKUP с OR (выбор) при использовании другой ячейки в качестве выбора
  • Excel 2007, один экземпляр работает заставляет других зависать? Я уверен, что в 2003 году это было не так
  • Interesting Posts

    Используйте конкретную формулу, основанную на ссылочной стоимости

    Динамические диапазоны проверки Разрыв при открытии файла '07 в '16

    Excel 2007 – Консолидация несмежных данных из нескольких листов в мастер-лист (то есть бюджетную книгу)

    Получение событий дважды с использованием NetOffice для добавления COM

    Поиск нескольких конкретных слов в Excel

    Динамическое обновление списка выбора на основе другого списка выбора

    Проблемы с загрузкой scipy через PyXLL – Кто-нибудь преуспел в загрузке Scipy через PyXLL?

    Листы с надписью при импорте нескольких текстовых файлов Excel VBA

    Excel извлекает жирный текст в тексте

    Laravel excel export – строковый отформатированный столбец, отображающий число

    генерируя диапазон из других ячеек excel vba

    Скопируйте и вставьте VBA excel

    MySQL в Excel VBA

    как удалить символы «-» и «/» из листа excel

    Источник проверки данных Excel для разных столбцов

    Давайте будем гением компьютера.