Chamar o código em nível de documento personalizações do VBA
Se aplica a |
---|
As informações contidas neste tópico se aplicam apenas às especificado Ferramentas do Visual Studio para o Office projetos e as versões do Microsoft Office. Tipo de Projeto
Versão do Microsoft Office
For more information, see Recursos disponíveis pelo aplicativo e o tipo de projeto. |
Você pode configurar um projeto de nível de documento para Word 2007 ou o Excel 2007 para que código do Visual Basic for Applications (VBA) no documento pode chamar código no assembly de personalização.Isso é útil nas seguintes situações:
Deseja estender o código do VBA existente em um documento usando os recursos em uma solução de Ferramentas do Visual Studio para o Office associado com o mesmo documento.
Você deseja tornar serviços que você desenvolver usando Ferramentas do Visual Studio para o Office disponível aos usuários final que pode acessar os serviços escrevendo código do VBA no documento.
Ferramentas do Visual Studio para o Office também fornece um recurso semelhante para o nível de aplicativo Adicionar-ins.Se você estiver desenvolvendo um Adicionar-in, você pode chamar o código no seu suplemento de Outro soluções do Microsoft Office.For more information, see Chamar o código no nível de aplicativo Adicionar-ins de Outro soluções do Office.
Observação: |
---|
Este recurso não pode ser usado no Word t projetos de emplate.Ela pode ser usada somente no Word d ocument, o Excel w orkbook ou Excel t projetos de emplate. |
Requisitos
Antes de pode habilitar código VBA para chamar o assembly de personalização, seu projeto deve atender aos seguintes requisitos:
O documento deve ter uma das seguintes extensões de Nome do Arquivo:
Para o Word: .docm ou .doc
Para o Excel: .xlsm, .xltm, .xls ou .xlt
O documento já deve conter um projeto do VBA que contém um código do VBA.
Código do VBA do documento deve ser permitido para executar sem avisar o usuário para habilitar as macros.Você pode confiar em código VBA seja executado, adicionando o local do projeto Ferramentas do Visual Studio para o Office à lista de locais confiáveis na relação de confiança Centralizar configurações para o Word ou Excel.
O projeto Ferramentas do Visual Studio para o Office deve conter pelo menos uma classe pública que contém um ou mais membros públicos que você está expondo a VBA.
Você pode expor métodos, propriedades e eventos para VBA.A classe que você exponha pode ser uma classe de item de host (como ThisDocument para o Word, ou ThisWorkbook e Sheet1 para o Excel) ou outra classe que você Definir no seu projeto.Para obter mais informações sobre os itens de host, consulte Itens de host e Visão geral sobre controles de host.
Ativando o código do VBA chamar para o assembly de personalização
Há duas maneiras diferentes que você pode expor membros em um assembly de personalização ao código do VBA no documento:
Você poderá expor membros de uma classe de item de host em um projeto Visual Basic para VBA.Para fazer isso, defina a propriedade EnableVbaCallers a classe de item de host para True. Ferramentas do Visual Studio para o Office executa automaticamente todo o trabalho necessário para habilitar o código do VBA chamar os membros da classe.
Você poderá expor membros em qualquer classe Público em um projeto do Visual C#, ou membros em uma classe item não-host em um projeto, a VBA Visual Basic.Esta opção lhe oferece mais liberdade para escolher quais classes que você exponha a VBA, mas também requer mais etapas manuais.
Para fazer isso, você deve executar as seguintes etapas principais:
Expor a classe com.
Substituir o método GetAutomationObject de uma classe de item de host em seu projeto para retornar uma instância da classe que você está expondo a VBA.
Defina a propriedade de ReferenceAssemblyFromVbaProject de qualquer host classe dos Itemens no projeto para True.Isso incorpora a biblioteca de tipos do assembly de personalização para o assembly e adiciona uma referência à biblioteca de tipos ao projeto do VBA no documento.
Para obter instruções detalhadas, consulte Como: Expor código VBA em um projeto do Visual Basic e Como: Expor código VBA em um projeto do Visual C#.
As propriedades de EnableVbaCallers e ReferenceAssemblyFromVbaProject são disponíveis apenas na Propriedades janela em tempo de design; Eles não podem ser usados em tempo de execução.Para exibir as propriedades, Abrir designer para um item de host em Visual Studio.Para Mais Informações sobre as tarefas específicas que Ferramentas do Visual Studio para o Office executa quando você definir essas propriedades, consulte tarefas executadas, as propriedades do item de host.
Observação: |
---|
Se a pasta de trabalho ou o documento não já contém código VBA ou se o código do VBA no documento não é confiável para ser executado, você receberá uma mensagem de erro quando você define o EnableVbaCallers ou Propriedade ReferenceAssemblyFromVbaProjectVerdadeiro.Isso ocorre porque Ferramentas do Visual Studio para o Office não é possível modificar o projeto do VBA no documento nessa situação. |
Usar membros no código VBA para a chamada para o assembly de personalização
Depois de configurar seu projeto para permitir a chamar o assembly de personalização de código do VBA, Ferramentas do Visual Studio para o Office adiciona os seguintes membros ao projeto VBA do documento:
Para Tudos os projetos, Ferramentas do Visual Studio para o Office adiciona global méTudo chamado GetManagedClass.
Para projetos de Visual Basic em que você exponha membros de uma classe de item de host usando a propriedade EnableVbaCallers , Ferramentas do Visual Studio para o Office também adiciona uma propriedade chamada CallVSTOAssembly a ThisDocument, ThisWorkbook, Sheet1, Sheet2ou Sheet3 módulo no projeto VBA.
Você pode usar a propriedade de CallVSTOAssembly ou GetManagedClass método para acessar membros públicos da classe que você expostos a código do VBA no projeto Ferramentas do Visual Studio para o Office.
Observação: |
---|
Embora você desenvolver e implantar sua solução, há várias cópias diferentes do documento onde você pode adicionar o Código do VBA .Para obter mais informações, consulte Diretrizes para adicionar o código VBA para o documento. |
Usando a propriedade CallVSTOAssembly em um projeto do Visual Basic
Use a propriedade CallVSTOAssembly para acessar membros públicos que você Adicionado à classe de item de host.Por exemplo, a macro VBA a seguir chama um método chamado MyVSTOMethod é definido na classe Sheet1 em um projeto de pasta de trabalho do Excel.
Sub MyMacro()
Sheet1.CallVSTOAssembly.MyVSTOMethod()
End Sub
Esta propriedade é uma maneira mais conveniente de chamar o assembly de personalização que usar o método GetManagedClass diretamente.CallVSTOAssembly retorna um objeto que representa o host de classe dos Itemens que você expostos a VBA.Os membros e parâmetros do método do objeto retornado Aparecerr no IntelliSense.
A propriedade CallVSTOAssembly tem uma declaração que é semelhante ao código a seguir.Esse código pressupõe que você tenha exposto a classe de item de host Sheet1 em um projeto de pasta de trabalho do Excel denominado ExcelWorkbook1 para VBA.
Property Get CallVSTOAssembly() As ExcelWorkbook1.Sheet1
Set CallVSTOAssembly = GetManagedClass(Me)
End Property
Usando o método GetManagedClass
Para usar o método global GetManagedClass , passe no objeto VBA correspondente para a classe de item de host que contém a Substituir do método GetAutomationObject.Em seguida, use o objeto retornado para acessar a classe que é exposto a VBA.
Por exemplo, a macro VBA a seguir chama um método chamado MyVSTOMethod é definido na classe Sheet1 host item em um projeto pasta de trabalho do Excel denominado ExcelWorkbook1.
Sub CallVSTOMethod
Dim VSTOSheet1 As ExcelWorkbook1.Sheet1
Set VSTOSheet1 = GetManagedClass(Sheet1)
VSTOSheet1.MyVSTOMethod
End Sub
O método GetManagedClass tem a declaração a seguir.
GetManagedClass(pdispInteropObject Object) As Object
Esse método retorna um objeto que representa a classe que é exposto a VBA.Os membros e parâmetros do método do objeto retornado Aparecerr no IntelliSense.
Diretrizes para adicionar o código VBA para o documento
Há várias cópias diferentes do documento onde você pode adicionar código do VBA que chama a personalização de Ferramentas do Visual Studio para o Office.
À medida que você desenvolver e testar sua solução, você pode Gravar código do VBA do documento que é aberta enquanto você depurar ou executar o projeto no Visual Studio (ou seja, o documento na pasta de saída de compilação).No entanto, qualquer código VBA que você adicionar a este documento será substituído na Avançar vez que você criar o projeto, porque o Visual Studio substituirá o documento na pasta de saída de compilação com uma Copiar do documento da pasta do projeto principal.
Se você desejar salvar o VBA código que você Adicionar ao documento ao depurar ou Executando a solução, copiar o código do VBA para o documento na pasta do projeto.Para obter mais informações sobre o processo de compilação, consulte Office solução Compilação processo Visão geral.
Quando você estiver pronto para implantar sua solução, há três locais de documento principal no qual você pode adicionar o código do VBA.
Na pasta de projeto no computador de desenvolvimento
Esse local é conveniente se você tiver Concluir Controlarar sobre os dois o código do VBA no documento e o código de personalização Ferramentas do Visual Studio para o Office.Como o documento é no computador de desenvolvimento, você pode modificar facilmente o código do VBA se você alterar o código de personalização.Código do VBA que você adicionar a esta Copiar do documento permanecerá no documento quando você Compilação, depurar e publicar sua solução.
Não é possível adicionar o código do VBA ao documento enquanto ele estiver Abrir no designer.Você deve primeiro fechar o documento no designer e, em seguida, Abrir o documento diretamente no Word ou Excel.
Cuidado: |
---|
Se você adicionar código do VBA que é executado quando o documento for aberto, em casos raros esse código pode corromper o documento ou impedi-lo de Abrindo no designer. |
Na pasta de instalação ou publicar
Em alguns casos, talvez seja adequado adicionar o código do VBA ao documento no Publicar ou a pasta de instalação.Por exemplo, você pode escolher esta opção se o código do VBA é gravado e testado por um desenvolvedor diferente em um computador que não tem Ferramentas do Visual Studio para o Office instalado.
Se os usuários instalar a solução diretamente do Publicar pasta, você deve adicionar o VBA código para o documento sempre que você Publicar a solução.O Visual Studio substitui o documento no Publicar local quando você Publicar a solução.
Se os usuários instalar a solução de uma pasta de instalação que seja diferente do Publicar pasta, você pode evitar adicionar a VBA código no documento sempre que você Publicar a solução.Quando um Publicar Atualizar está pronta para Prontor movido do Publicar para a pasta de instalação, copie todos os arquivos para a pasta de instalação, exceto para o documento.
No computador do usuário final
Se os usuários finais forem desenvolvedores VBA que estão chamando em serviços que você fornece na personalização Ferramentas do Visual Studio para o Office , você pode dizê-los como chamar seu código usando a propriedade CallVSTOAssembly ou o método GetManagedClass no suas cópias do documento. Quando você publica atualizações para a solução, o código do VBA no documento no computador de usuário final não serão substituídos, porque o documento não é modificado por publicar as atualizações.
Tarefas executadas, as propriedades de item de host
Quando você usar o EnableVbaCallers e propriedades de ReferenceAssemblyFromVbaProject , Ferramentas do Visual Studio para o Office executa diferentes conjuntos de tarefas.
EnableVbaCallers
Quando você define a propriedade EnableVbaCallers de um item de host para True em um projeto do Visual Basic, Ferramentas do Visual Studio para o Office realiza as seguintes tarefas:
Ele adiciona os atributos de ComClassAttribute e ComVisibleAttribute à classe de item de host.
Ele substitui o método GetAutomationObject da classe de item de host.
Ele define a propriedade ReferenceAssemblyFromVbaProject do item de host como True.
Quando você definir a propriedade de EnableVbaCallers Voltar a False, Ferramentas do Visual Studio para o Office realiza as seguintes tarefas:
Ele remove os atributos de ComClassAttribute e ComVisibleAttribute a classe ThisDocument.
Ele remove o método de GetAutomationObject a classe de item de host.
Observação: Ferramentas do Visual Studio para o Office não definido automaticamente a propriedade ReferenceAssemblyFromVbaProject Voltar para False.Você pode definir essa propriedade para False manualmente, usando a janela de Properties.
ReferenceAssemblyFromVbaProject
Quando a propriedade ReferenceAssemblyFromVbaProject de qualquer item de host em um projeto do Visual Basic ou Visual C# é definida como True, Ferramentas do Visual Studio para o Office realiza as seguintes tarefas:
Ele gera uma biblioteca de tipos para o assembly de personalização e incorpora a biblioteca de tipos no assembly.
Ele adiciona uma referência ao seguintes bibliotecas de tipo no projeto VBA do documento:
A biblioteca de tipos para o assembly de personalização.
O Microsoft Visual Studio Tools for Office execução mecanismo 9.0 biblioteca de tipos.Esta biblioteca de tipos está incluída no tempo de execução Ferramentas do Visual Studio para o Office.
Quando a propriedade de ReferenceAssemblyFromVbaProject é definida Voltar a False, Ferramentas do Visual Studio para o Office realiza as seguintes tarefas:
Ele remove as referências de biblioteca de tipo do projeto VBA no documento.
Ele remove a biblioteca de tipos incorporada do conjunto de módulos (assembly).
Solução de problemas
A tabela a seguir lista alguns erros e sugestões para corrigir os erros ComComumComum.
Erro |
Sugestão |
---|---|
Depois de definir o EnableVbaCallers ou a propriedade de ReferenceAssemblyFromVbaProject, uma mensagem de erro informa que o documento não contém um projeto do VBA, ou você não tem permissão para acessar o projeto do VBA no documento. |
Verifique se o documento no projeto contém pelo menos uma macro do VBA, o projeto VBA tem suficiente Confiar para executar, e o projeto do VBA não está protegido por senha. |
Depois de definir o EnableVbaCallers ou a propriedade de ReferenceAssemblyFromVbaProject , uma mensagem de erro informa que a declaração de GuidAttribute está ausente ou corrompido. |
Certifique-se que a declaração de GuidAttribute está localizada no arquivo AssemblyInfo.cs ou AssemblyInfo.vb no seu projeto e que esse atributo é definido para uma GUID válida. |
Depois de definir o EnableVbaCallers ou a propriedade de ReferenceAssemblyFromVbaProject , uma mensagem de erro informa que o número de versão especificado pelo AssemblyVersionAttribute não é válido. |
Verifique se que a declaração de AssemblyVersionAttribute no arquivo AssemblyInfo.cs ou AssemblyInfo.vb no seu projeto está definida para um número de Versão do Assembly válido.Para obter informações sobre números de Versão do Assembly válido, consulte a classe AssemblyVersionAttribute. |
Depois de renomear o assembly de personalização, código VBA que chama o assembly de personalização pára de funcionar. |
Se você alterar o nome do assembly personalização depois de expô-lo ao código VBA, o link entre o projeto do VBA no documento e o assembly de personalização será interrompido.Para corrigir esse problema, Alterar a propriedade ReferenceFromVbaAssembly no seu projeto para False e, em seguida, fazer True e, em seguida, substitua quaisquer referências para o antigo nome do assembly no VBA código com o novo nome de assembly. |
Consulte também
Tarefas
Como: Expor código VBA em um projeto do Visual Basic
Como: Expor código VBA em um projeto do Visual C#
Demonstra Passo a passo: Chamar o código de VBA em um projeto do Visual Basic
Demonstra Passo a passo: Chamar o código de VBA em um projeto do Visual C#
Conceitos
Combinação de VBA e personalizações de nível de documento