Перейдите через ваш код быстро, чтобы удалить эту ошибку и избегать будущих ошибок. Большинство из них освещено в комментариях Шай Радо.
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 может запутаться и запустить код в неправильной книге. Вот несколько способов избежать этого:
- Изменения
Worksheets("Sheet1").Cells()
в ThisWorkbook.Worksheets("Sheet1").Cells()
- Используйте имена объектов листа. Это просто
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
.
У вас есть ** Typo **, это должно быть 'Worksheets (" sheet1 "). Ячейки (i, 1) .Interior.Color = vbRed' и NOT' inerior' –
Кроме того, вам необходимо определить 'Dim i As integer, j As Integer', иначе' i' будет определен 'As Variant'. Кроме того, лучше избегать «Активировать». –
строчная буква после точки, как правило, является признаком того, что '.inerior' не существует. http://stackoverflow.com/questions/21399691/excel-vba-highlight-duplicates-in-active-column – Slai