Ir ao conteúdo
  • Cadastre-se

Nilton Cézar

Membro Pleno
  • Posts

    103
  • Cadastrado em

  • Última visita

  1. Olá, pessoal. Gostaria de montar um código para copiar 2 células. Ou seja, eu copio o valor de uma célula com a macro. Logo após, copio a outra célula com a macro, após a seleção automática desta última célula. Não é para copiar as duas simultaneamente. Consegui um código de copiar e montei o comando da seguinte forma: Sub CopiarCelulaSelecionada() 'Condição com a seleção de G28. If [G28].Select Then 'A estrutura [G28] é o mesmo que Range("G28"). 'Copia o conteúdo da célula ativa para a área de transferência ActiveCell.Copy 'Comando para selecionar automaticamente a célula anterior à escolhida. ActiveCell.Offset(-1, 0).Select 'Copia o conteúdo da célula ativa para a área de transferência ActiveCell.Copy 'Condição com a seleção de G27. ElseIf [G27].Select Then 'Copia o conteúdo da célula ativa para a área de transferência ActiveCell.Copy 'Comando para selecionar automaticamente a célula posterior à escolhida. ActiveCell.Offset(1, 0).Select 'Copia o conteúdo da célula ativa para a área de transferência ActiveCell.Copy End If End Sub Detalhe: o código acima é apenas para copiar. Não é para copiar e colar. O meu propósito é executar desta maneira: Eu seleciono o valor da célula em G8 e copio com a macro. Depois colo em outro lugar. Na sequência, o código seleciona automaticamente a célula anterior (G27). Logo em seguida, eu volto a copiar a célula G27 com a macro e colo o valor em um lugar qualquer. Mas, se eu começar a selecionar o valor que está em G27, a rotina tem que ser semelhante à execução acima. Assim, eu seleciono o valor que está em G27 e copio com a macro. Após, o código seleciona automaticamente a célula seguinte (G28). Eu volto a copiar os dados da célula selecionada para colar em outro lugar. O problema é que, quando eu seleciono primeiro G28, o comando está pulando para a célula anterior (G27) e copiando o valor que está nessa célula sem antes copiar os dados em G28. De outro lado, o comando não está funcionando como esperado, quando começo a seleção por G27. Alguém poderia ajudar na lógica desse código para que ele funcione conforme o propósito acima explicado. Ficaria grato.
  2. Entendi. Verdade. Midori, então, na dúvida, posso deixar antes de todas as linhas de códigos da macro?
  3. Pessoal, estou com uma simples dúvida sobre a posição do código On Error Resume Next na macro. A minha dúvida é: o código de erro acima fica antes de uma variável (DIM) qualquer, como na figura abaixo? Ou o código em questão deve ficar após uma variável, como na figura a seguir? Desde já, agradeço pelas explicações.
  4. Olá, Midori. Obrigado pelas macros. Fiz os testes com elas. Se necessário, farei algumas adaptações. Mais uma vez, agradeço pela ajuda.
  5. Olá, Midori. Midori, acho que não é necessário um evento SelectionChange para a segunda macro solicitada. Aredito que uma simples condição IF resolveria. Tipo assim: Sub teste If xxx Then código1 Else xxx Then código2 End If Lembrando que a rotina para esse comando seria: A propósito, Midori, sobre o evento SelectionChange enviado, é possível também elaborar uma condição IF em substituição a ele? Ou seja, é possível transformar esse evento em uma macro do tipo Sub? Caso seja possível, como ficaria? É que, com o SelectionChange, sempre que a célula é selecionada, ativa a macro. E isso pode ocorrer seguidas vezes sempre que a célula C4 for selecionada acidentalmente ou em razão da execução de outra macro, o que pode ser bastante inconveniente. Além disso, testei o evento Change acima, mas ele está selecionando sempre a célula C9, mesmo com C4 selecionada, o que não era o esperado. Agradeço, mais uma vez, pela ajuda, Midori.
  6. Olá, pessoal. Gosto muito de VBA, mas infelizmente não tenho conhecimento de elaboração de macros. Desejaria duas condições IF, para incluir em duas macros separadamente. Mas, é algo bem simples. Vejamos. a) Uma delas funcionaria assim: Se a célula C4 NÃO estiver selecionada, então selecione C9 Se C4 estiver selecionada, então não faz nada. b) A outra seria desta forma: Se a célula C4 estiver descrito “nº no cabeçalho”, então execute o código 1 Se C4 NÃO estiver descrito “nº no cabeçalho”, então execute o código 2 Como eu disse, são duas condições bem simples. Desde já, agradeço pela ajuda.
  7. Apenas para concluirmos o tópico. Midori, pelo que entendi, não é possível criar uma nova macro nos moldes solicitados. Você realmente já havia explicado isso lá em cima. De todo modo, consigo exportar os cálculos para PDF com uma certa automação, após clicar em “Fechar Visualização de Impressão”. Somente após isso, a planilha gera automaticamente o PDF do cálculo. Assim, agradeço às pacientes explicações e às excelentes informações. Mais uma vez, obrigado Midori.
  8. Midori, pelo que observei, a linha ActiveSheet.PrintOut é que permite abrir um programa de impressão antes de imprimir, como, por exemplo, o PDF Redirect, acima mostrado. O problema é criar uma nova macro que mantenha o padrão da macro original, devido às características da planilha, que "encolhe" e "estica", buscando acelerar ao máximo o procedimento de exportação de PDF's de cálculos. Se for possível, nos moldes acima, excelente! Tem alguma ideia para possamos testar?
  9. Midori, desde que a nova macro se baseie na macro original pelas razões explicadas acima. Quanto a mostrar a janela de impressão, desde que seja esta: Porque por esta eu posso configurar manualmente, inclusive renomeando o nome do PDF. Isso realmente é interessante para o caso de eu fazer alguns ajustes na impressão. Na verdade, a janela que eu não gostaria que aparecesse era esta: Lembrando que essa janela está presente na macro que eu havia alterado. A macro é interrompida até que essa janela seja fechada. Isso é o inconveniente que eu queria evitar com uma nova macro. Assim, Midori, se for possível construir uma NOVA macro, baseada na macro original então citada, para exportar o cálculo para PDF (com a apresentação da janela de impressão), seria justamente o que eu espero para acelerar o procedimento de geração de PDF's de cálculos. Se der certo, ótimo! Se não, não têm problemas! Da forma como está, dá para imprimir os cálculos. Como eu disse, gostaria apenas de automatizar ao máximo essa operação.
  10. Midori, continuo analisando de que forma podemos aperfeiçoar a macro acima mencionada. Penso que é possível melhorá-la. Tudo bem. Eu entendi que, da modo como a macro original foi alterada, ela não pode executar a rotina diretamente. É necessário clicar em “Fechar Visualização de Impressão”, como você bem explicou acima. Então, vejamos. Para melhor compreender a macro original e as alterações que fiz, seguem os códigos abaixo, presentes na planilha, já anexada a este tópico. MACRO ORIGINAL (presente no UserForm1: Private Sub CommandButton1_Click) Private Sub CommandButton1_Click() ' Unload Me Sheets("Resumo").PrintPreview Sheets("Sentença Comum").Select Range("M20").Select Selection.AutoFilter Field:=1, Criteria1:="1" ActiveWindow.SelectedSheets.PrintPreview Sheets("Normal").Select Sheets("Normal").Range("C15").FormulaR1C1 = "0%" Sheets("Normal").Range("E15").FormulaR1C1 = "0%" ' End Sub ALTERAÇÕES FEITAS NA MACRO ACIMA (módulo 3): Sub CEZAR_CálculoSentençaAtualizando() 'As linhas de códigos abaixo geram um efeito atualizador, nos cálculos, para, só então, calcular e imprimir os reais valores. 'Isso porque a macro inicialmente não estava apurando os valores atuais. Ou seja, imprimia os valores do cálculo anterior. 'Esse fato não ocorreu nos cálculos de acordo. 'O código abaixo chama a janela de "Visualização de Impressão" da planilha Sentença Comum, que depois deve ser fechada. Em seguida, os cálculos corretos são impressos automaticamente. 'A) CÓDIGOS COM EFEITO ATUALIZADOR DOS CÁLCULOS: 'Inicialmente anulei as linhas de comando abaixo, do código original de impressão do cálculo. 'Private Sub CommandButton1_Click() ' 'Unload Me 'Sheets("Resumo").PrintPreview Sheets("Sentença Comum").Select Range("M20").Select Selection.AutoFilter Field:=1, Criteria1:="1" ActiveWindow.SelectedSheets.PrintPreview 'Sheets("Normal").Select 'Sheets("Normal").Range("C15").FormulaR1C1 = "0%" 'Sheets("Normal").Range("E15").FormulaR1C1 = "0%" 'Os códigos de atualização terminam aqui. 'B) IMPRESSÃO DOS VALORES ATUALIZADOS: 'A seguir, seguem os comandos responsáveis por imprimir o cálculo atualizado. 'Inicialmente anulei as linhas de comando abaixo, do código original de impressão do cálculo. 'Private Sub CommandButton1_Click() ' 'Unload Me '1ª PARTE - IMPRESSÃO DA PLANILHA RESUMO: 'Na sequência, inclui o código de seleção da planilha RESUMO. Sheets("Resumo").Select 'Depois anulei o código abaixo. 'Sheets("Resumo").PrintPreview 'Em seguida, inclui o código abaixo para exportar para PDF a planilha atual (RESUMO). ActiveSheet.PrintOut '2ª PARTE - IMPRESSÃO DA PLANILHA SENTENÇA COMUM: 'Linha de código original. Seleção da planilha Sentença Comum. Sheets("Sentença Comum").Select 'Novamente inclui o código abaixo para exportar para PDF a planilha atual (SENTENÇA COMUM). ActiveSheet.PrintOut 'A sequência abaixo é do código original (ficou mantida). Range("M20").Select Selection.AutoFilter Field:=1, Criteria1:="1" 'Anulei a linha de código abaixo, por ser semelhante ao código ActiveSheet.PrintOut. 'ActiveWindow.SelectedSheets.PrintPreview Sheets("Normal").Select 'Sheets("Normal").Range("C15").FormulaR1C1 = "0%" 'Sheets("Normal").Range("E15").FormulaR1C1 = "0%" End Sub Veja que inseri algumas explicações referentes às modificações feitas na macro original. Perceba também que a parte A da macro acima, introduzida pelo título 'A) CÓDIGOS COM EFEITO ATUALIZADOR DOS CÁLCULOS:, contêm algumas linhas de comando que realiza uma espécie de efeito atualizador no cálculo, cujas razões explico na própria macro. Se não fosse esse efeito atualizador, o PDF do cálculo ficaria sempre desta forma. A todo momento deixando esses espaços sem valores, provenientes da cálculo anterior. Veja: Na parte B do código alterado, divida em 1ª PARTE e 2ª PARTE, seguem os comandos responsáveis por imprimir em PDF duas planilhas, presentes nas guias "Resumo" e "Sentença Comum". Midori, Acho que o mais importante na seção B da macro é que anulei a linha 'Sheets("Resumo").PrintPreview e inclui ActiveSheet.PrintOut, para exportar para PDF a planilha "Resumo". Da mesma forma, anulei 'ActiveWindow.SelectedSheets.PrintPreview, para incluir ActiveSheet.PrintOut, a fim de gerar o PDF da guia "Sentença Comum". A propósito, não gostaria de salvar diretamente o PDF para alguma pasta do computador. Pelo que observei, a linha ActiveSheet.PrintOut é que permite abrir um programa de impressão antes de imprimir (mas não é aquela janela motivo de minha queixa inicialmente e que tem que ser fechada para a macro continuar!). Isso é interessante para o caso de fazer alguns ajustes na impressão. Apenas a título de informação (não sei se é útil!), eu uso o programa PDF reDirect para fundir as duas planilhas cima referidas em um só arquivo de PDF e, algumas vezes, eu preciso editar o nome do arquivo. Essa é a janela a que me referi no parágrafo anterior. Veja: Mais uma vez lembrando, eu já anexei o arquivo da planilha em post anterior, para o caso de consulta. Caso seja necessário, outros detalhes sobre as macros em questão e o funcionamento da planilha eu também detalho anteriormente, ao logo deste tópico. Pois bem, Midori, é possível construir uma NOVA macro, baseada na macro original então citada, para exportar o cálculo para PDF (com a apresentação da janela de impressão)? Só um detalhe, Midori: é preciso preservar a essência da macro original, pois ela foi criada para atuar numa planilha que "encolhe" e "estica", conforme o número de meses considerados no cálculo. Apenas fazendo um último registro: não confundir com a solicitação anterior. Naquela ocasião, eu desejava apenas eliminar a tela de “Fechar Visualização de Impressão”, mantendo a mesma macro alterada. O texto ficou bem extenso, mas acho que não é de leitura cansativa. Acredito que as explicações eram necessárias. Desde já, agradeço mais uma vez pela ajuda, Midori.
  11. Faz sentido. Midori, trata-se de uma macro em que eu fiz esse ajuste (não achei opção melhor para o meu propósito!). Isso porque a macro, após a alteração feita, inicialmente não estava apurando os valores do cálculo atual. Ou seja, imprimia os valores do cálculo anterior. Então, esse fechamento funciona como uma espécie de atualização, para calcular os valores do novo período de cálculo. Acredito que a macro original, elaborada inicialmente para executar a apuração de períodos variáveis, ou seja, quanto maior o número de meses, maior será a planilha exportada para PDF, tem suas peculiaridades, por isso essa foi a melhor solução que eu encontrei para obter o cálculo do período pretendido. De qualquer forma, você me repassou uma solução, Midori: a solução é que esse tipo de operação não é possível automatizar. Mais uma vez, obrigado Midori.
  12. Pessoal, para deixar mais claro minha solicitação, vou explicar melhor. Em anexo, segue uma planilha de cálculo. Nela inseri algumas macros para agilizar o trabalho de realizar cálculos. Uma das macros está vinculada ao botão SENTENÇA (em azul). Ela é responsável por criar um atalho de impressão de cálculos, após uns ajustes feitos na macro original. Pois bem, quando clico no botão SENTENÇA, aparece a janela Visualização de Impressão. Assim, para que a planilha apure o cálculo atualizado, é necessário fechar manualmente essa janela, clicando em “Fechar Visualização de Impressão”. Somente após isso, a planilha gera automaticamente o PDF do cálculo. Mas, eu gostaria justamente de acelerar essa operação. De que forma? Ao clicar no botão SENTENÇA, a planilha exportar o cálculo para PDF diretamente, sem a necessidade de clicar manualmente em “Fechar Visualização de Impressão”. Para isso, gostaria de saber se é possível adicionar um código na macro acima exatamente para fechar automaticamente essa tela de Visualização de Impressão, a fim de conseguir essa automação. Caso não seja viável, eu me contentaria com uma simples resposta informando que esse tipo de operação não é possível automatizar. Espero ter sido claro. Desde já, agradeço pela ajuda. Planilha Implantação Benefício Mínimo (74)-Melhoramento (7) - TESTE.rar
  13. Olá, pessoal. Sub Visualiza_Impressao() 'Define área de impressão ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1), Cells(46, 7)).Address 'Chama a tela de visualização de impressão Application.Dialogs(xlDialogPrintPreview).Show End Sub Consegui essa macro na internet, mas, na verdade, gostaria de um comando exatamente para fechar essa tela de visualização de impressão. É que pretendo aplicar em outra macro para conseguir uma execução específica. Procurei bastante na internet, mas não encontrei esse comando. Também não consegui criar com o gravador de macro. Ficaria grato quem puder me ajudar.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...