Ir ao conteúdo
  • Cadastre-se

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


Posts recomendados

 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.

Link para o comentário
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

 

Link para o comentário
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.

Link para o comentário
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
Link para o comentário
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
Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...