Severo, segue uma explicação possível:
'Aqui você inicializa a variável que chama Funcionário1
'Esse cara é um Colaborador
Dim Funcionario1 As New Colaborador()
'Aqui você atribui "João" ao campo Nome
'Nome pertence a Funcionario, que é uma Pessoa
'Cadê a inicialização de Pessoa ????
Funcionario1.Funcionario.Nome = "João"
'Aqui apenas exibe... nada de mais...
MsgBox(Funcionario1.Funcionario.Nome)
O certo seria inicializar antes de atribuir o valor "João". Sendo assim ficaria:
Funcionario1.Funcionario = New Pessoa()
Funcionario1.Funcionario.Nome = "João"
Agora sim. Não lançará Exception de objeto não inicializado.
Se pude ajudar no entendimento, marque a resposta como solucionada, por favor.
Obrigado! Abs