No VBA, um UserForm é apenas uma classe personalizada (com alguns eventos e propriedades) e com uma interface de usuário incorporada. Eu também gostaria de fazer uma classe personalizada com uma interface de usuário embutida, só que não é a mesma usada pelos userforms.
Por exemplo, digamos que eu queira fazer uma interface com o usuário da calculadora. Vou precisar de alguns elementos de imagem para o plano de fundo da calculadora e os botões, alguma caixa de texto para a tela e, em seguida, alguns elementos de botão para ouvir os cliques do usuário. Em seguida, vinculo tudo de alguma forma a uma classe que contém todos os ouvintes de eventos e o código de inicialização / fechamento para fazer com que a GUI realmente apareça
Minha pergunta é onde eu começo se eu quero projetar algo assim?
Uma maneira de pensar é assim (no Excel):
Isso eu posso fazer de forma relativamente fácil. Mas tem as seguintes limitações principais que posso pensar:
Como minha abordagem constrói a interface a partir de elementos de imagem, do ponto de vista do VBA , estes seriam Shape
objects (para suportar transparência - bordas arredondadas - como controles de imagem activeX não suportam isso ). Isso não gera nenhum evento, por isso, se eu quiser detectar, digamos, quando o usuário passar o mouse sobre o quadro da calculadora, eu cobrirei com rótulos ActiveX invisíveis ou fazer chamadas de API para ver o que o mouse está fazendo. O primeiro é inviável para formas complexas, o último adiciona toda uma carga de complexidade adicional. O ideal é que eu gostaria de especificar quais elementos levantariam quais eventos de uma lista daqueles disponíveis para mim.
Se minha interface for criada a partir de elementos de imagem, não será possível alterar facilmente o design no tempo de execução. Se quiser, quero redimensionar o elemento de quadro da minha GUI, depois as imagens de formato raster padrão (png, jpeg etc.) ficarão borradas, imagens vetoriais (que o Excel agora fornece suporte limitado) não têm, por padrão, regras como %código%. Alterar a cor dos elementos é algo que eu gostaria de apoiar também, mas isso é muito difícil de fazer com imagens, If the frame height is changed, stretch the sides but do not stretch the toolbar at the top
é uma opção, mas apenas disponível para o MSPublisher.
A maioria dos elementos gráficos da minha interface provavelmente seriam designs bem simples. No modo Filesizewise, isso é muito melhor para um formato de imagem vetorial do que um formato raster, mas os controles activeX não suportam isso como plano de fundo. Então, o tamanho do arquivo sobe, e provavelmente algum atraso é apresentado, em relação a um simples botão adicionado a um formulário de usuário.
* nb estes são apenas para contexto, então podem ser ignorados se você quiser, ou eu posso elaborar mais sobre eles se for necessário
Eu não quero usar userforms porque eles já têm alguma interface definida em concreto - o quadro, a forma retangular, os ouvintes de eventos específicos para elementos específicos. Eu poderia projetar o que eu quero dentro de uma forma de usuário, mas eu gostaria de uma tela em branco em termos de aparência. Tenho certeza de que deve haver uma maneira melhor de projetar interfaces personalizadas para serem controladas com a classe VBA, como um userform pode?
Eu tenho uma vaga idéia de que o Visual Studio pode ser útil, mas eu nem sei quais tutoriais procurar. Eu só posso até agora encontrar instruções sobre o Windows Forms (que eu não quero pelas mesmas razões que eu não quero um userform), ou addins do Excel (que interagem com o Excel, mas não parecem ter sua própria interface personalizável ). Nem é bem o que eu estou procurando, então eu acho que preciso começar com um ser humano para entender o problema e me apontar na direção certa.
Tags microsoft-excel vba