Notifications
Clear all

Salvar em pdf somente se as celulas forem preenchidas!

10 Posts
4 Usuários
0 Reactions
1,399 Visualizações
(@felipebc)
Posts: 0
New Member
Topic starter
 

Olá pessoal!

Estou desenvolvendo uma planilha para a empresa e estou com problemas para finalizar a macro principal do arquivo, vou tentar explicar pra vocês...

Minha planilha deve ser preenchida por completo, então faço a contagem de células vazias e, caso haja células não preenchidas, minha célula mesclada L1:O1 exibirá a mensagem "PREENCHIMENTO INCOMPLETO", caso todas as células sejam preenchidas, será exibido "OK". O que desejo é que, caso a mensagem exibida seja "PREENCHIMENTO INCOMPLETO", essa planilha não será salva e obrigará meu usuário à alimentação correta. Caso exiba a mensagem "OK", minha planilha salvará a última aba resumo SOMENTE no modo PDF, evitando assim que a planilha seja salva e que meu usuário utilize-a uma próxima vez com informações anteriores, obrigando-o a alimentar a planilha sempre que for necessário sua abertura e utilização.

Caso alguém saiba como resolver essa macro, por favor me ensine, tô trabalhando nela desde segunda e não tiro isso da cabeça kkkk

Posso disponibilizar a planilha via link dropbox, se precisarem.

Obrigado galera!!

 
Postado : 28/07/2016 7:17 am
(@engeel2014)
Posts: 207
Reputable Member
 

Amigo, disponibilize a sua planilha.

 
Postado : 28/07/2016 9:12 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

felipebc,

Boa tarde!

Veja se é assim.

 
Postado : 28/07/2016 9:19 am
(@felipebc)
Posts: 0
New Member
Topic starter
 

Posso sim engeel 2014! Vou disponibiliza-la aqui!

Wag, testei a sua macro aqui e deu certo! Mas quando altero o filename para aparecer informações de determinadas células, aparece uma mensagem de erro.

Também quando tento alterar a condição para que meu usuário não utilize o "Salvar como", aparece outro erro.

Você sabe como resolver isso?
Caso saiba, pode me explicar ou me indicar um material para que eu também possa aprender?

Conhecimento é sempre bom!

Obrigado pela ajuda amigos! Sinto que com vocês estou próximo de resolver essa macro e começar a trabalhar com a planilha!

Estou anexando a planilha para verificação.

 
Postado : 28/07/2016 1:50 pm
(@mprudencio)
Posts: 0
New Member
 

Vc tem uma macro que salva pdf ?

Se sim tente assim


Sub Gravar()

If Range("L1").value = "OK" Then

' Aqui vc pode escrever seu codigo ou simplesmente digitar o nome da macro em uma nova sub

Nome da Sua Macro que salva PDF

' Se quiser uma mensagem de aviso que falta inserir dados mantenha as linhas abaixo do contrario é so apagar.

Else

MsgBox "Dados Incompletos!!" & Chr(13) & "Preencha Corretamente a Planilha...", vbInformation, "Dados Incompletos"

End If

End Sub

 
Postado : 28/07/2016 4:30 pm
(@engeel2014)
Posts: 207
Reputable Member
 

Caro felipebc, poderá utilizar o código abaixo para a impressão do PDF sem a necessidade de colocar nas celulas "L1:O1" a mensagem. No lugar da mensagem você poderá inserir no código quais são as células que devem ser preenchidas. No caso deste exemplo as células são "C2" "C4" e "C6". O PDF será salvo na mesma pasta onde o arquivo "Exemplo.xlsm" está.

Function Caminho() As String
Caminho = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "")
End Function
Sub ImprimirPDF()
Application.ScreenUpdating = False
If Range("c2") <> "" And Range("c4") <> "" And Range("c6") <> "" Then

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
Caminho & "exmplo" & ".pdf" _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=True

Else
MsgBox "Favor preencher todos os campos antes de proseguir com a geração do PDF"
End If
End Sub
 
Postado : 28/07/2016 9:33 pm
(@engeel2014)
Posts: 207
Reputable Member
 

Adaptei na sua planilha o código abaixo, vê se te atende. Planilha anexa:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    
Application.ScreenUpdating = False

If Sheets("Passo 1").Range("k1") = "OK" And Sheets("Passo 2").Range("O1") = "OK" And Sheets("Passo 3").Range("l1") = "OK" And Sheets("BRIEFING").Range("l1") = "OK" Then

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
Caminho & "exmplo" & ".pdf" _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=True

Else
MsgBox "Favor preencher todos os campos antes de proseguir com a geração do PDF"
End If

End Sub
Function Caminho() As String
Caminho = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "")
End Function
 
Postado : 28/07/2016 10:43 pm
(@felipebc)
Posts: 0
New Member
Topic starter
 

Certo Engeel2004, vou fazer o teste com essa planilha!

Você sabe a razão pela qual eu não estava conseguindo antes?

E como eu posso renomear o pdf de acordo com os valores contidos nas células, automaticamente?

Obrigado pela ajuga amigo!

 
Postado : 29/07/2016 7:01 am
(@engeel2014)
Posts: 207
Reputable Member
 

substitua o código da postagem anterior por este abaixo. neste a planilha será renomeada com o valor da célula "L2", caso queira é só mudar para célula desejada:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim nome As String

Application.ScreenUpdating = False

nome = Range("l2").Value   'Aqui voce coloca a célula onde está o nome da planilha

If Sheets("Passo 1").Range("k1") = "OK" And Sheets("Passo 2").Range("O1") = "OK" And Sheets("Passo 3").Range("l1") = "OK" And Sheets("BRIEFING").Range("l1") = "OK" Then

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
Caminho & nome & ".pdf" _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=True

Else
MsgBox "Favor preencher todos os campos antes de proseguir com a geração do PDF"
End If

End Sub
Function Caminho() As String
Caminho = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "")
End Function
 
Postado : 29/07/2016 8:58 am
(@felipebc)
Posts: 0
New Member
Topic starter
 

Deu tudo certo!

Muito obrigado amigo! Você me ajudou muito!

Abraço a todos e mais uma vez, muito obrigado!

 
Postado : 29/07/2016 9:46 am