VBA Advanced - Estenda o código VBA com VSTO, LINQ, WPF, WCF e .NET



Blog Office VBA | Blog Excel | Blog Access |
Se você cria soluções para o Microsoft Office usando o VBA e ainda não mudou para o Microsoft .NET Framework, o VSTO este artigo fará com que essa transição seja ainda mais fácil e atraente. O VSTO traz até você o conjunto completo de recursos do Visual Studio, incluindo o LINQ (language-integrated query), o WPF (Windows® Presentation Foundation), o WCF (Windows Communications Foundation) e o .NET Framework 3.5. 

VSTO possui muitos recursos novos que visam o Microsoft Office System, entre eles os designers visuais, que facilitam a criação de regiões personalizadas de formulários e a personalização da Faixa de Opções. Você pode criar painéis de tarefas em nível de documento e em nível de aplicativo e criar e depurar com facilidade soluções de fluxo de trabalho do Office SharePoint Server 2007. As soluções do VSTO são simples de implantar graças ao suporte total ao ClickOnce. Além disso, o VSTO permite que você aproveite os investimentos feitos em VBA ao estender as soluções existentes com código gerenciado.

Diferenças de linguagem
Existem algumas diferenças nos recursos de linguagem disponíveis no VBA e no Visual Basic. Algumas das principais estão relacionadas aos tipos de dados, as instruções e aos novos recursos de linguagem.

Por exemplo, uma Integer no VBA equivale a um Short no Visual Basic e um Long no VBA a um Integer do Visual Basic.

Há também alguns tipos de dados que não são mais suportados no Visual Basic como o Variant — em seu lugar, você poderá usar o tipo de dados Object.

As propriedades padrão, muito usadas em VBA, não são suportadas no Visual Basic nem no VSTO. Por exemplo, não é possível atribuir uma String à propriedade Range de um parágrafo como pode ser feito no VBA; em vez disso, você precisa especificar a propriedade Text, como pode ser observado no código a seguir:

CÓDIGO: SELECIONAR TUDO
' VBA  Me.Application.ActiveDocument.Paragraphs(1).Range = _      "This is my first paragraph."    ' Visual Basic  Me.Application.ActiveDocument.Paragraphs(1).Range.Text = _      "This is my first paragraph."  


Você ainda terá acesso a muitos recursos de linguagem específicos do VBA, como a MsgBox, embora o Visual Basic também ofereça suporte ao uso de MessageBox. E, embora a instrução OnError ainda tenha suporte no Visual Basic, você deve considerar a utilização da manipulação de erros estruturada oferecida pelas instruções try/catch.

As diferenças entre o VBA e o Visual Basic aumentam a cada lançamento de nova versão do Visual Basic. Alguns dos novos recursos do Visual Basic incluem:

Inferência de tipo, 
Inicializadores de objeto, 
Tipos anônimos, 
Métodos de extensão, 
Integração de XML e LINQ.


Por exemplo, o Visual Basic agora pode determinar o tipo de variável local ao calcular o valor atribuído a ela, conhecido como inferência de tipo local.

Embora o tipo de dados não seja especificado, não a confunda com a vinculação tardia, onde o tipo de dados é determinado em runtime. A inferência de tipo local ocorre em tempo de design (vinculação inicial) e todas as vantagens, como o IntelliSense estão disponíveis, como você pode ver na Figura 1.


Figura 1 O IntelliSense é disponibilizado com a inferência de tipo local, graças à vinculação inicial (Clique na imagem para aumentar a exibição)

Com o LINQ, você pode criar consultas usando uma sintaxe conhecida, integrada à linguagem do Visual Basic, em vez de precisar aprender uma linguagem de consulta completamente diferente, como SQL ou XQuery.

Controlando a interface do usuário
Em soluções VBA típicas, os pontos de entrada no código são disponibilizados por meio de elementos de interface do usuário e menus ou pela criação de UserForms para a obtenção de entradas de usuários finais. Com o VSTO, é possível personalizar elementos de interface do usuário similares e, dependendo do aplicativo do Office, personalizar elementos de interface do usuário adicionais. Seja a solução criada com VBA ou com VSTO, as entradas de usuários são coletadas por meio de controles fornecidos na interface do usuário. Você pode adicionar controles a barras de ferramentas, a menus, a formulários, a documentos, a painéis de tarefas, à Faixa de Opções e assim por diante. A diferença, então, está no tipo e no número de controles e nos tipos de superfícies de interface do usuário disponíveis e que podem conter esses controles.

Quando você cria um aplicativo do Office usando o VBA, os formulários são diferentes dos criados com o VSTO. Com o VBA, a sua única opção é exibir um UserForm, e os controles ActiveX disponíveis para utilização nesse tipo de formulário são limitados. O VSTO, por sua vez, oferece suporte a uma grande variedade de controles do Windows Forms. Você sempre poderá encontrar um controle do Windows Forms que combine a funcionalidade dos controles disponíveis para um UserForm (embora o nome do controle possa ser diferente).

Por exemplo, o equivalente de um OptionButton em um Windows Form é um RadioButton no VSTO. E, embora você não encontre um ToggleButton na Caixa de Ferramentas de um projeto VSTO, poderá usar um controle CheckBox e definir sua propriedade Appearance como Button. Os nomes de propriedades, de métodos e de evento também podem ser diferentes entre esses tipos de controles, mas normalmente é fácil encontrar um equivalente. No VSTO, em vez de definir a propriedade Caption de uma Label como o faria em VBA, você precisa definir a propriedade Text de Label.

Os inúmeros controles do Windows Forms disponíveis oferecem uma funcionalidade avançada e permitem que você crie uma interface do usuário muito mais profissional para o seu aplicativo do que o faria com UserForms.
Como as soluções do VSTO são criadas em Visual Studio, você terá acesso a diversos recursos que não estão disponíveis no editor de código VBA, como a janela Data Sources, que permite a adição de controles ligados a dados a um Windows Form de forma direta. Também é possível usar alguns dos novos recursos de linguagem do Visual Basic e do Visual C#, que permitem a utilização de consultas LINQ ao preencher um controle ListBox ou ComboBox.

Você pode adicionar controles do WPF ao seu aplicativo usando o VSTO, selecionando um item de controle de usuário do WPF na caixa de diálogo Add New Item (Adicionar Novo Item) e criando-o ao arrastar controles do WPF da Caixa de Ferramentas ou ao adicionar marcação XAML à janela XML. Em seguida, adicione um controle de usuário ao seu projeto e arraste um controle ElementHost da guia WPF Interoperability na Caixa de Ferramentas até ele.

Depois de definir a propriedade Child desse controle como o controle de usuário do WPF, todos os controles do WPF serão hospedados no Windows Form. Agora você pode adicionar esse controle a um Windows Form, à superfície do documento ou a um painel de tarefas.

Painéis de tarefas desde o Office 2003, é possível personalizar o painel de tarefas para oferecer o mesmo tipo de interface do usuário habilitada por um Windows Form, além de ser capaz de ancorar o painel de tarefas fora da superfície do documento. A personalização do painel de tarefas não pode ser feita com o VBA. Com o VSTO, existem dois tipos de painéis de tarefa que podem ser personalizados: os painéis de tarefas Ações do Documento e os painéis de tarefas Personalizado.

Ações do Documento é um painel de tarefas em nível de documento visível somente para um documento ou pasta de trabalho associada à personalização do VSTO. Cada documento ou pasta de trabalho só pode ter um painel de tarefas Ações do Documento. Ele pode ser personalizado por meio do objeto ActionsPane durante a criação de um projeto de documento ou de modelo do Word ou do Excel no VSTO.

Para personalizar o painel de tarefas em nível de documento, adicione uma instância do controle de usuário à coleção Controls do objeto ActionsPane. Não é possível alterar o nome exibido como o título do painel de tarefas:

CÓDIGO: SELECIONAR TUDO
Dim TaskPaneControl As New UserControl1  Me.ActionsPane.Controls.Add(TaskPaneControl)  


O Microsoft Office system 2007 apresenta um novo tipo de painel de tarefas, conhecido como painel de tarefas personalizado, que pode ser personalizado durante a criação de suplementos em nível de aplicativo com o VSTO. Você pode personalizar o painel de ações tanto na versão 2003 como na 2007 do Word e do Excel, mas os painéis de tarefas estão disponíveis (e, portanto, podem ser personalizados) na versão 2007 de cinco aplicativos: Word, Excel, InfoPath, Outlook e PowerPoint.

Um painel de tarefas personalizado exibe os mesmos tipos de controles do Windows Forms que um painel de tarefas em nível de documento; no entanto, ele está disponível em nível de aplicativo e você pode exibir vários deles em sua solução. O processo de personalização de um painel de tarefas em nível de aplicativo ou em nível de documento é muito similar.

Para personalizar o painel de tarefas em nível de documento, adicione uma instância do controle de usuário à coleção CustomTaskPanes e passe o título que você deseja que o painel de tarefas exiba:

CÓDIGO: SELECIONAR TUDO
Dim CustomTaskPaneControl As New UserControl1 Me.CustomTaskPanes.Add(CustomTaskPaneControl, "Format Document")


Você pode personalizar as barras de ferramentas e os menus usando o VBA ou o VSTO na criação de soluções do Office. Normalmente, você chamaria uma macro da propriedade OnAction de um botão na barra de ferramentas ou em um menu. Usando o VSTO, deve criar os novos itens de menu ou de barra de ferramentas programaticamente, em vez de usar a propriedade OnAction (que não pode ser definida para chamar código gerenciado). Além disso, é preciso criar um manipulador de eventos para o botão. O Microsoft Office system 2007 introduziu a interface Fluent, que inclui a Faixa de Opções. A Faixa de Opções substitui barras de ferramentas e menus na maioria dos aplicativos Office system 2007, embora você ainda os encontre na janela principal do Outlook 2007.

Você pode usar o VBA para personalizar a Faixa de Opções usando RibbonX, mas com o VSTO essa tarefa é mais fácil, pois ele oferece um designer de Faixa de Opções que torna a adição de novas guias, grupos e controles tão intuitiva quanto a adição de um controle a um Windows Form. Você pode arrastar botões da Caixa de Ferramentas (na guia Designer da Faixa de Opções) para o Designer da Faixa de Opções, definir propriedades do botão, como o seu tamanho, e criar manipuladores de eventos para o evento Click do botão. Como alternativa, é possível personalizar a Faixa de Opções com vários outros controles usando o item de projeto XML da Faixa de Opções. A Figura 2 mostra os itens de projeto "Faixa de Opções (Designer Visual)" e "Faixa de Opções (XML)" disponíveis na guia Office da caixa de diálogo Add New Item.


Figura 2 Itens de projeto da Faixa de Opções no VSTO (Clique na imagem para aumentar a exibição)

Essas opções de personalização da Faixa de Opções estão disponíveis tanto para os suplementos em nível de aplicativo como para as personalizações em nível de documento que oferecem suporte à Faixa. 

Por exemplo, você pode criar uma personalização da Faixa de Opções em nível de documento para uma solução de modelo do Word que monte propostas comerciais para uma empresa de engenharia.

Uma Faixa de Opções possui três partes: uma guia, um grupo e os controles adicionados a um grupo. Usando o designer de Faixa de Opções no VSTO, você pode personalizar rapidamente uma guia existente ou criar uma guia separada que contenha toda a funcionalidade do seu aplicativo. A Caixa de Ferramentas da Figura 3 lista todos os controles da Faixa de Opções do Office disponíveis em uma solução do Word. Quando você arrasta um controle para o designer, pode definir propriedades, como tamanho, texto e se ele conterá uma imagem, na janela Propriedades. Alguns controles podem conter outros controles. Por exemplo, a Figura 4 mostra um controle Employees Menu, que contém alguns controles SplitButton que, por sua vez, contêm alguns Buttons.


Figura 3 O controle Employees Menu no designer (Clique na imagem para aumentar a exibição)


Figura 4 O menu Images processado (Clique na imagem para aumentar a exibição)

Você pode usar uma imagem interna ao especificar seu nome na propriedade OfficeImageId de um controle ou pode adicionar facilmente a sua própria imagem personalizada. Você pode usar imagens personalizadas em um controle ao especificar uma imagem adicionada ao projeto como um recurso da propriedade Image. Quando você adiciona uma imagem a partir de um recurso, ela é exibida no designer como mostrado no grupo PEPs da Figura 3. No entanto, quando usamos imagens internas, uma imagem de espaço reservado é exibida em seu lugar no designer. Quando o aplicativo é executado, as imagens são exibidas como na Figura 4.

Uma das vantagens da utilização do Designer de Faixa de Opções em vez do XML da Faixa de Opções é que você pode criar os manipuladores de evento para esses controles da mesma forma que os cria para controles em um Windows Form. Por exemplo, se você clicar duas vezes na caixa de combinação Title, poderá adicionar o código mostrado na Figure 5 ao manipulador de eventos Title_TextChanged para inserir o título no documento. O XML da Faixa de Opções possibilita personalizações avançadas que não estão disponíveis no designer de Faixa de Opções. Você pode exportar a personalização da Faixa de Opções para o XML da Faixa de Opções para personalizar ainda mais a sua solução; mas não é possível importar o XML da Faixa de Opções de volta para o designer. Você também deve criar um método de retorno de chamada para cada manipulador de eventos existente no código do designer de Faixa de Opções.

CÓDIGO: SELECIONAR TUDO
Private Sub Title_TextChanged(ByVal sender As System.Object, _      
ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _          
Handles Title.TextChanged        

With Globals.ThisDocument.Paragraphs(1)          
.Range.Text = Me.Title.Text & " Proposal"          
.Range.Font.AllCaps = True          
.Range.Font.Bold = True          
.Range.ParagraphFormat.Alignment = _              
Word.WdParagraphAlignment.wdAlignParagraphCenter      
End With    
End Sub  


Implantando soluções do VSTO
O modelo de segurança e de implantação do VSTO é muito diferente do modelo do VBA. No VBA, o código-fonte é armazenado no próprio documento e, portanto, a implantação do código é tão simples quanto copiar o documento. Embora esse modelo facilite muito a implantação, é cada vez mais difícil confiar no código VBA, devido ao grande número de vírus de macroVBA já criados. Outro problema com o modelo de código incorporado do VBA se torna aparente quando você tenta distribuir uma nova versão e vê que não é possível atualizar o código VBA em seus documentos. Você poderia abrir cada documento para alterar o código VBA, mas como é possível garantir que todas as cópias sejam atualizadas? Até mesmo em um grupo pequeno, talvez não seja possível encontrar todas as instâncias, já que os documentos são salvos em email e em servidores, e também podem ser renomeados.

No VSTO, o código é vinculado ao documento, onde é implantado para um local central, e todos os documentos simplesmente são vinculados a ele. Isso facilita muito a atualização. O VSTO oferece suporte à publicação em unidades locais, caminhos UNC, sites HTTP e mídia removível como CDs, DVDs e unidades USB. O desenvolvedor ou administrador publica uma nova versão do código e todos os usuários obtêm o novo código quando o documento é aberto novamente. Além disso, o VSTO adiciona suporte total ao ClickOnce, a tecnologia que lhe permite publicar, atualizar e a colocar em cache o código de forma local. Embora uma discussão completa sobre o ClickOnce esteja fora do escopo deste artigo, falarei sobre alguns recursos à medida que eles se aplicarem às soluções do VSTO.

Você instala um suplemento da mesma forma que faria com qualquer outro aplicativo, executando um programa de instalação chamado setup.exe que solicita ao usuário a permissão para instalá-lo, registrá-lo e definir seu nível de confiança. Não é mais necessário anotar chaves de registro obscuras ou comandos caspol.exe complexos para instalar o suplemento. Em vez disso, você pode usar o recurso de publicação do VSTO para criar o programa setup.exe e oferecer suporte aos arquivos do ClickOnce.

O recurso de implantação possui suporte em todos os aplicativos do Office system 2007 que utilizam o VSTO. Como um exemplo de utilização do VSTO na publicação de uma solução, você pode começar pela criação de um suplemento do Word 2007 padrão usando o Visual Basic. Clique duas vezes em ThisAddin.vb para abrir a janela de código. (Além disso, você precisará adicionar uma referência ao assembly System.Deployment. Isso não é obrigatório para a implantação do VSTO, mas para que o código de exemplo exiba as informações de versão do ClickOnce, você precisará usar algumas funções nesse assembly.). Adicione o código da Figura 6 ao evento Startup do suplemento. O código usa IsNetworkDeployed para determinar se ele está sendo executado a partir do cache do ClickOnce. Se estiver, então é melhor exibir o número da versão publicada do aplicativo retornado pela propriedade CurrentVersion do objeto CurrentDeployment. O número CurrentVersion é igual aos campos Publish Version da guia Publish nas páginas de propriedades do projeto da Figura 7. Também é exibida a versão do aplicativo, que é a versão do assembly definido na guia Application. Comece verificando se o aplicativo funciona, pressionando F5 para executá-lo. O Word deve abrir e exibir uma caixa de diálogo com o texto "Not a ClickOnce Application" (Não é um aplicativo ClickOnce). Isso é correto porque você executou o aplicativo a partir do VSTO. Feche o Word e interrompa a depuração.

CÓDIGO: SELECIONAR TUDO
If Not System.Deployment.Application.ApplicationDeployment _          
.IsNetworkDeployed Then        'This is a ClickOnce Application      
Dim currentVersion As String      
currentVersion = System.Deployment.Application _          
.ApplicationDeployment.CurrentDeployment _              
.CurrentVersion.ToString()        

MsgBox("Started " & vbCrLf & " App Version:" _          
& My.Application.Info.Version.ToString() & vbCrLf & _          
" Published Version " & currentVersion)  
Else      
MsgBox("Not a ClickOnce Application")  
End If 



Figura 7 O projeto do suplemento (Clique na imagem para aumentar a exibição)

Abra a página de propriedades Project e clique na guia Publish para ver as configurações de publicação que contêm duas propriedades: o local de publicação e o local de instalação. O VSTO criará o projeto publicado no local de publicação. Pense nisso como o diretório bin para a publicação, o local de implantação final da solução. O administrador pode alterar o local de publicação e assinar novamente o manifesto usando o Mage.exe (Ferramenta de edição e de geração de manifestos) do ClickOnce. Na seção Install Settings, você pode definir os pré-requisitos e a freqüência de atualizações.

Por causa do desempenho, por padrão, a freqüência de atualizações verifica novas versões a cada sete dias. Altere isso para "Verifique sempre que a personalização for executada" para ficar ciente das alterações imediatamente.

Você pode definir a versão de publicação usando os formatos padrão principal, secundária, de compilação e de revisão. Por padrão, ela é definida para incrementar automaticamente o número de revisão sempre que houver uma publicação. Depois de definir corretamente todas as propriedades, basta pressionar o botão Publish Now (Publicar Agora), na parte inferior da página.

O assistente para publicação cria um arquivo bootstrapper setup.exe e um arquivo de manifesto de implantação do VSTO no local de publicação. Ele cria também um subdiretório, cujo nome é o número da versão, e coloca nele os assemblies e o arquivo de manifesto de aplicativo. Quando você publicar novamente, outro subdiretório será criado e um novo arquivo de manifesto de implantação do VSTO será compilado, apontando para a versão atual do manifesto do aplicativo. Podemos ver na Figura 8 que existem duas versões publicadas do suplemento: 1.0.0.0 e 1.0.0.1. Há também duas cópias de backup dos arquivos de manifesto de implantação:

DeployWordAddin_1_0_0_0.vsto e DeployWordAddin_1_0_0_1.vsto. Eles só estão ali a fim de ajudá-lo na reversão para uma determinada versão. Por exemplo, se você quiser reverter para a versão 1.0.0.0, basta renomear DeployWordAddin_1_0_0_0.vsto como DeployWordAddin.vsto e, na próxima vez em que o aplicativo verificar a existência de uma atualização, obterá a versão 1.0.0.0.



As soluções de documento funcionam da mesma forma, exceto que o documento também é publicado na pasta de publicação e uma cópia é publicada no subdiretório de versão. Não há necessidade de executar o setup.exe; para instalar a solução de documento, basta abrir o documento e será solicitado que você aceite a instalação. Isso permite que você publique a solução em um local central e então distribua o documento para os usuários.

Depois de publicar a solução, os usuários podem instalá-la executando o bootstrapper setup.exe, que iniciará a instalação ClickOnce. O modelo de segurança é mais robusto do que o do VBA e muito mais fácil de usar do que as versões anteriores doVSTO. A primeira verificação procura pela solução assinada por um certificado confiável. Se o certificado for confiável, a solução será instalada. Caso contrário, será solicitado que o usuário permita a instalação. Como já mencionei, as soluções de documento são quase idênticas aos suplementos, exceto que você pode instalá-las simplesmente abrindo o documento. Uma limitação das soluções de documento é que, se o documento não estiver na máquina local ou se contiver código VBA, então seu local terá de ser adicionado à lista de pastas confiáveis do Office. Depois de instalada, a solução poderá ser acessada offline, sem que seja necessário executá-la primeiro.

Estendendo o VBA com VSTO
Outro grande recurso do VSTO é a sua capacidade de trabalhar lado a lado com o VBA, permitindo que você mantenha o investimento existente em VBA e utilize o VSTO onde faça sentido. Por exemplo, o VSTO facilita a extensão do seu códigoVBA para a personalização da Faixa de Opções, a criação de um painel de tarefas personalizado ou a chamada a um serviço do WCF.

A primeira forma de comunicação entre o VSTO e o VBA existe para que o VSTO chame funções do VBA. Você utiliza o modelo de objeto do aplicativo do Office para chamar a função. Por exemplo, o Excel oferece o método Run para chamar sub-rotinas e funções do VBA. Para usar o método Run, passe o nome da sub-rotina ou da função como primeiro parâmetro. Os parâmetros opcionais restantes são usados na passagem de dados para as funções. Imagine que você tenha uma função doVBA chamada AddNumbers, que utiliza dois parâmetros e retorna um inteiro. O código VSTO que chama essa função do VBApoderia ser:

CÓDIGO: SELECIONAR TUDO
Dim answer as integer = Me.Application.Run("AddNumbers", 10, 2) 


Devemos observar que esse código falhará caso o acesso apropriado não seja concedido às macros VBA. Por padrão, as macros VBA não são habilitadas. Mas, novamente, esse cenário supõe que você possua um código VBA existente que tenha permissão para ser executado e que agora esteja chamando as macros existentes a partir do VSTO. Essa solução também é frágil, uma vez que o usuário pode alterar facilmente o código VBA, causando a falha do método Run. Além disso, você não terá o IntelliSense para guiá-lo, o que poderá gerar mais erros. Você precisa escrever seu código de forma defensiva para lidar com esses casos.

A segunda forma de comunicação entre o VSTO e o VBA existe para que o VBA chame funções do VSTO. Anteriormente, isso só era possível de uma forma muito frágil e limitada, mas agora foi incorporada ao VSTO. O cenário comum para esse recurso é quando você possui um documento Excel existente contendo código VBA e deseja adicionar funcionalidade escrita em código gerenciado usando o VSTO.

Outro cenário comum é quando o departamento de TI cria uma biblioteca de funcionalidade no VSTO para ser utilizada pelo usuário VBA. Talvez você simplesmente queira criar um projeto de pasta de trabalho no Excel com macros habilitadas, mas primeiro é preciso ter uma pasta de trabalho com código VBA. Crie uma nova pasta de trabalho, adicione um código VBA e salve-a como uma pasta de trabalho habilitada para macro, chamada VBAInterop.xlsm. Abra o Visual Studio e crie um novo projeto do Excel no Visual Basic.

Quando a caixa de diálogo do novo projeto solicitar a seleção de um documento para o seu aplicativo, escolha "Copiar um documento existente" e navegue até o arquivo VBAInterop.xlsm recém-criado. Isso permitirá que você adicione macros VBA para chamar funcionalidade na solução VSTO associada ao documento. Se você estiver usando uma instalação nova do Visual Studio, talvez obtenha uma caixa de diálogo de aviso, dizendo que é necessário permitir o acesso ao sistema de projetos VBA. Clique em OK para permitir, e o projeto será criado.

Após a criação do projeto, salve-o clicando em File | Save All (Arquivo | Salvar Tudo); o local padrão serve para esse exemplo. Clique duas vezes em ThisWorkbook.vb no Solution Explorer para abrir o designer da pasta de trabalho. Você pode usar qualquer modo de exibição do VBA que quiser. No VSTO, um modo de exibição é o objeto de nível mais alto, representado no Solution Explorer como um arquivo sob o nó de documentos. Por padrão, o Excel possui quatro modos de exibição, um para a pasta de trabalho e um para cada planilha. Em compensação, o Word só possui um, o documento. Você apresentará o modo de exibição da pasta de trabalho ao VBA ao definir uma propriedade na grade de propriedades do arquivo ThisWorkbook.vb.

Existem duas propriedades que controlam o comportamento de interoperabilidade do VBA: EnableVbaCallers e ReferenceAssemblyFromVbaProject. Só é preciso definir EnableVbaCallers como True; ReferenceAssemblyFromVbaProject será automaticamente definido como True também. ReferenceAssemblyFromVbaProject oferece suporte a cenários avançados da interoperabilidade do VBA e está além do escopo deste artigo.

Depois de definir EnableVbaCallers como true, você receberá uma caixa de diálogo de aviso informando que o código VBAescrito durante a depuração do projeto não será salvo no projeto. O seu projeto VSTO contém o documento do Office. Quando um projeto é criado e depurado/executado, o VSTO coloca uma cópia do documento no local de saída. Na verdade, quem estará em execução será essa cópia e, portanto, as alterações feitas não serão incluídas na cópia do documento do projeto. Se você quiser que o seu código VBA permaneça no documento, abra o documento no projeto fora do VSTO e adicione e códigoVBA.

Agora que você habilitou a interoperabilidade, poderá adicionar uma função a ser chamada pelo VBA. Clique com o botão direito em ThisWorkbook.vb e escolha View Code (Exibir Código). Crie uma função para adicionar dois números juntos e retornar o resultado:

CÓDIGO: SELECIONAR TUDO
Public Function AddNumbers (ByVal _       
x As Integer, _       
ByVal y As Integer) As Integer         
Return x + y     
End Function  


Agora você pode executar a solução pressionando F5. Depois de abrir a pasta de trabalho, pressione Alt+F11 para abrir o editorVBA mostrado na Figura 9. Você verá o código VBA gerado pelo VSTO para conectar o VBA ao assembly do VSTO. Agora é possível chamar as funções do VSTO a partir do objeto CallVSTOAssembly com um IntelliSense completo que oferece suporte aos parâmetros e aos tipos de retorno.


Figura 9 Editor VBA (Clique na imagem para aumentar a exibição)

Você pode ver como é fácil estender o seu código VBA com o VSTO e o código gerenciado. Essa é uma ótima técnica para adicionar caixas de diálogo do WPF à sua solução VBA ou chamar serviços do WCF e de outros recursos do .NET Framework 3.5. Também é possível usá-la com funções definidas pelo usuário para chamar código gerenciado. Você pode até depurar totalmente essa solução definindo pontos de interrupção tanto no código VBA como no código VSTO, podendo alternar entre esses dois ambientes de desenvolvimento.

Embora o suporte ao VBA não vá desaparecer em um futuro próximo, este é o momento perfeito para fazer a transição para o desenvolvimento gerenciado no Office com o VSTO. Existem muitos recursos novos disponíveis na versão mais recente do Office e do VSTO que tornam essa combinação a maneira mais produtiva de criar grandes aplicativos do Office. Para obter mais informações sobre o VSTO, visite seu fórum no MSDNonline.


Tags: VBA, Outlook, Microsoft .NET Framework, VSTO, Visual Studio, LINQ, Language-integrated query, WPF, Windows Presentation Foundation, WCF, Windows Communications Foundation, .NET Framework 3.5



Nenhum comentário:

Postar um comentário

diHITT - Notícias