Не уверен, если можно объяснить, но я думаю, что вы можете исправить свой код путем инициализации переменных wks. Что-то вроде этого
Sub typeofcheck()
Dim wks As New Worksheet
Set wks = Sheets("someFunnySheetName")
If TypeOf wks Is Worksheet Then
MsgBox "This is Worksheet"
Else
MsgBox "This is not"
End If
End Sub
ИМХО проблема будет, что с DIM
вас только alocate некоторое количество памяти, и с Set
вы установите тип данных. Но VBA - это своего рода мистерия. Как только я попытался что-то прочитать в документации MSDN, и это было хуже, чем черт ...
edit1: я сделал еще один тест, и эта хорошая ошибка msg, которую вы упоминаете, звучит очень профессионально, но если вы отлаживаете код и наведите указатель мыши на переменную wks, она сообщит вам, что wks = <Object variable or With block variable not set>
, что намного проще читать. Поэтому в будущем попробуйте отладить и наведите указатель мыши на переменные. И если вы не знаете, что делать, попробуйте немногие Set
s :) VBA о магии
@Well AFAIK мутными вы объявляете переменную в то время как с набором мы привозим объект жить, Он использует набор о том, что память выделяется на объект. –