Pergunta

Eu escrevi uma ferramenta de relatório de banco de dados baseada em Excel.Atualmente, todo o código VBA está associado a um único arquivo XLS.O usuário gera o relatório clicando em um botão na barra de ferramentas.Infelizmente, a menos que o usuário tenha salvo o arquivo com outro nome, todos os dados relatados serão apagados.

Depois de criar ferramentas semelhantes no Word, posso colocar todo o código em um arquivo de modelo (.dot) e chamá-lo de lá.Se eu colocar o arquivo de modelo na pasta de inicialização do Office, ele será iniciado sempre que eu iniciar o Word.Existe uma maneira semelhante de empacotar e distribuir meu código no Excel?Tentei usar suplementos, mas não encontrei uma maneira de chamar o código na janela do aplicativo.

Foi útil?

Solução

Você pode modificar o arquivo personal.xls do usuário, armazenado no diretório de inicialização do Excel (varia entre as versões do Office).Porém, se você tiver muitos usuários, isso pode ser complicado.

Uma maneira alternativa de superar o problema é armazenar a macro em um arquivo de modelo (.xlt).Então, quando os usuários o abrirem, eles não poderão salvá-lo novamente no arquivo original, mas terão que especificar um novo nome de arquivo para salvá-lo.A desvantagem desse método é que você obtém várias cópias do código original em todos os lugares com cada arquivo salvo.Se você modificar o .xlt original e alguém executar novamente a macro antiga em um arquivo .xls salvo anteriormente, as coisas poderão ficar fora de sintonia.

Outras dicas

Basta mover seu código para um suplemento do Excel (XLA) - ele é carregado na inicialização (supondo que esteja na pasta %AppData%\Microsoft\Excel\XLSTART), mas se for um suplemento, não uma pasta de trabalho, apenas suas macros e inicialização definida funções serão carregadas.

Se as funções dependem de uma planilha em si, talvez você queira usar uma combinação de modelos e suplementos.

Estou distribuindo parte de uma aplicação como esta, temos addins para Word, Excel e Powerpoint (XLA, PPA, DOT) e também versões 'ribbon' do Office 2007 (DOTM, XLAM e PPAM)

O código de inicialização do addin cria botões da barra de ferramentas se eles não forem encontrados, isso significa que em qualquer pasta de trabalho/documento/etc eles podem simplesmente clicar no botão da barra de ferramentas para executar nosso código (temos dois botões de ação e um botão que exibe uma caixa de diálogo de configurações)

Os modelos não são realmente a melhor opção para o código VBA, os suplementos são definitivamente a melhor opção ...

Então, para carregar as barras de ferramentas na inicialização, estamos usando algo como ..(verificando se a barra de ferramentas existe - o código será executado para cada planilha aberta, mas as barras de ferramentas são persistentes para a sessão do usuário)

Public Sub Workbook_Open()
     ' startup code / add toolbar / load saved settings, etc.
End Sub

espero que ajude :)

Eu sempre uso uma combinação Add-in(xla)/Template(xlt).Seu suplemento cria o menu (ou outros pontos de entrada da interface do usuário) e carrega modelos conforme necessário.Ele também grava dados que você deseja persistir em um banco de dados (Access, SQLServer, arquivo de texto ou até mesmo um arquivo xls).

A primeira regra é manter seu código separado de seus dados.Então, se posteriormente você tiver correções de bugs ou outras alterações de código, poderá enviar um novo suplemento e todos os seus modelos e bancos de dados não serão afetados.

Você já analisou o ClickOnce implantando o arquivo Excel?

Que tal salvar um Excel em uma pasta de rede com permissões somente leitura?A autenticação pode ser feita com autenticação integrada do Windows e não é necessário armazenar senha de conexão ao banco de dados no VBA.Então você só precisa distribuir um link para esse local aos seus usuários apenas uma vez.Se você fizer uma atualização, você apenas alterará os dados dessa pasta sem aviso do usuário.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top