Тип ошибки VBA 13: несоответствие

Я не очень хорошо знаком с VBA, но мне нужно было изменить свой Excel, чтобы разрешить более трех условных форматов.

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

Мой код:

Private Sub Worksheet_Change(ByVal Target As Range)
  Set MyPlage = Range("G3:AG115")

   For Each Cell In MyPlage
     If Cell.Value = "." Then
      Cell.Interior.ColorIndex=28
      Cell.Font.Bold = True
     End If

     If Cell.Value = "X1" Then
       Cell.Interior.ColorIndex=32
       Cell.Font.Bold = True
     End If

     If Cell.Value = "1X" Then
       Cell.Interior.ColorIndex=6
       Cell.Font.Bold = True
     End If

     If Cell.Value = "2X" Then
       Cell.Interior.ColorIndex=45
       Cell.Font.Bold = True
     End If

     If Cell.Value = "3X" Then
       Cell.Interior.ColorIndex=4
       Cell.Font.Bold = True
     End If

     If Cell.Value = "XY" Then
       Cell.Interior.ColorIndex=44
       Cell.Font.Bold = True
     End If

     If Cell.Value = "bt" Then
       Cell.Font.ColorIndex=27
       Cell.Interior.ColorIndex=27
     End If

     If Cell.Value = "bl" Then
       Cell.Font.ColorIndex=28
       Cell.Interior.ColorIndex=28
     End If

     If Cell.Value <> "bt" And Cell.Value <> "bl" And Cell Value <> "." And Cell.Value <> "X1" And Cell.Value <> "1X" And Cell.Value <> "2X" And Cell.Value <> "3X" And Cell.Value <> "XY" Then
       Cell.Interior.ColorIndex=xlNone
     End If
   Next
End Sub

Содержимое выбирается либо из выпадающего списка, либо записываются bt и bl, чтобы проверить, выделены ли эти строки.

Когда я пытаюсь изменить содержимое, я получаю Error: 13 Type Mismatch.

Линия

If Cell.Value = "." Then 

выделен как источник ошибки (я думал, что проблема может быть в ".", но если я удалю этот набор инструкций, тогда строка

If Cell.Value = "X1" Then

выделено)

Я погуглил и увидел, что вы можете сделать цикл, который, если ошибка Then Next, я не уверен, как именно это закодировать, и я бы предпочел решить проблему кодирования, чем сделать быстрое исправление.

Если у кого-то есть идеи о том, где я ошибаюсь/решения, это было бы здорово.


person Jenny Dithe    schedule 08.01.2012    source источник
comment
Что находится в ячейках, которые вызывают эту ошибку? Я пробовал использовать различные типы содержимого, как с неявным, так и с явным объявлением переменных, но не могу воспроизвести эту ошибку.   -  person GSerg    schedule 08.01.2012
comment
Я предполагаю, что вы используете xl03, который ограничен тремя условными форматами (хотя есть обходные пути)?   -  person brettdj    schedule 08.01.2012
comment
Это не ответ на ваш вопрос, но зачем проверять For Each Cell In MyPlage, если можно просто проверить For Each Cell In Target?   -  person Patrick Honorez    schedule 08.01.2012


Ответы (1)


РЕДАКТИРОВАТЬ

Если на листе есть какие-либо значения ошибок (например, #NA #DIV/0 и т. д.), строка If Cell... завершится ошибкой.

Измените его на

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cell as Range
    Set MyPlage = Range("G3:AG115")
    For Each Cell In MyPlage.Cells
        If Not IsError(Cell) Then
            If Cell.Value = "." Then
                Cell.Interior.ColorIndex=28
                Cell.Font.Bold = True
            End If

            etc

        End If
     Next
person chris neilsen    schedule 08.01.2012
comment
@Jenny, когда вы получите ответ, который вас удовлетворит, вы должны принять его (щелкните галочкой). См. мета - person chris neilsen; 12.01.2012