Ошибка здесь:
If wksht = wkbk.Sheets(2) Then
Класс Worksheet
не имеет свойства по умолчанию, поэтому вы не можете разрешить этот объект; VBA пытается вызвать элемент по умолчанию Worksheet
для удовлетворения оператора сравнения, но такого члена нет, поэтому возникает ошибка 438.
Я думаю, что вы пытаетесь проверить, является ли wksht
wkbk.Sheets(2)
. Вам нужен оператор Is
для равенства ссылок:
If wksht Is wkbk.Sheets(2) Then
Обратите внимание, что это отличается от сравнения .Name
листов: здесь мы сравниваем ссылки на объекты .
Тем не менее, я бы купил здесь гласную или две, слишком легко сделать опечатку, набрав их ... Убедитесь, что указан Option Explicit
!
Добавление
wkbk.Sheets.Add Before:=wkbk.Sheets(1)
Set DataSheet = ActiveSheet
Worksheets.Add
возвращает добавленный объект рабочего листа, так что вы можете сделать это вместо этого, не полагаясь на побочный эффект добавленного листа, который теперь является ActiveSheet
:
Set DataSheet = wkbk.Sheets.Add(Before:=wkbk.Sheets(1))