Mandar SMS a partir do … Excel ??

Vocês já imaginaram a possibilidade de conectar o celular ao PC, programar uma planilha de Excel e mandar mensagens? Bem, eu não. Sei que a maioria dos programas dos kits básicos de celular têm essa opção, mas eles são fechados. Programar uma API para jogar dados nestes programas seria algo bem difícil para o meu pouco conhecimento. Então, resolvi tentar algo diferente.

Vocês já receberam promoções via SMS ? Provavelmente já. Sabe como funciona essas comunicações? Irei explicar.

As operadoras de celular fazem um contrato com a empresa em questão. A partir desse contrato, e dos números fornecidos, a empresa manda um mail com o conteúdo que será replicado em forma de SMS, a operadora passa esse mail para o formato e o encaminha para os clientes. Isto, porém, exige duas coisas: um micro permanentemente conectado à internet e um contrato com uma operadora.

Para grandes clientes, isto não é um problema. Porém, para pequenos estabelecimentos, com poucos clientes, ou para automações em ambientes agressivos ou sem comunicação via internet, o que fazer ? Bem, era exatamente isso que eu estava precisando 😉

Por ter me aventurado com Linux, sei que os modems se comunicam por uma série de comandos AT. Isso, qualquer modem, desde os antigos até os modems GSM. O trabalho que tive foi procurar uma forma de se enviar SMS via esse protocolo. Um pouco de pesquisa e encontrei isto, um manual para comandos AT dos celulares Nokia (estava utilizando o meu aparelho N95-2 para os testes). Um pouco mais de pesquisas, e descobri várias outras coisas, bem como um programa de VB que fazia isto (e deixo o trabalho para vocês procurarem, porque eu dou a vara mas não o peixe 😉 ). Legal. Tenho os comandos, preciso testar isso. Onde farei ? No Hyper Terminal !

Primeiro, vou ao Gerenciador de Dispositivos. Abro o Modem e vejo em que porta COM ele está. Dica: se ele estiver em uma porta com um número maior que 9, mude para um número menor. O próximo passo, onde iremos fazer a comunicação via Excel, só funciona em portas com 1 dígito.

Gerenciador de Dispositivos - Selecionando o Modem
Gerenciador de Dispositivos - Selecionando o Modem
Aba Avançadas
Aba Avançadas
Selecionando a porta COM desejada
Selecionando a porta COM desejada

Legal, o modem do E71 agora está na porta 2. Vamos pro Hyper Terminal.

Nesta tela, mude do modem para a porta em que ele está instalado!
Nesta tela, mude do modem para a porta em que ele está instalado!
A velocidade não é importante. Os outros itens, deixe igual ao da figura!
A velocidade não é importante. Os outros itens, deixe igual ao da figura!

Dê OK e vamos para o console do Hyper Terminal. Para saber se o modem está conectado, digite AT e dê ENTER. Se ele mandar o comando OK, está funcionando. Algumas vezes o que nós digitamos aparece, e outras vezes, não. Não sei o porque disso 😉 mas sei que funciona assim!

Após o comando AT, vamos dar uma série de comandos. O primeiro é AT+CMGF=1, que serve para passar o modem para formato de texto SMS (=0 fica em modo PDU, que eu não pesquisei para saber o que era 😉 ). AT+CSCA=”<Digite o número do centro de mensagens>” seta a central de mensagens da sua operadora. Isto é necessário, e para conseguirmos o número, ou vemos no próprio celular ou uma googlada resolve. Após isto, digitamos o comando AT+CMGS=”<numero do celular>”. (é necessário as aspas antes da entrada dos números). Após este ENTER, o aparelho ficará esperando a mensagem. Digitamos a mesma, e no final temos que dar CTRL+Z. Uma mensagem de confirmação avisará que a mensagem foi enviada. Então sabemos que funciona 😉 . Agora é preparar o Excel.

Para isso, precisamos utilizar um componente ActiveX que é instalado no PC quando temos o Office: o MSCOMM32.OCX. Esse é um controle ActiveX, que permite a qualquer programa que o use enviar comandos via serial. Em um programa VB, é fácil usar o mesmo, é só inicializar o mesmo no cabeçalho do programa e depois usar seus comandos. No VBA do Excel, isto não é possível. Precisamos mascarar o mesmo em um outro tipo de comando e fazermos o redirecionamento (eu não sou especialista em VBA, pessoal! 😉 ). Para isso, utilizamos uma instrução Set. Vou colar aqui o meu cabeçalho.

Set m_Comm = New MSCommLib.MSComm
   
    m_Comm.CommPort = 2
    m_Comm.Handshaking = comNone
    m_Comm.Settings = “19200,n,8,1”  
    m_Comm.PortOpen = True
    m_Comm.DTREnable = True
    m_Comm.RTSEnable = True
    m_Comm.RThreshold = 1
    m_Comm.InputLen = 1

Pronto. Agora, ao puxar uma instrução MSComm, é só usar o m_Comm no lugar.

O final da minha macro ficou assim:

m_Comm.output = “AT”
m_Comm.output = “AT+CMGF=1” & vbCrLf
Sheets(“plan1”).Select
Range(“a2”).Select
numero = ActiveCell.Range(“A1”).Value
Range(“a3”).Select
mensagem = ActiveCell.Range(“A1”).Value
m_Comm.output = “AT+CMGS=” & Chr(34) & numero & Chr(34) & vbCrLf
m_Comm.output = mensagem & vbCrLf & Chr(26)

Onde as células A2 e A3 da minha planilha ficavam o número e a mensagem. vbCrLf é a forma que o VBA (e VB) manda um Enter via serial. Chr(34) é o código ASCII das aspas, e Chr(26) é o código do CTRL+Z. Desta forma, eu escrevia o número em A2, a mensagem em A3, clicava no botão Enviar e a mensagem era enviada. Lógico, na primeira linha da macro eu dei um Dim numero e Dim mensagem, para inicializar estas variáveis.

E o que fazer com isto daqui pra frente? Bem, o que a imaginação permitir. Se você têm uma planilha com vários telefones cadastrados, é só fazer a macro buscar um a um e mandar a mensagem (ótima forma de propaganda para empresas pequenas e médias!). Dá pra fazer no Acess, no VB, no Word, etc. É só usar a imaginação! A forma está lançada, as idéias são de vocês. Mas estou aqui sempre para ajudar 😉

Um abraço a todos, espero que, de alguma forma, isto seja útil para alguém (para o meu caso, foi!) e boa semana a todos!

Anúncios

9 comentários sobre “Mandar SMS a partir do … Excel ??

  1. OI fera, muito boa essa dica, apenas não entendi porque o uso da célula A1. Fico muito grato por um retorno e também se possível, mostrar como seria feito no Access.

  2. Esta é uma ideia que tive a algum tempo, quando criei um planilha para controlar o meu orçamento, e a ideia era colocar as contas apagar com data limite, e assim que chegasse próximo a data do pagamento a planilha mim enviaria um sms, mais nunca consegui encontra uma dica tão boa assim . Ainda não testei esta sua dica, mais se der certo será muito legal.
    Gostaria de algo mais detalhado se possível, para que eu pudesse aplicar esta sua ideia a minha planilha.

  3. Poxa, muito legal a sua idéia!
    Eu não sei se funciona com outros aparelhos (não sei se os comandos AT funcionam com Androids, por exemplo), mas daria para fazer com um minimodem, com certeza.
    Nunca pensei nisto!

  4. Tentei realizar os comandos, ambos deram erro O primeiro é AT+CMGF=1, que serve para passar o modem para formato de texto SMS (=0 fica em modo PDU, que eu não pesquisei para saber o que era 😉 ). AT+CSCA=”<Digite

    o que faço?

  5. Boa noite, Coloquei o código como esta escrito, ja tenho o arquivo mscoom32.ocx registrado, porém não consigo usar a ferramente mscomm, está faltando algum comando at neste código ou declarar lib, object?

    agradeço pela ajuda

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s