Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
Redução no tamanho do código (VBA)
-
- Acabou de chegar
- Mensagens: 6
- Registrado em: Seg Nov 07, 2016 6:32 pm
Redução no tamanho do código (VBA)
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.
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.
- Fabio Trindade
- Manda bem
- Mensagens: 161
- Registrado em: Dom Abr 24, 2011 4:07 pm
Re: Redução no tamanho do código (VBA)
Boa noite, Igor Cremonezi.
Uma outra alternativa seria utilizar Select Case
https://msdn.microsoft.com/pt-br/library/cy37t14y.aspx
Uma outra alternativa seria utilizar Select Case
https://msdn.microsoft.com/pt-br/library/cy37t14y.aspx
-
- Acabou de chegar
- Mensagens: 6
- Registrado em: Seg Nov 07, 2016 6:32 pm
Re: Redução no tamanho do código (VBA)
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.
- Reinaldo
- 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)
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
Fica muito dificil propor algo sem entender/ver sobre o que se está argumentando
-
- Acabou de chegar
- Mensagens: 6
- Registrado em: Seg Nov 07, 2016 6:32 pm
Re: Redução no tamanho do código (VBA)
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).
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
-
- Acabou de chegar
- Mensagens: 6
- Registrado em: Seg Nov 07, 2016 6:32 pm
- Reinaldo
- 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)
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
-
- Acabou de chegar
- Mensagens: 6
- Registrado em: Seg Nov 07, 2016 6:32 pm
Re: Redução no tamanho do código (VBA)
Vou testar amanhã quando chegar no escritório, e volto aqui para dar um feedback. Desde já obrigado!
-
- Acabou de chegar
- Mensagens: 6
- Registrado em: Seg Nov 07, 2016 6:32 pm
Re: Redução no tamanho do código (VBA)
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.