Estou muito confuso agora. Estou usando VBA no Visio para fazer alguns gráficos automatizados, embora eu não ache que importe que seja o Visio. Eu defini várias classes, e algumas delas são semelhantes, mas têm propriedades ligeiramente diferentes por vários motivos. Eu tenho funções que podem receber uma Variant que é uma dessas classes, mas preciso saber especificamente qual das minhas classes está sendo passada para a função.
Então, eu costumava TypeName
obter o nome da minha classe como uma string e usar um bloco if
ou select case
para escolher as ações com base nesse nome.
Tenho um arquivo onde isso funciona perfeitamente. Acabei de reabri-lo hoje para me certificar de que não estou louco. Tenho uma classe chamada Dimension_Compound
e tenho uma declaração em uma função If TypeName(theseTopDims) = "Dimension_Compound"
onde theseTopDims
é uma variante que é um array que poderia ser de uma das minhas classes personalizadas, Dimension_Base
ou Dimension_Compound
um array de Integers. e ele compila e executa corretamente, sem problemas.
Estou trabalhando em um novo diagrama baseado em macro hoje. Tenho uma declaração semelhante, Select Case TypeName(newShape)
onde newShape
está Variant que pode ser minha classe personalizada PLMShape
ou um Shape
tipo padrão do Visio. E ele engasga nessa linha. Recebo o erro:
Wrong Number of arguments or invalid property assignment
Então, verifiquei a página de ajuda do Microsoft Learn , que afirma claramente: "O argumento varname necessário é uma Variant contendo qualquer variável, exceto uma variável de um tipo definido pelo usuário. "
Então, agora minha pergunta não é por que meu novo código não funciona, mas sim como é possível que meu código antigo funcione? Eu estava felizmente inconsciente desse requisito naquele projeto anterior - ainda assim, funcionou, e quando eu o carrego hoje, ele continua funcionando. Eu verifiquei todas as minhas bibliotecas de referência, e até adicionei essas bibliotecas ao meu novo projeto para ver se talvez uma delas adicionasse funcionalidade, TypeName
mas mesmo com essas referências adicionadas, ele ainda me dá o mesmo erro.