Notifications
Clear all

Print Check List

6 Posts
4 Usuários
0 Reactions
1,490 Visualizações
(@shroeder)
Posts: 0
New Member
Topic starter
 

Boas,

Vou criar uma planilha com várias folhas e nem sempre vou precisar imprimir todas elas.

Pensei em criar uma check list para imprimir apenas os selecionados, mas não sei se é possível.

Em anexo, está um exemplo do que pretendia.

Obrigado pela ajuda.

Cumprimentos,

 
Postado : 19/09/2016 10:17 am
(@mprudencio)
Posts: 0
New Member
 

Se sao apenas as 3 e so selecionar as abas que deseja imprimir precionando ctrl e imprimir em seguida nao precisa de vba pra isso.

 
Postado : 19/09/2016 11:13 am
(@shroeder)
Posts: 0
New Member
Topic starter
 

A planilha final terá mais de 100 abas. Só estou a pensar primeiro como vou estruturar para ser mais fácil a impressão dos vários relatórios.

Obrigado

 
Postado : 20/09/2016 12:19 am
(@shroeder)
Posts: 0
New Member
Topic starter
 

Usei um UserForm e resolvi com o seguinte código:

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
If Me.cbSh1 = True Then
ThisWorkbook.Sheets("Folha2").PrintOut copies:=1
End If
If Me.cbSh2 = True Then
ThisWorkbook.Sheets("Folha3").PrintOut copies:=1
End If
If Me.cbSh3 = True Then
ThisWorkbook.Sheets("Folha4").PrintOut copies:=1
End If
Unload Me
Application.ScreenUpdating = True

End Sub

Agora estou a tentar fazer o mesmo com a possibilidade de guardar em PDF, mas não estou a conseguir guardar apenas as abas selecionadas no userform. A formula a baixo, selecionada todas as abas da planilha.

Private Sub CommandButton2_Click()

Application.ScreenUpdating = False

Sheets("Folha1").Select

ThisWorkbook.Sheets.Select

Dim vPDFPath As Variant

Do

bRestart = False
vPDFPath = Application.GetSaveAsFilename(, "PDF Files (*.pdf), *.pdf")
If CStr(vPDFPath) = "False" Then
Exit Sub
Else
lAppSep = InStrRev(vPDFPath, Application.PathSeparator)
End If

If UCase(Dir(vPDFPath)) = UCase(Right(vPDFPath, Len(vPDFPath) - lAppSep)) Then
Select Case MsgBox("O arquivo já existe. Deseja substituí-lo?", _
vbYesNoCancel, "ATENÇÃO!")
Case vbYes
Kill vPDFPath
Case vbNo
bRestart = True
Case vbCancel
Sheets("Folha1").Select
Exit Sub
End Select
End If
Loop Until bRestart = False
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=vPDFPath, _
OpenAfterPublish:=True

Sheets("Folha1").Select

MsgBox "Ficheiro Criado com Sucesso"

End Sub

O problema está em "ThisWorkbook.Sheets.Select" mas não estou a conseguir resolver. Se colocar uma condição por cada folha, vai fazer um pdf por cada também, e o que eu quero é um único pdf.

Obrigado.

 
Postado : 20/09/2016 3:55 am
(@edsonbr)
Posts: 0
New Member
 

Boa tarde, Shroeder.

Pelo que entendi, sua principal dificuldade parece estar em criar ou selecionar dinamicamente um subset/array com as planilhas (folhas) que vc deseja imprimir, estou certo?

Se for isso, o que vc acha da ideia de seu form fazer uma carga dinâmica do nome de cada sheet de seu workbook juntamente com uma checkbox ao lado de cada uma, onde vc poderá marcar as que serão impressas e então, ao clicar num botão ("Imprimir Selecionadas") o código cria um grupo (coleção) com as que foram selecionadas.

À partir daí vc poderá imprimir (PrintOut) ou exportar para arquivo. Essa parte do "abacaxi" deixo prá vc descascar, pois não tenho como testar aqui o salvamento em PDF por hora ou testar a existencia ou não de arquivos com o mesmo nome já salvos, etc.

Se te servir, veja se consegue continuar o código do ponto de Stop em diante, ok? Estou anexando o mesmo arquivo que vc enviou, só que inseri um form bem simplório que vc deverá dar melhor acabamento.
O código do UserForm e do botão seriam esses:

Option Explicit
Option Base 1
Private Sub UserForm_Initialize()
  Dim sh As Worksheet, lbl As MSForms.Label, cb As MSForms.CheckBox
  Dim posVert As Integer
  For Each sh In ThisWorkbook.Sheets
    posVert = posVert + 15
    Set cb = Me.Controls.Add("Forms.CheckBox.1", Name:="cbToPrint" & sh.Name)
      cb.Top = posVert: cb.Left = 10
    Set lbl = Me.Controls.Add("Forms.Label.1", Name:="lblToPrint" & sh.Name)
      lbl.Top = posVert + 3: lbl.Left = 30
      lbl.Caption = sh.Name: lbl.AutoSize = True
  Next sh
End Sub
Private Sub CommandButton1_Click()
   Dim shToPrint As Sheets, ctl As MSForms.Control
   Dim shToPrintArrNome() As String, i As Integer
   For Each ctl In Me.Controls
     If TypeOf ctl Is MSForms.CheckBox Then
        If VBA.Left(ctl.Name, 9) = "cbToPrint" And ctl.Value = True Then
          i = i + 1
          ReDim Preserve shToPrintArrNome(1 To i)
          shToPrintArrNome(i) = VBA.Right(ctl.Name, Len(ctl.Name) - 9)
        End If
     End If
   Next ctl
   If i > 0 Then
   '=======================================================================
     'Use essa coleção/array de planilhas abaixo para imprimir/salvar.
     '(adapte à partir daqui a parte que verifica se arquivo já existe, etc.
     'Não esqueça de remover o Stop
     
     Set shToPrint = Sheets(shToPrintArrNome)
     Stop
     'Exemplo: shToPrint.PrintOut ....
   '=======================================================================
   End If
End Sub

Atte., Edson

 
Postado : 20/09/2016 10:40 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Shroeder, dividi seu tópico por entender se tratarem de assuntos diferentes, um é para Imprimir e outro para salvar como PDF, assim deixamos o forum mais organizado, quando tratar de questões diferentes procure sempre abrir tópicos separados.

Quanto a salvar em PDF veja as resposta no novo tópico que criei :
Salvar várias Sheets em um só arquivo PDF
viewtopic.php?f=10&t=21927&p=110887#p110887

[]s

 
Postado : 20/09/2016 5:08 pm