Como consumir Web Services usando VBA - Windows 7 e Office 2010

Este post foi originalmente publicado em http://officevbavsto.blogspot.com/2013/05/chamando-webservices-pelo-vba-usando.html

No artigo Como consumir Web Services usando VBA mencionei que o Microsoft Office XP Web Services Toolkit 2.0 é suportado somente nos seguintes sistemas operacionais: Windows 2000, Windows 98, Windows ME, Windows NT, Windows XP [2].

Neste artigo apresento uma maneira de você consumir Web Service através de VBA utilizando o Microsoft Windows 7 e o Microsoft Office 2010.

Microsoft Office XP Web Services Toolkit 2.0

O Web Service References Tool é usado no Microsoft Office Visual Basic Editor para criar módulos de classe proxy em VBA a partir de um WSDL (Web Service Description Language) ou de um arquivo .vsdisco (Visual Studio .NET discovery) [8].

Infelizmente, ele é suportado somente nos seguintes sistemas operacionais: Windows 2000, Windows 98, Windows ME, Windows NT, Windows XP [2].
Se você tentar utilizar o AddIn Microsoft Office XP Web Services Toolkit 2.0 no Microsoft Office 2010 com o Sistema Operacional Windows 7, receberá a seguinte mensagem de erro ao clicar na opção FerramentasWeb Service Reference, no Visual Basic Editor.

SOAP Toolkit 3.0

Antes de iniciarmos, é necessário instalar o SOAP Toolkit 3.0 [1] em seu computador.

O SOAP Toolkit permite que um aplicativo cliente consuma métodos Web Service [3].

Consumindo o Web Service

Primeiro, vamos adicionar referência “Microsoft Soap Type Library 3.0”:

  • No Microsoft Excel 2010, clique na guia Desenvolvedor;
  • Clique no botão Visual Basic;
  • No Visual Basic Editor, clique em Ferramentas;
  • Clique em Referências;
  • Localize e marque a biblioteca “Microsoft Soap Type Library v3.0” (Figura 2);
  • Clique em OK.

Agora, insira um novo módulo de código e digite o seguinte:

Sub ConsomeWS()

    Dim clsSoapClient As SoapClient30 

End Sub

Na Tabela 1 (acima), começamos nosso código digitando uma variável do tipo SoapClient30. A classe SoapClient30 representa um cliente para enviar mensagens SOAP usando protocolos de transporte independentes [4].

Neste artigo, utilizaremos como exemplo o mesmo Web Service que usamos no artigo Chamando WebServices pelo VBA. Trata-se de um Web Service de domínio público chamado GlobalWeather o qual retorna as condições de tempo atual de acordo com o país e cidade especificados.

Digite o seguinte código:

Sub ConsomeWS()
 
    Dim clsSoapClient As SoapClient30 

    Dim c_WSDL_URL As String

    c_WSDL_URL = "http://www.webservicex.com/globalweather.asmx?WSDL"

End Sub 

Na código acima, criamos outra variável chamada de c_WSDL_URL. Em seguida, atribuímos o endereço do WSDL do Web Service GlobalWeather.

WSDL (Web Services Description Language) é uma linguagem baseada em XML utilizada para descrever Web Services e como acessá-los [5].

Continuando nosso código, digite o seguinte:

Sub ConsomeWS()

	Dim clsSoapClient As SoapClient30 
	
	Dim c_WSDL_URL As String
	
	c_WSDL_URL = "http://www.webservicex.com/globalweather.asmx?WSDL"
	
	Set clsSoapClient = New SoapClient30
	
	clsSoapClient.MSSoapInit c_WSDL_URL

End Sub 

No código acima criamos uma instância da classe SoapClient30 e chamamos o método MSSoapInit passando como parâmetro a variável c_WSDL_URL, que contém o endereço do WSDL do Web Service GlobalWeather.

O método MSSoapInit inicia a comunicação com o Web Service [6]. Este método requer que passemos como parâmetro o caminho do WSDL [6]. Este método possui como parâmetros opcionais o nome e a porta do serviço. O método utiliza a primeira porta e serviço disponível se você não especificar estes valores [7].

E para concluir, vamos consumir o método GetWeather passando como parâmetro a cidade de Uberaba e o país Brasil. Lembrando que como o serviço é de domínio internacional, precisamos especificar o nome do país em inglês (Brazil).

Sub ConsomeWS()

	Dim clsSoapClient As SoapClient30
	
	Dim c_WSDL_URL As String
	
	c_WSDL_URL = "http://www.webservicex.com/globalweather.asmx?WSDL"
	
	Set clsSoapClient = New SoapClient30
	
	clsSoapClient.MSSoapInit c_WSDL_URL 
	
	Debug.Print clsSoapClient.GetWeather("Uberaba", "Brazil")
	
	Set clsSoapClient = Nothing

End Sub 

Créditos

Photo by Pixabay from Pexels

Referência Bibliográfica