Ir ao conteúdo

Midori

Membro Pleno
  • Posts

    3.601
  • Cadastrado em

  • Última visita

Tudo que Midori postou

  1. @GustavoT Com uma variável para a mensagem você trocar o texto na condição, p.ex, import random aleatorio = random.randint(1, 10) mensagem = 'Chute um número de 1 a 10: ' while True: chute = int(input(mensagem)) if aleatorio > chute: mensagem = 'chutou baixo\nTente outra vez: ' elif aleatorio < chute: mensagem = 'chutou alto\nTente outra vez: ' else: print('acertou') break
  2. @Guilherme Stoduto Você atribuiu a última linha da planilha Movimentações só uma vez, por isso sua macro sempre vai escrever nela. Então essa variável deve ser atualizada a medida que novos dados são acrescentados na planilha. Você pode fazer isso incrementando dentro do loop ult_linha1 = ult_linha1 + 1 ou movendo a atribuição que fez no início da Sub para o início do loop.
  3. @Guilherme Stoduto Seu código só escreve numa linha porque não está incrementando/atualizando a variável ult_linha1
  4. O script pode ser assim, Dim Dia Dia = Day(Now()) If Dia >= 9 And Dia <= 12 Then Dim Excel Set Excel = CreateObject("Excel.Application") Excel.Visible = True Call Excel.Workbooks.Open("C:\TESTE\Teste.xlsx") End If Para criar a tarefa, no menu iniciar escreva Agendador de Tarefas. Escolha a opção Criar Tarefa Básica e siga os passos.
  5. O vbscript já vem com o Windows. Para criar o script é só salvar o código com a extensão vbs.
  6. O VBA roda no ambiente do Office, então teria que abrir algum documento/planilha, etc para executar a macro. Se quer abrir um arquivo ao efetuar o login, uma alternativa é com script (vbscript) onde terá os procedimentos para abrir o documento nesses dias. Aí você pode criar uma tarefa no sistema em Agendador de Tarefas para rodar o script diariamente ao ligar o computador.
  7. Assim só vai mostar a mensagem no dia 20. Para testar esse intervalo a fórmula pode ter a função lógica E para verificar se o dia está entre 9 e 12. =SE(E(DIA($A$5)>=9;DIA($A$5)<=12); "Último dia para honrar seu compromisso!";"-")
  8. O chute e o número aleatório devem ser do mesmo tipo int. Seu loop não precisa ter um critério com a variável, é só deixar infinito (while True) para sair com break quando acertar, p.ex, if aleatorio > chute: print('chutou baixo') elif aleatorio < chute: print('chutou alto') else: print('acertou') break E para gerar um número entre 1 e 10 deve ser randint(1, 10)
  9. Para facilitar a resolução veja o aposento como um paralelepípedo e calcule a área pedida, É como @devair1010 comentou, são duas laterais e as opostas, então o cálculo é da área de 4 retângulos menos a porta.
  10. @Luciana Goes Se rodar o código passo a passo inspecionando as variáveis, verá que no evento da linha 6 o endereço de c será B11 e não B6. Isso por causa desta atribuição, Set c = Target.Cells(linha, 1) Target é a célula ativa e com Cells você pegar outro endereço deslocando a quantidade de linhas/colunas passada para a função. Na primeira linha não teve problema porque só passou linha = 1. Mas para a outra passou linha = 6 e assim atribuiu com o deslocamento para o endereço B11. Para resolver é só deixar Cells(1, 1) já que deve atribuir a primeira célula da mescla.
  11. @Gabrielle Cordeiro Como não há uma ordem que facilite a importação dos dados para a tabela, uma forma de pegar os dados é atribuindo cada campo. Fiz uma parte disso com cinco campos (veja os comentários da Sub Cadastra), você pode acrescentar os demais, Sub Atualiza() Dim Autorizacao As Worksheet Dim Pulverizacoes As Worksheet Set Autorizacao = Workbooks("exemplo 1.xlsx").Sheets("O.S") Set Pulverizacoes = Workbooks("exemplo 2.xlsx").Sheets("PULVERIZAÇÕES") If Pulverizacoes.[A7] = "" Then Call Cadastra(Autorizacao, Pulverizacoes.[A7]) Else Call Cadastra(Autorizacao, Pulverizacoes.[A6].End(xlDown).Offset(1)) End If End Sub Sub Cadastra(PlanAut As Worksheet, RefPulv As Range) RefPulv.Offset(0, 0) = PlanAut.[D6] 'Valvula RefPulv.Offset(0, 1) = PlanAut.[B6] 'Data RefPulv.Offset(0, 2) = PlanAut.[I11] 'Fase RefPulv.Offset(0, 3) = PlanAut.[A9] 'NC RefPulv.Offset(0, 4) = PlanAut.[B9] 'Produto End Sub As duas planilhas devem estar abertas. Considerei os nomes dos arquivos anexados, se for outro altere o nome no código. Veja que passo como argumento para a Sub Cadastra a última célula sem dado da coluna A como referência (a primeira linha da célula A que estiver em branco, a baixo de A6, vai receber os dados). A partir dela os dados serão colocados na tabela, p.ex, RefPulv.Offset(0, 4) = PlanAut.[B9] 'Produto Essa linha vai colocar na coluna E (deslocamento 4 a partir de A) da planilha Pulverizações o produto informado na célula B9 da planilha O.S
  12. @maroth Com o botão direito na tabela selecione Mostrar Valores Como > % do Total de Colunas. Assim p.ex o 2°A vai ficar com 33,33% Não e 66,67% Sim.
  13. @CARLOS A R SOUZA O código deve ter o critério que testa se a Categoria é Despesa ou Invest. E para resolver a questão de inverter o valor a cada execução, antes você pode verificar se o valor é positivo, p.ex, Sub Converte() Dim Categoria As Range Dim Valor As Range Set Categoria = [C2] While Categoria <> "" Set Valor = Categoria.Offset(0, 2) If Categoria = "Despesa" Or Categoria = "Invest" Then If Valor > 0 Then Valor = -Valor End If End If Set Categoria = Categoria.Offset(1) Wend End Sub
  14. A macro pode fazer um loop na tabela com os dados atualizados e buscar o ID com Find, p.ex, Sub AtualizaBD() Dim CelulaBD As Range Dim IDProduto As Range For Each IDProduto In [A2:A19] Set CelulaBD = [F8:F12].Find( _ What:=IDProduto, _ LookIn:=xlValues, _ LookAt:=xlWhole) If Not CelulaBD Is Nothing Then CelulaBD.Offset(0, 1) = IDProduto.Offset(0, 1) End If Next IDProduto End Sub
  15. No evento click do botão teste se os textbox foram preenchidos, aí é só passar esses dados para a planilha. Entendo que deve considerar um item preenchido quando tiver os três controles do mesmo grupo preenchidos. Para facilitar você pode padronizar o nome dos controles, p.ex, txtItem1, txtQtd1, txtValor1 txtItem2, txtQtd2, txtValor2 ... Assim poderá verificar o grupo com uma função, algo assim, Function ItemPreenchido(Item As Integer) As Boolean ItemPreenchido = _ Controls("txtItem" & Item) <> "" And _ Controls("txtQtd" & Item) <> "" And _ Controls("txtValor" & Item) <> "" End Function
  16. Isso pode ser feito com fórmula em outra coluna auxiliar, p.ex, =SE(OU(C2="Despesa";C2="Invest");-E2;E2)
  17. @Gabrielle Cordeiro Normalmente esse tipo de automação é feita com macro do próprio Excel. Para facilitar anexe a planilha ou um modelo semelhante dela e mostre um exemplo de como deve ficar alguns dados.
  18. A macro completa que salva em pdf e ajusta as linhas para evitar colocar dados de uma página em outra, A sub SalvaPDF está configurada para salvar os arquivos na pasta Downloads de User. Para rodar é preciso configurar a base de dados do Excel, pode ser selecionando a planilha no disco como comentei acima ou em Mailings > Select Recipients > Use a Existing List. Sub CopiaFormulario() Dim DocumentoFilial As Document Dim Base As MailMergeDataSource Dim Formulario As Range Dim Filial As String Dim FilialAnterior As String Dim Conta As Long Set Formulario = ThisDocument.Range Set Base = ThisDocument.MailMerge.DataSource Base.ActiveRecord = wdFirstRecord For Conta = 1 To Base.RecordCount Filial = Base.DataFields("FILIAL").Value If FilialAnterior <> Filial Then If Not DocumentoFilial Is Nothing Then Call SalvaPDF(FilialAnterior, DocumentoFilial) End If Documents.Add Set DocumentoFilial = ActiveDocument Else DocumentoFilial.Paragraphs.Add End If Formulario.Start = Formulario.GoTo(wdGoToPage, wdGoToAbsolute, , 1).Start Formulario.Copy DocumentoFilial.Range.Characters.Last.Paste With DocumentoFilial.Range.ParagraphFormat .SpaceAfter = 0 .LineUnitAfter = 0 End With Base.ActiveRecord = wdNextRecord FilialAnterior = Filial Next Conta If Not DocumentoFilial Is Nothing Then Call SalvaPDF(FilialAnterior, DocumentoFilial) End If End Sub Sub SalvaPDF(Nome As String, Documento As Document) Call Documento.ExportAsFixedFormat( _ OutputFileName:=Environ("UserProfile") & "\Downloads\" & _ Nome & ".pdf", _ ExportFormat:=wdExportFormatPDF) Call Documento.Close(SaveChanges:=False) End Sub
  19. Para dar esse erro o documento não deve estar vinculando. Tente fechar o arquivo e ao abrir deve dar esta opção, Escolha sim e procure a planilha. Sobre a questão de criar outra página, isso pode ser resolvido ajustando o espaçamento das linhas.
  20. @rosanezane Eu alterei o código que tinha postado. Sobre esse erro, o documento deve estar vinculado ao Excel. Quando corretamente configurado você verá a opção de selecionar os registros, p.ex,
  21. @rosanezane Para identificar o grupo de filiais, a macro pode ir selecionando os registros enquanto testa se o próximo é diferente do anterior. Para isso os dados da tabela do Excel devem estar ordenados por filial. Sub CopiaFormulario() Dim DocumentoFilial As Document Dim Base As MailMergeDataSource Dim Formulario As Range Dim Filial As String Dim FilialAnterior As String Dim Conta As Long Set Formulario = ThisDocument.Range Set Base = ThisDocument.MailMerge.DataSource Base.ActiveRecord = wdFirstRecord For Conta = 1 To Base.RecordCount Filial = Base.DataFields("FILIAL").Value If FilialAnterior <> Filial Then Documents.Add Set DocumentoFilial = ActiveDocument End If Formulario.Start = Formulario.GoTo(wdGoToPage, wdGoToAbsolute, , 1).Start Formulario.Copy DocumentoFilial.Range.Characters.Last.Paste Base.ActiveRecord = wdNextRecord FilialAnterior = Filial Next Conta End Sub Teste com poucos registros porque a macro vai criar um documento para cada filial. Para salvar cada um em pdf tente usar PrintOut.
  22. @Everton_souza Para preencher a matriz os loops devem estar aninhados. Use as variáveis (contadores) dos loops como indices da matriz para fazer a atribuição nas posições corretas, p.ex, Tela3[I, J] = X X = X + 1 Antes dessa atribuição você pode usar duas variáveis auxiliares para testar se está no intervalo correto de colunas. E a variável X deve ser iniciada com 8 antes de entrar no loop mais interno.
  23. @GENECIOFICIAL Para testar o nome da fórmula aplique a formatação com FÓRMULATEXTO, =SEERRO(FÓRMULATEXTO(A1)="=HOJE()";"")
  24. Não precisa usar colunas auxiliares, dá para fazer com uma fórmula, p.ex, ="CFSG22/30M"&TEXTO(LIN()-1;"000")&"/"&A2 Assim vai concatenar "CFSG22/30M" com o valor da linha formatada para 3 dígitos com o ID. Para impedir a alteração você pode proteger a planilha.
  25. @RAIMUNDO LIMA DE ARAUJO Pode ser com Delete, [Tabela].ListObject.DataBodyRange.Delete Antes de apagar é bom testar se a tabela tem algum dado (DataBodyRange) para não dar erro.

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!