2016-07-03 6 views
2

Мне нужно сканировать определенные ячейки в диапазоне. Если некоторые ячейки пусты, то сообщение «cell empty» будет записано в этой конкретной пустой ячейке. Я пытался следующее:Ошибка времени выполнения # 13 - несоответствие типа (если диапазон ... затем ...)

Sub Empty() 

     Sheets("My sheet").Select 
     If Range("C5:C12,C15:C22,C25:C32,C36:C43,C46:C53,C56:C63,C66:C73,C76:C83,D4,D14,D24,D35,D45,D55,D65,D75").Value = "" Then 
      Range("C5:C12,C15:C22,C25:C32,C36:C43,C46:C53,C56:C63,C66:C73,C76:C83,D4,D14,D24,D35,D45,D55,D65,D75").Value = "cell is empty" 
     End If 
    End sub 

I am getting the error: run time error #13 - type mismatch. 

Так, чтобы помочь любым другим людям, которые, возможно, имели такую ​​же проблему, как и я, я собираюсь дополнить рабочие решения, представленные ниже. Обратите внимание, что я добавил обработку об ошибке, которая предотвращает сообщение «во время выполнения ошибка„1004“: Не найдено ни одной клетки», а также массив для проверки конкретных рабочих листов, которые соответствуют вашим потребностям:

Sub myEmpty() 
     Dim rng As Range 
     On Error GoTo NoBlanks 
     Dim MyArray As Worksheet 

     For Each MyArray In ActiveWorkbook.Worksheets 
      Select Case MyArray.Name 
      Case Is = "Sheet 1", "Sheet 2", "Sheet 3", "Sheet n-1", "Sheet n" 

      With MyArray 
      Set rng = .Range("C5:C12,C15:C22,C25:C32,C36:C43,C46:C53,C56:C63,C66:C73,C76:C83,D4,D14,D24,D35,D45,D55,D65,D75") 
       If CBool(Application.CountBlank(rng)) Then 
       rng.SpecialCells(xlCellTypeBlanks).Value = "cell is empty" 
       End If 
      End With 

      Case Else 
      End Select 
      Next MyArray 

NoBlanks: 

CreateObject("WScript.Shell").Popup " There are no empty cells", 0.7, "INfo:" 

End Sub 

ответ

2

Используйте Range.SpecialCells method с имуществом xlCellTypeBlanks после определения того, что имеется одна или несколько пустых ячеек.

Sub myEmpty() 
    dim rng as range 
    with Sheets("My sheet") 
     set rng = .Range("C5:C12,C15:C22,C25:C32,C36:C43,C46:C53,C56:C63,C66:C73,C76:C83,D4,D14,D24,D35,D45,D55,D65,D75") 
     If cbool(application.countblank(rng)) then 
      rng.specialcells(xlCellTypeBlanks).Value = "cell is empty" 
     End If 
    end with 
End sub 

Пустые и IsEmpty зарезервированные слова в VBA. Обычно лучше всего избегать их повторного использования.

+0

Благодарим вас за ответ. Это сработало! –

2

Вы получаете ошибка 13, потому что вызов .Value в диапазоне, который включает в себя несколько ячеек, возвращает массив Variant. Вы не можете применить одно условие для нескольких ячеек в диапазоне с помощью оператора If, как что либо - вам нужно использовать цикл и тестировать отдельные клетки:

Public Sub FlagEmptyCells() 
    Dim target As Range 
    Set target = Range("C5:C12,C15:C22,C25:C32,C36:C43,C46:C53,C56:C63,C66:C73,C76:C83,D4,D14,D24,D35,D45,D55,D65,D75") 

    Dim current As Range 
    For Each current In target 
     If current.Value = vbNullString Then current.Value = "cell is empty" 
    Next 
End Sub 

Отметим также, что вы не можете иметь Sub с именем Empty - это зарезервированное ключевое слово.

+0

Коминтерн, ваше решение также является хорошим вариантом. Спасибо за ваше время! –

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