Ошибка возникает из-за того, что вы использовали переменную, но не объявляли ее раньше. Эта переменная выглядит как sh
. Так что, если sh
не является глобальной переменной, то вам нужно отменить ее и установить для нужного вам листа перед использованием переменной:
Dim sh As Worksheet
Set sh = ThisWorkbook.Worksheets("YourSheetName")
Также обратите внимание, что lastRow
не имеет значения и следовательно, 0
перед его использованием необходимо установить значение для этой переменной.
В противном случае For w = 2 To lastRow
равно For w = 2 To 0
и, следовательно, никогда не будет работать.