Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
#49039
Oi galera,

Esto com a seguinte dificuldade:
Ao clicar em um botão, preciso gerar um PDF de algumas planilhas da minha pasta de trabalho. Só que, caso alguma das planilhas que deveriam ser geradas, não possua dados, então esta planilha não deve ser gerada junto no PDF.

São quatro planilhas no total, a planilha "Apresentação Início" sempre estará presente, mas as outras três podem estar presentes ou não.

O fator determinante, deve ser um número presente na planilha "Apresentação Início", exe: Se na célula F10 estiver 0, então a planilha "APRESENTAÇÃO_EMPRESAS" não será inclusa no PDF. Mas como incluir essa condicional no código abaixo?

Segue código:

Sub GerarPDF_Apresentacao()

Call FILTRO_APRESENTACAO_TRAB
Call FILTRO_APRESENTACAO_EMP
Call FILTRO_APRESENTACAO_SIND

Dim FileNome As String

NomeFic = InputBox("Digite o nome do arquivo: ")
If NomeFic = "" Then Exit Sub
strDir = Application.ActiveWorkbook.Path & "\"
FileNome = strDir & NomeFic

On Error GoTo ERRO

If Dir(strDir, vbDirectory) = "" Then

MkDir strDir


Sheets(Array("APRESENTAÇÃO_INÍCIO", "APRESENTAÇÃO_TRABALHADORES", "APRESENTAÇÃO_EMPRESAS", "APRESENTAÇÃO_SINDICATOS")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=FileNome, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=True
MsgBox "Foi criado o documento: " + vbCrLf & FileNome

Else


Sheets(Array("APRESENTAÇÃO_INÍCIO", "APRESENTAÇÃO_TRABALHADORES", "APRESENTAÇÃO_EMPRESAS", "APRESENTAÇÃO_SINDICATOS")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=FileNome, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=True
MsgBox "Foi criado o documento: " & FileNome


End If

Sheets("APRESENTAÇÃO_INÍCIO").Select

Exit Sub

ERRO:
MsgBox "Ocorreu um erro, o arquivo não foi criado, verifique se o arquivo não está aberto"

End Sub
#49044
Experimente:

Código: Selecionar todos
Sub GerarPDF_Apresentacao()
 Dim FileNome As String, NomeFic As String, ws As Worksheet, strDir As String

  Call FILTRO_APRESENTACAO_TRAB
  Call FILTRO_APRESENTACAO_EMP
  Call FILTRO_APRESENTACAO_SIND
  
  For Each ws In ThisWorkbook.Worksheets
   If ws.Name <> "APRESENTAÇÃO_EMPRESAS" Or Sheets("APRESENTAÇÃO_INÍCIO").[F10] <> 0 Then
    NomeFic = InputBox("Digite o nome do arquivo: ")
    If NomeFic = "" Then Exit Sub
    strDir = Application.ActiveWorkbook.Path & "\"
    FileNome = strDir & NomeFic
    On Error GoTo ERRO
    If Dir(strDir, vbDirectory) = "" Then MkDir strDir
    ws.ExportAsFixedFormat Type:=xlTypePDF, _
    Filename:=FileNome, _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, _
    OpenAfterPublish:=True
    MsgBox "Foi criado o documento: " + vbCrLf & FileNome
   End If
  Next ws
  Sheets("APRESENTAÇÃO_INÍCIO").Select
  Exit Sub
ERRO:
  MsgBox "Ocorreu um erro, o arquivo não foi criado, verifique se o arquivo não está aberto"
  
End Sub


#49046
Olá,

Não analisei em detalhes o seu código, mas me chamou a atenção um IF:

Acredito que você possa trocar isto:
Código: Selecionar todos
If Dir(strDir, vbDirectory) = "" Then

MkDir strDir

Sheets(Array("APRESENTAÇÃO_INÍCIO", "APRESENTAÇÃO_TRABALHADORES", "APRESENTAÇÃO_EMPRESAS", "APRESENTAÇÃO_SINDICATOS")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=FileNome, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=True
MsgBox "Foi criado o documento: " + vbCrLf & FileNome

Else

Sheets(Array("APRESENTAÇÃO_INÍCIO", "APRESENTAÇÃO_TRABALHADORES", "APRESENTAÇÃO_EMPRESAS", "APRESENTAÇÃO_SINDICATOS")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=FileNome, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=True
MsgBox "Foi criado o documento: " & FileNome
por isto:
Código: Selecionar todos
If Dir(strDir, vbDirectory) = "" Then MkDir strDir

Sheets(Array("APRESENTAÇÃO_INÍCIO", "APRESENTAÇÃO_TRABALHADORES", "APRESENTAÇÃO_EMPRESAS", "APRESENTAÇÃO_SINDICATOS")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=FileNome, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=True
MsgBox "Foi criado o documento: " + vbCrLf & FileNome
Os conteúdos do Then e do Else são idênticos, com excessão do MkDir strDir, logo, fica só ele no IF.

Quanto ao problema em si, como você não anexou a planilha, vou te passar a solução em linhas gerais, pra você desenvolver.

Você tem que atuar nesta linha:
Sheets(Array("APRESENTAÇÃO_INÍCIO", "APRESENTAÇÃO_TRABALHADORES", "APRESENTAÇÃO_EMPRESAS", "APRESENTAÇÃO_SINDICATOS")).Select
Ao invés de selecionar as 4 planilhas, faça uma seleção criteriada.

Você pode fazer uma estrutura como esta:
Plans = "Apresentação Início"
If sheets("Apresentação Início").range("F10").value <> 0 Then Plans = Plans & "," & "APRESENTAÇÃO_EMPRESAS" 'Condição_para_segunda_Planilha
If 0 = 1 Then Plans = Plans & "," & "Plan3" 'Condição_para_terceira_Planilha
If 1 = 1 Then Plans = Plans & "," & "Plan4" 'Condição_para_quarta_Planilha
Sheets(Split(Plans , ",")).Select


Plans inicia com a planilha de impressão obrigatória, e depois 3 IFs dirão se cada uma das demais será ou não impressa.

Troque o 1=1 ou 0=1 por critérios que definem se cada planilha será ou não selecionada.

Se tiver dúvida, avise.

Se esta mensagem colabora para a solução do problema, peço que dê um Like, clicando no botão com o "positivo", acima e a direita.

Jimmy San Juan
#49076
Caros, não consegui implementar o código... está direcionando para a msgbox "Ocorreu um erro, o arquivo não foi criado, verifique se o arquivo não está aberto"

Estou anexando a planilha base (modificada), para vocês darem um olhada. Existem duas células na planilha "APRESENTAÇÃO_INÍCIO" que deverão ser usadas nas condicionais: G85 e G161.

APRESENTAÇÃO_INÍCIO e APRESENTAÇÃO_TRABALHADORES sempre estarão presentes no PDF.

Se G85 e G161 forem <> 0, então todas planilhas serão geradas no PDF.
Se apenas G85 = 0, então serão geradas todas planilhas, exceto APRESENTAÇÃO_EMPRESAS.
Se apenas G161 = 0, então serão geradas todas planilhas, exceto APRESENTAÇÃO_SINDICATOS.

Desde já obrigado pela ajuda

Arquivo em anexo
Você não está autorizado a ver ou baixar esse anexo.
#49096
Olá Ayslang,
Ayslang escreveu:Se G85 e G161 forem <> 0, então todas planilhas serão geradas no PDF.
Se apenas G85 = 0, então serão geradas todas planilhas, exceto APRESENTAÇÃO_EMPRESAS.
Se apenas G161 = 0, então serão geradas todas planilhas, exceto APRESENTAÇÃO_SINDICATOS.
E se G85 e G161 (ambos) forem iguais a zero?

Seria melhor você definir quais as condições que fazem as planilhas APRESENTAÇÃO_EMPRESAS e APRESENTAÇÃO_SINDICATOS serem impressas, e não as que fazem com que não sejam (refiro-me à palavra "exceto").

Arrisquei um palpite:
G85 <> 0 define que APRESENTAÇÃO_EMPRESAS será impressa.
G161 <> 0 define que APRESENTAÇÃO_SINDICATOS será impressa.

Segue anexa a planilha.

Se esta mensagem colabora para a solução do problema, peço que dê um Like, clicando no botão com o "positivo", acima e a direita.

Jimmy San Juan
Você não está autorizado a ver ou baixar esse anexo.
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord