Notifications
Clear all

Botão Imprimir executando macro

22 Posts
2 Usuários
0 Reactions
9,984 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa Tarde a todos
Tenho uma pasta com varias abas , como faço para quando clicar no botão imprimir , estando ativo uma determinada aba (por exemplo: Plan2) ser executado uma macro e logo após imprimir a Plan2.
Estando ativa outra aba que não a Plan2 execute a impressão da Plan ativa ,mas sem executar a macro

 
Postado : 16/03/2012 8:57 am
(@benzadeus)
Posts: 78
Trusted Member
 

Tenho duas ideias diferentes para resolver seu problema.

--- #1 ---

Quando clicar “arquivo imprimir” ou a lupa de visualização ou CTRL P , que execute o código ocultar_reexibir_anexo

Creio não ser possível, a não ser que você use um timer e mais rotinas API para obter o handle do backstage: http://social.msdn.microsoft.com/Forums ... 7058787e4/
No entanto, acho que o trabalho não vale a pena e você complicaria à toa seu projeto.

desabilitar somente nesta pasta de trabalho a função “arquivo imprimir” a lupinha de visualização e CTRL P

Desabilitar o Ctrl+P você já sabe, certo?
Para desabilitar a função arquivo imprimir, você deverá editar o XML do ribbon da sua Pasta de Trabalho. O código utilizado será algo como:

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
  <backstage>
    <tab idMso="TabPrint" visible="false"/>
  </backstage>
</customUI>

Note que o código acima ocultará somente o botão Imprimir do Excel 2010 (no customUI14.xml). Você deverá fazer o mesmo para o Excel 2007, no arquivo customUI.xml. Não tenho como testar agora, mas acho que ficaria assim:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <ribbon>
    <officeMenu>
      <button idMso="FilePrint" visible="false"/>
    </officeMenu>
  </ribbon>
</customUI>

Para personalizar ribbons, é obrigatório que você entenda o conteúdo desta página: http://www.ambienteoffice.com.br/office ... e_ribbons/

--- #2 ---
Num módulo comum, cole o código:

Public g_bImpressão As Boolean

Sub BotãoImprimir()
    g_bImpressão = True
     'A linha de código abaixo irá disparar o evento Workbook_BeforePrint
    ActiveSheet.PrintOut
    
    'Aqui vai a macro que irá alterar Plan2 após ela ter sido impressa.
End Sub

Na classe da Pasta de Trabalho, cole o código abaixo:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    With Sheets("Plan2")
        If ActiveSheet.Name = .Name Then
            Cancel = Not g_bImpressão
            g_bImpressão = False
            If Cancel Then
                MsgBox "Utilize o botão 'Imprimir' para imprimir esta Planilha. " & _
                  "Nenhuma outra forma de impressão é permitida."
            Else
                'Aqui vai a macro que irá alterar Plan2 antes de ser impressa
        End If
    End With
End Sub
 
Postado : 29/06/2012 7:45 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Só entendi apartir do --- #2 --- ,
se puder me add [email protected] ; vou tentando adaptar aqui apartir do --- #2 --- .

 
Postado : 29/06/2012 8:05 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Se entendi direito esse tal de ribon é criar um botão personalizado na barra de ferramenta? é como no excel 2003 a barra personalizada? esse ribon fica só no meu computador ou acompanha a planilha ? Gostei disso , vou tentar aprender.

P.S- ah quanto a: "Desabilitar o Ctrl+P você já sabe, certo?" ; ERRADO , não sei não.

 
Postado : 29/06/2012 8:17 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

--- #2 ---
Num módulo comum, cole o código:

Public g_bImpressão As Boolean

Sub BotãoImprimir()
    g_bImpressão = True
     'A linha de código abaixo irá disparar o evento Workbook_BeforePrint
    ActiveSheet.PrintOut
    
    'Aqui vai a macro que irá alterar Plan2 após ela ter sido impressa.

1- Apos impressa não sofrerá nenhuma alteração
2- O nome da planilha não é Plan2 , é uma planilha que será criada pelo usuário e com nome dado pelo usuario (o nome sempre será iniciado pela palavra Faixa_ )

Na classe da Pasta de Trabalho, cole o código abaixo:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    With Sheets("Plan2")
        If ActiveSheet.Name = .Name Then
            Cancel = Not g_bImpressão
            g_bImpressão = False
            If Cancel Then
                MsgBox "Utilize o botão 'Imprimir' para imprimir esta Planilha. " & _
                  "Nenhuma outra forma de impressão é permitida."
            Else
                'Aqui vai a macro que irá alterar Plan2 antes de ser impressa
        End If
    End With
End Sub

1- O nome da planilha não é Plan2 , é uma planilha que será criada pelo usuário e com nome dado pelo usuario. (o nome sempre será iniciado pela palavra Faixa_ )
2- A Plan2(Faixa) e a Plan5(BDAlimentadores) nunca serão impressas, sempre ficam ocultas.
3- Nesta pasta tem 3 outras planilhas ,Plan1(RESUMO),Plan3(ASD),Plan4(Produtividade) ,onde não é possivel usar a macro que irá alterar Plan antes de ser impressa(a macro faz a exibição de linhas ocultas , que nestas 3 não podem ser reexibidas)
4- As Plans que usarão este código sempre serão apartir da Plan5 e sempre iniciadas pelo nome Faixa_

Espero ter sido mais explicativo do que complicativo

Segue anexo a planilha para melhor entendimento , ela é protegida porem sem senha.

Antecipadamente grato.

 
Postado : 29/06/2012 8:54 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Desculpe a falha, arquivo anexo

 
Postado : 30/06/2012 11:08 pm
(@benzadeus)
Posts: 78
Trusted Member
 

Se entendi direito esse tal de ribon é criar um botão personalizado na barra de ferramenta? é como no excel 2003 a barra personalizada?

Não. Leia a página do link que te mandei. Leia também o outro link que detalha que os ribbons que aparecem no Excel 2007, para uma mesma Pasta de Trabalho, podem ser diferentes no Excel 2010.
Se, além disso, você usa o Excel 2003, terá que escrever um código adicional para desativar o comando Imprimir do menu Arquivo.

esse ribon fica só no meu computador ou acompanha a planilha ?

A personalização do ribbon acompanha a Pasta de Trabalho. Vale lembrar que ribbons existem a partir do Excel 2007.

se puder me add [email protected] ; vou tentando adaptar aqui apartir do --- #2 --- .

O objetivo do fórum é todos participarem de um tópico.

"Desabilitar o Ctrl+P você já sabe, certo?" ; ERRADO , não sei não.

Cole o código abaixo na classe EstaPasta_de_trabalho:

Private Sub Workbook_Open()
     Application.OnKey "^p", ""
End Sub

---

Espero ter sido mais explicativo do que complicativo

Não estou entendendo mais nada. Agora a tal da Plan2, que não é mais Plan2, pode ser Faixa*, que até então poderia ser impressa mediante o clique num botão, nunca mais é impressa?

Abaixo mostro mais um código, que tenho certeza que se você estudá-lo, será capaz de adaptar para sua necessidade. Mantenha o código da minha postagem da rotina BotãoImprimir e altere o código da classe EstaPasta_de_trabalho como abaixo.

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Dim Cancel
    Dim sNome As String
              
    sNome = ActiveSheet.Name
               
    Select Case True
        Case sNome Like "Faixa*"
            'Se o nome da Planilha for Faixa1, Faixa2, etc, a rotina desviará para esta linha.
            Cancel = Not g_bImpressão
            g_bImpressão = False
             
            If Cancel Then
                MsgBox "Utilize o botão 'Imprimir' para imprimir esta Planilha. " & _
                  "Nenhuma outra forma de impressão é permitida."
            Else
                'Aqui vai a macro que irá alterar Faixa* antes de ser impressa.
            End If
        
        Case sNome = "RESUMO", sNome = "ASD", sNome = "Produtividade"
            'Aqui vai código para tratar essas Planilhas antes de imprimir.
            '... código ...
        
        Case Else
            'Caso o nome da Planilha não seja nenhuma das acima, o código desviará para cá.
            MsgBox "Não é possível imprimir essa Planilha!"
                Cancel = True
    End Select
End Sub

Esta rotina verifica o nome da Planilha ativa no momento em que se dá o comando de imprimir e então dá uma tratativa específica, caso a caso. Execute a rotina com a tecla F8, estude o código e adapte. Tenho certeza que você irá conseguir.

 
Postado : 01/07/2012 1:22 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

TÓPICO RESOLVIDISSIMO
MUITO OBRIGADO , nem precisou desativar o CTRL+P , ficou assim:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Dim sNome As String
    Dim rng As Range
        Set rng = Range("A55:A96")
    sNome = ActiveSheet.Name
    Select Case True
        Case sNome Like "Faixa*"
        
     If rng.EntireRow.Hidden = True Then
            Cancel = Not g_bImpressão
            g_bImpressão = False
            
            If Cancel Then
            Reexibir_Anexo 'CÓDIGO QUE QUERIA RODAR ANTES DA IMPRESSÃO
            Cancel = False
            End If
            Exit Sub
            
            Else
            End If
        Case sNome = "RESUMO", sNome = "ASD", sNome = "Produtividade"
        Case Else
           MsgBox "Desculpe , esta planilha não pode ser impressa" & Chr(13) & Chr(13) & "Para esclarecimentos claudineicemig@hotmail.com."
                Cancel = True
    End Select
    End Sub

Mais uma vez muito obrigado , alem de tudo agora to aficcionado no tal do ribbon.

 
Postado : 01/07/2012 5:32 pm
Página 2 / 2