2016-12-22 7 views
0

Мне нужен быстрый код для очистки формата всех ячеек, которые пусты. Я написал этот код, но он слишком медленный. Есть ли способ сделать это быстрее?VBA Удалить формат из пустых ячеек в Excel

Sub removeFormatEmpty() 
    'Declaration of variables 
    Dim sheet As Worksheet 
    Dim rcell As Range 

    For Each sheet In Worksheets 
     sheet.Activate 
     'Cells.UnMerge 
     For Each rcell In sheet.UsedRange.Cells 
      If rcell.MergeCells = True Then 
       rcell.UnMerge 
      End If 
      If rcell.Value = "" Then 
       rcell.ClearFormats 
      End If 
     Next rcell 
    Next sheet 
End Sub 

Этот код работает, однако он медленный, так как ему нужно идти по ячейке. Есть ли способ выбрать весь диапазон, кроме ячеек с содержимым?

Обновление: Благодарим вас за комментарии bobajob и jordan. Я смог обновить код и сделать его намного быстрее и оптимизирован. Это новый код:

Sub removeFormatEmptyImproved() 
    Dim sheet As Worksheet 
    Application.Calculation = xlCalculationManual 
    Application.ScreenUpdating = False 

    For Each sheet In Worksheets 
     'sheet.Activate 
     sheet.UsedRange.SpecialCells(xlCellTypeBlanks).ClearFormats 
    Next sheet 

    Application.Calculation = xlCalculationAutomatic 
    Application.ScreenUpdating = True 
End Sub 

Так что теперь оно решено.

+0

Попробуйте 'sheet.SpecialCells (xlCellTypeBlanks)' – bobajob

+1

Вам не нужно 'Activate' листа, чтобы внести изменения в нем, а также использовать' Application.ScreenUpdating = False' и 'Application.Calculation = xlCalculationManual' в начале юга для ускорения работы, но не забудьте вернуть их обратно в' True' и 'xlCalculationAutomatic', соответственно, в конце вашего подкаталога – Jordan

ответ

1
  • Во-первых, вы не должны проверить клетка ли сливались перед стиранием его. Таким образом, чтобы разъединить все клетки в sheet ...

    sheet.UsedRange.UnMerge 
    
  • Вам не нужно активировать лист перед изменением его

  • Как уже упоминалось в комментариях, вы можете изменить все клетки сразу, используя

    sheet.UsedRange.SpecialCells(xlCellTypeBlanks).ClearFormats 
    
  • Включение Calculation в ручной режим и ScreenUpdating ложь легкий идти к методу, чтобы ускорить большинство VBA кода вверх!

    Application.Calculation = xlCalculationManual 
    Application.ScreenUpdating = False 
    
    ' <other code> 
    ' Include error handling so that these are always set back!   
    
    Application.Calculation = xlCalculationAutomatic 
    Application.ScreenUpdating = True 
    

Так что ваши результате Sub будет

Sub removeFormatEmpty() 

    Dim sheet As Worksheet 

    Application.Calculation = xlCalculationManual 
    Application.ScreenUpdating = False 

    For Each sheet In ThisWorkbook.Worksheets 

     sheet.UsedRange.UnMerge 

     sheet.UsedRange.SpecialCells(xlCellTypeBlanks).ClearFormats 

    Next sheet 

    Application.Calculation = xlCalculationAutomatic 
    Application.ScreenUpdating = True 

End Sub 

Заключительный шаг, чтобы ускорить процесс будет копаться в ваш UsedRange немного больше. Это может быть известно для запоминания давно неиспользуемых ячеек и гораздо большего, чем необходимо. Если вы знаете макет листа, может быть способ ограничить диапазон, с которым вы работаете.

Смотрите некоторые способы сделать это здесь: Getting the actual usedrange

Смежные вопросы