Ir ao conteúdo
  • Cadastre-se
Igor Cremonezi

Redução no tamanho do código (vba)

Recommended Posts

 Pessoal, estou começando agora a mexer na área de programação, e estou desenvolvendo um sistema onde eu trabalho (escritório de contabilidade) para envio de e-mails pelo excel com apenas um click. Estou usando algumas msgbox para saber quais impostos terão no determinado mês (no caso estou usando 6 msgbox). Porém ai que está o problema, dependendo das respostas do usuário se tem ou não determinado imposto, o assunto, corpo e anexos do e-mail mudam (mantendo sempre o mesmo padrão), ou seja, para cada combinação de respostas é executado um bloco de ação um pouco diferente. A única ideia que tive foi de usar o if, porém o código fica imenso, pois cada bloco tem mais ou menos 50 linhas e como são 6 msgbox com a opção de sim ou não, são 64 combinações de respostas diferentes, então imagina só o tamanho que ficaria:

   if msgbox1 = vbYes and 2 = yes and 3 = yes........

   50 linhas.....

   if 1 = vbno and 2 = yes and 3 = no........

 

 Alguém poderia me dar uma solução que encurtaria meu código? Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Igor Cremonezi Não programo em VBA, mas ele possui o bloco switch case.

Use-o para substituir a cadeia de IF gigantesca

 

https://msdn.microsoft.com/pt-br/library/cy37t14y.aspx

https://www.techonthenet.com/excel/formulas/case.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que você pode fazer é criar uma lista com todos os impostos e criar uma condição sim/não e fazer um loop que possa enviar o email de acordo com a condição verdadeira sim.

 

Se nao conseguir disponibilize o arquivo com o codigo e a lista de impostos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Além de enviar ele controla marcando um OK em uma tabela que eu fiz para controlar o que foi e o que não foi ainda. Então de acordo com as respostas, mudaria onde seria colocado o OK, o título do e-mail, o corpo, e o anexo.
Bem, vou colocar a combinação de como se todas as respostas do usuário fosse sim e uma de como só a primeira fosse sim, apenas para servir de exemplo (como as variáveis não interfere em nada nesse meu problema, não coloquei a construção delas).
 

resp1 = MsgBox("Tem ISS?", vbYesNo + vbQuestion, "ISS")
resp2 = MsgBox("Tem ICMS?", vbYesNo + vbQuestion, "ICMS")
resp3 = MsgBox("Tem PIS?", vbYesNo + vbQuestion, "PIS")
resp4 = MsgBox("Tem COFINS?", vbYesNo + vbQuestion, "COFINS")
resp5 = MsgBox("Tem CSLL?", vbYesNo + vbQuestion, "CSLL")
resp6 = MsgBox("Tem IRPJ?", vbYesNo + vbQuestion, "IRPJ")

If resp1 = vbYes And resp2 = vbYes And resp3 = vbYes And resp4 = vbYes And resp5 = vbYes And resp6 = vbYes Then
    Range("D4").Select
    ActiveCell.FormulaR1C1 = "OK"
    Range("E4").Select
    ActiveCell.FormulaR1C1 = "OK"
    Range("F4").Select
    ActiveCell.FormulaR1C1 = "OK"
    Range("G4").Select
    ActiveCell.FormulaR1C1 = "OK"
    Range("H4").Select
    ActiveCell.FormulaR1C1 = "OK"
    Range("I4").Select
    ActiveCell.FormulaR1C1 = "OK"
    .to = ("e-mail1")
    .cc = ("e-mail2")
    .Subject = "ISS, ICMS, PIS, COFINS, C SOCIAL e IRPJ - " & refm & "/" & refy
    .Body = " Prezado Cliente," & vbCrLf & _
           "" & vbCrLf & _
           " Segue anexo o(s) seguinte(s) imposto(s):" & vbCrLf & _
           "    - ISS - " & refm & "/" & refy & ", com vencimento em " & VencISSPISCOF & ";" & vbCrLf & _
           "    - ICMS - " & refm & "/" & refy & ", com vencimento em " & VencICMSAP & ";" & vbCrLf & _
           "    - PIS - " & refm & "/" & refy & ", com vencimento em " & VencISSPISCOF & ";" & vbCrLf & _
           "    - COFINS - " & refm & "/" & refy & ", com vencimento em " & VencISSPISCOF & ";" & vbCrLf & _
           "    - C SOCIAL - " & refm & "/" & refy & ", com vencimento em " & VencCSLLIRPJ & ";" & vbCrLf & _
           "    - IRPJ - " & refm & "/" & refy & ", com vencimento em " & VencCSLLIRPJ & "."
    .Attachments.Add "\\Igor\d\Meus Documentos\Arquivos para o site - Email\empresa1\Departamento Fiscal\IMPOSTOS - " & refy & "\" & refm & "\ISS - " & refm & " " & refy & " (VENCIMENTO " & Day(VencISSPISCOF) & "." & vmes & "." & vano & ").pdf"
    .Attachments.Add "\\Igor\d\Meus Documentos\Arquivos para o site - Email\empresa1\Departamento Fiscal\IMPOSTOS - " & refy & "\" & refm & "\ICMS - " & refm & " " & refy & " (VENCIMENTO " & Day(VencICMSAP) & "." & vmes & "." & vano & ").pdf"
    .Attachments.Add "\\Igor\d\Meus Documentos\Arquivos para o site - Email\empresa1\Departamento Fiscal\IMPOSTOS - " & refy & "\" & refm & "\PIS - " & refm & " " & refy & " (VENCIMENTO " & Day(VencISSPISCOF) & "." & vmes & "." & vano & ").pdf"
    .Attachments.Add "\\Igor\d\Meus Documentos\Arquivos para o site - Email\empresa1\Departamento Fiscal\IMPOSTOS - " & refy & "\" & refm & "\COFINS - " & refm & " " & refy & " (VENCIMENTO " & Day(VencISSPISCOF) & "." & vmes & "." & vano & ").pdf"
    .Attachments.Add "\\Igor\d\Meus Documentos\Arquivos para o site - Email\empresa1\Departamento Fiscal\IMPOSTOS - " & refy & "\" & refm & "\C SOCIAL - " & refm & " " & refy & " (VENCIMENTO " & Day(VencCSLLIRPJ) & "." & vtrim & "." & vtria & ").pdf"
    .Attachments.Add "\\Igor\d\Meus Documentos\Arquivos para o site - Email\empresa1\Departamento Fiscal\IMPOSTOS - " & refy & "\" & refm & "\IRPJ - " & refm & " " & refy & " (VENCIMENTO " & Day(VencCSLLIRPJ) & "." & vtrim & "." & vtria & ").pdf"
       If Range("D2") = "Igor" Then
    .HTMLBody = .HTMLBody & "<img src='file:////igor/d/Meus%20Documentos/Assinatura%20IGOR.jpg'>"
       End If
       If Range("D2") = "Adriano" Then
    .HTMLBody = .HTMLBody & "<img src='file:////igor/d/Meus%20Documentos/Assinatura_Adriano.JPG'>"
       End If
    .Display
    .Send
End If

If resp1 = vbYes And resp2 = vbNo And resp3 = vbNo And resp4 = vbNo And resp5 = vbNo And resp6 = vbNo Then
    Range("D4").Select
    ActiveCell.FormulaR1C1 = "OK"
    .to = ("e-mail1")
    .cc = ("e-mail2")
    .Subject = "ISS - " & refm & "/" & refy
    .Body = " Prezado Cliente," & vbCrLf & _
           "" & vbCrLf & _
           " Segue anexo o(s) seguinte(s) imposto(s):" & vbCrLf & _
           "    - ISS - " & refm & "/" & refy & ", com vencimento em " & VencISSPISCOF & "."
    .Attachments.Add "\\Igor\d\Meus Documentos\Arquivos para o site - Email\empresa1\Departamento Fiscal\IMPOSTOS - " & refy & "\" & refm & "\ISS - " & refm & " " & refy & " (VENCIMENTO " & Day(VencISSPISCOF) & "." & vmes & "." & vano & ").pdf"
       If Range("D2") = "Igor" Then
    .HTMLBody = .HTMLBody & "<img src='file:////igor/d/Meus%20Documentos/Assinatura%20IGOR.jpg'>"
       End If
       If Range("D2") = "Adriano" Then
    .HTMLBody = .HTMLBody & "<img src='file:////igor/d/Meus%20Documentos/Assinatura_Adriano.JPG'>"
       End If
    .Display
    .Send
End If

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Basole Bem, eu penso que quanto mais possibilidades eu tiver, melhor para eu adaptar o código, ou seja, quanto mais pessoas virem e ajudarem, maior chance de eu encontrar a forma que se encaixa perfeitamente no que eu quero. Não vejo problema algum nisso, mas se não deseja ajudar, eu entendo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Igor Cremonezi concordo em partes com voce.

 

Mas imagine a situação. voce disponibiliza o seu tempo tentando entender o que faz um codigo de uma pessoa, e uma maneira de aperfeiçoa-lo, sendo que esta pessoa, já foi ajudada, em um outro Forum e já foi resolvido o problema, e voce não sabe disso.

 

É o que acontece muito por aqui. 

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Basole Concordo completamente. É uma sacanagem imensa eu descobrir uma solução e não avisar (ambos os fóruns). Nunca vou fazer isso, se eu descobrir uma solução fora dos fóruns por exemplo, por uma pessoa que eu conheça, eu avisarei de imediato ambos os fóruns.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Igor Cremonezi Como resolveu?  posta aqui para ajudar os outros que estiverem com a mesma dúvida

Compartilhar este post


Link para o post
Compartilhar em outros sites

 Um usuário de outro fórum me apresentou uma saída, ainda tenho que fazer algumas alterações de acordo com o padrão que usamos, porém está funcionado, fica mais ou menos assim:

Dim Corpo As String, Assunto As String
If resp1 = vbYes Then
      Range("D4").Formula = "OK"
    Corpo = Corpo & "    - ISS - " & refm & "/" & refy & ", com vencimento em " & VencISSPISCOF & ";" & vbCrLf
    Assunto = Assunto & "ISS,"
End If
If resp2 = vbYes Then
      Range("E4").Formula = "OK"
    Corpo = Corpo & "    - ICMS - " & refm & "/" & refy & ", com vencimento em " & VencICMSAP & ";" & vbCrLf
    Assunto = Assunto & "ICMS,"
End If

 etc... Essa é a ideia.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×