Vídeo recomendado
https://youtu.be/diWPPPhW-9E

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

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
Igor Cremonezi
Acabou de chegar
Acabou de chegar
Mensagens: 6
Registrado em: Seg Nov 07, 2016 6:32 pm

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

Mensagem por Igor Cremonezi »

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........ 6 = 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.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Fabio Trindade
Manda bem
Manda bem
Mensagens: 161
Registrado em: Dom Abr 24, 2011 4:07 pm

Re: Redução no tamanho do código (VBA)

Mensagem por Fabio Trindade »

Boa noite, Igor Cremonezi.

Uma outra alternativa seria utilizar Select Case
https://msdn.microsoft.com/pt-br/library/cy37t14y.aspx


Igor Cremonezi
Acabou de chegar
Acabou de chegar
Mensagens: 6
Registrado em: Seg Nov 07, 2016 6:32 pm

Re: Redução no tamanho do código (VBA)

Mensagem por Igor Cremonezi »

Poderia me dar um exemplo de como iria utilizar no meu caso, pois como nunca utilizei o select case, tive que pesquisar como funciona a aplicação dele, porém mesmo assim não consegui enxergar um modo de aplicar no meu código.


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: Redução no tamanho do código (VBA)

Mensagem por Reinaldo »

Não sei se entendi corretamente, mas se as 64 combinações de respostas geram uma atividade/rotina diferente para cada uma, não vejo como simplificar. Pode fornecer maiores detalhes do que cada combionação deve executar? Algo em comum entre elas?
Fica muito dificil propor algo sem entender/ver sobre o que se está argumentando


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Igor Cremonezi
Acabou de chegar
Acabou de chegar
Mensagens: 6
Registrado em: Seg Nov 07, 2016 6:32 pm

Re: Redução no tamanho do código (VBA)

Mensagem por Igor Cremonezi »

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).

Código: Selecionar todos

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


Igor Cremonezi
Acabou de chegar
Acabou de chegar
Mensagens: 6
Registrado em: Seg Nov 07, 2016 6:32 pm

Re: Redução no tamanho do código (VBA)

Mensagem por Igor Cremonezi »

Será que não tem nenhuma maneira?


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: Redução no tamanho do código (VBA)

Mensagem por Reinaldo »

talvez conforme abaixo, veja se consegue evoluir;

Código: Selecionar todos

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")
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
If resp3 = vbYes Then
      Range("F4").Formula = "OK"
    Corpo = Corpo & "    - PIS - " & refm & "/" & refy & ", com vencimento em " & VencISSPISCOF & ";" & vbCrLf
    Assunto = Assunto & "PIS, COFINS,"
End If
If resp4 = vbYes Then
      Range("G4").Formula = "OK"
    Corpo = Corpo & "    - C SOCIAL - " & refm & "/" & refy & ", com vencimento em " & VencCSLLIRPJ & ";" & vbCrLf
    Assunto = Assunto & "C SOCIAL,"
End If
If resp5 = vbYes Then
      Range("H4").Formula = "OK"
    Corpo = Corpo & "    - IRPJ - " & refm & "/" & refy & ", com vencimento em " & VencCSLLIRPJ
    Assunto = Assunto & "IRPJ,"
End If
MsgBox Assunto
MsgBox Corpo


Igor Cremonezi
Acabou de chegar
Acabou de chegar
Mensagens: 6
Registrado em: Seg Nov 07, 2016 6:32 pm

Re: Redução no tamanho do código (VBA)

Mensagem por Igor Cremonezi »

Vou testar amanhã quando chegar no escritório, e volto aqui para dar um feedback. Desde já obrigado!


Igor Cremonezi
Acabou de chegar
Acabou de chegar
Mensagens: 6
Registrado em: Seg Nov 07, 2016 6:32 pm

Re: Redução no tamanho do código (VBA)

Mensagem por Igor Cremonezi »

Testei ontem e realmente funcionou, tenho que fazer algumas pequenas alterações, mas nada de mais. Apesar se eu não ter testado ainda com as alterações pois nessa época do mês não tenho tempo de mexer, acho que não terei problemas. Acredito que posso dar essa caso como resolvido. Obrigado.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder