1.) Синтаксис цикла: For ... To должен находиться в одной строке.
2.) Синтаксис диапазона: Ваша попытка использовать «myRange ((« A & rownum: H »& rownum))»
ссылаясь на диапазон внутри объекта диапазона "myrange". Это можно сделать но
вам здесь это не нужно, и это неправильный синтаксис. Ссылаться на:
http://www.cpearson.com/excel/cells.htm
Вот несколько способов указать диапазон, который вы хотите выделить:
sheet1.Range ("A" & rownum & ": H" & rownum)
sheet1.Range ("A" & rownum.row & ": H" & rownum.row)
sheet1.Range ("A" & rownum, sheet1.range ("A" & rownum) .offset (0,7))
sheet1.Range (sheet1.Cells (rownum, "H"), sheet1.Cells (rownum, "H"))
sheet1.Range (sheet1.Range ("A" и rownum), sheet1.Cells (rownum, "H"))
VBA допускает большое разнообразие при обращении к диапазонам, но несколько советов:
1. Полностью квалифицируйте свою ссылку на лист [например, - sheet1.Range (sheet1 ...)]
2. Будьте осторожны с утомительными цитатами
3. Использовать с ... Конец с блоками
3.) Ваша переменная last_row будет ненадежной, если в вашем поле есть пустые ячейки
данные, потому что он будет возвращать последнюю строку перед любой пустой ячейкой. Смотри ниже
4.) Вам не нужен цикл для этого; Я предлагаю вместо этого использовать автофильтр.
Вот как бы я это сделал:
Sub CheckForBlanksInName()
Dim myRange As Range
Dim last_row As Double
With Sheet1
last_row = .Cells(.Rows.Count, "A").End(xlUp).Row 'Last row of the data set
MsgBox last_row '=> returns
Set myRange = .Range("A2:H" & last_row)
'clear all color
myRange.Interior.ColorIndex = xlNone
.AutoFilterMode = False 'clear any filters
.Range("E1:E" & last_row) _
.AutoFilter _
field:=1 _
, Criteria1:="=" _
, Operator:=xlFilterValues 'filter column "E" on blank cells
'Highlight
myRange.SpecialCells(xlCellTypeVisible).Interior.Color = vbYellow
.AutoFilterMode = False 'clear filters
End With
End Sub