2017-01-08 1 views
0
Sub main() 

Dim i, j As Integer 

Worksheets("sheet1").Activate 
Worksheets("sheet2").Activate 

For i = 1 To 200 
    For j = 1 To 200 
     If Worksheets("sheet1").Cells(i, 1) = Worksheets("sheet2").Cells(j, 1) Then 
      Worksheets("sheet1").Cells(i, 1).inerior.Color = vbRed 
     End If 
    Next j 
Next i 

End Sub 

Не знаю, почему он возвращает ошибку? кажется, что все правильно. но он говорит, что объект не поддерживает это свойство или метод. Я пробовал excel 2013.объект не поддерживает этот тип недвижимости в vba

+1

У вас есть ** Typo **, это должно быть 'Worksheets (" sheet1 "). Ячейки (i, 1) .Interior.Color = vbRed' и NOT' inerior' –

+0

Кроме того, вам необходимо определить 'Dim i As integer, j As Integer', иначе' i' будет определен 'As Variant'. Кроме того, лучше избегать «Активировать». –

+0

строчная буква после точки, как правило, является признаком того, что '.inerior' не существует. http://stackoverflow.com/questions/21399691/excel-vba-highlight-duplicates-in-active-column – Slai

ответ

0

Перейдите через ваш код быстро, чтобы удалить эту ошибку и избегать будущих ошибок. Большинство из них освещено в комментариях Шай Радо.


Dim i, j As Integer 

Это объявляет i как вариант. Вы должны быть конкретными, как это:

Dim i As Integer, j As Integer 

Следующий код не делает ничего, и может быть удален. Вам нужно будет только Activate лист, если вы хотите использовать объект ActiveSheet. Это очень обескураживает - так хорошо сделано, что вы этого не делаете.

Worksheets("sheet1").Activate 
Worksheets("sheet2").Activate 

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


Worksheets("sheet1").Cells(i, 1).inerior.Color = vbRed 

Существует опечатка здесь. Interior, а не inerior. Обычно вы можете обнаружить эти ошибки, потому что вы можете видеть, что ваша собственность не была капитализирована так, как вы ожидали.


Вы не указали, который Workbook эти листы. Как Sheet1 и Sheet2 являются по умолчанию имена, вы особенно подвержены риску, если у вас есть два или более рабочих книг открыть при запуске вашего суб. Excel может запутаться и запустить код в неправильной книге. Вот несколько способов избежать этого:

  1. Изменения Worksheets("Sheet1").Cells() в ThisWorkbook.Worksheets("Sheet1").Cells()
  2. Используйте имена объектов листа. Это просто Sheet1 и Sheet2 и т. Д., Если вы их не изменили. Например. Sheet1.Cells()


Так вот ваш окончательный код

Sub main() 

Dim i as Integer, j As Integer 

For i = 1 To 200 
    For j = 1 To 200 
     If Sheet1.Cells(i, 1) = Sheet2.Cells(j, 1) Then 
      Sheet1.Cells(i, 1).Interior.Color = vbRed 
     End If 
    Next j 
Next i 

'Sheet2.Activate 
End Sub 

Я хотел бы также сообщить, что вы называете ваш суб к чему-то, что лучше описывает , что он делает, а не main.

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