Ir ao conteúdo

Midori

Membro Pleno
  • Posts

    3.601
  • Cadastrado em

  • Última visita

Tudo que Midori postou

  1. O especificador %s deve ser usado para strings e não para char como é o caso do seu código. A variável sexo foi declarada como char para receber um caractere, por isso você deve usar o especificador %c e não %s. Ao corrigir o especificador pode acontecer do programa "pular" algum scanf, para resolver isso você pode acrescentar outros em todas as entradas assim, scanf("%d%*c", &idade); scanf("%c%*c", &sexo); scanf("%f%*c", &salario); Nesta parte só tem que substituir aspas duplas por simples já que se trata de um char, então o correto é if(sexo == 'f' && salario <= 200). No teste das idades você iniciou essas variáveis com uma margem, mas nem sempre isso pode adiantar. Por isso você devia tentar encontrar uma forma de atribuir esses valores no loop. Uma forma é atribuindo o valor da entrada nas duas variáveis no primeiro loop p.ex, if(i == 1){ menor = idade; maior = idade; }else{ if(idade < menor){ menor = idade; } if(idade > maior){ maior = idade; } } Assim não precisa atribuir um valor qualquer no inicio do código para funcionar em qualquer tipo de exercício que pede isso.
  2. A fórmula com a inclusão da outra mensagem, =SE(E(ÉCÉL.VAZIA(B2:G2));"INVÁLIDO";SE(OU(ÉCÉL.VAZIA(B2:G2));"INCOMPLETO"; "Item - " & TEXTO(CONT.SES($A$1:A1;"<>INCOMPLETO";$A$1:A1;"<>INVÁLIDO");"00")))
  3. @Jeff_Sandes Na sintaxe que usou na função OnTime para pegar o argumento, use dois pontos e igual := em vez de só igual =. E a forma que está usando OnTime só vai agendar para chamar a outra macro uma vez às 12h. Pelo que comentou no outro tópico parece que quer atualizar a cada hora. Sobre o seu procedimento MACRO, se pretende acessar outras abas enquanto ele faz o copiar/colar, é melhor atribuir a planilha (não use Select) para evitar que o evento faça isso na aba errada. E onde esta X1PasteVelues devia ser xlPasteValues.
  4. Você pode criar um evento com OnTime para colar os dados como valor a cada hora. Veja se o meu primeiro comentário deste tópico ajuda no seu desenvolvimento, https://www.clubedohardware.com.br/forums/topic/1476404-excel-travando-ao-executar-macro-vba/#comment-7901601
  5. @MrDiniz Se fosse a cada 1000, bastaria usar a fórmula quociente, mas no seu exemplo tem valores intermediários como 2500. Então você pode dividir por mil e arredondar para cima, p.ex, =ARREDONDAR.PARA.CIMA(A1/1000;0) * X
  6. @rosanezane Fiz umas modificações no código, veja se assim gera os arquivos. Para alterar o diretório onde os arquivos serão salvos é só editar a atribuição da variável Diretorio. Sub CopiaFormulario() Dim Base As MailMergeDataSource Dim DocumentoFilial As Document Dim Diretorio As String Dim Filial As String Dim FilialAnterior As String Dim Conta As Long Diretorio = Environ("UserProfile") & "\Downloads\" Set Base = ThisDocument.MailMerge.DataSource If Base.DataFields.Count > 0 And Dir(Diretorio, vbDirectory) <> "" Then 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, Diretorio) End If Set DocumentoFilial = Documents.Add Else DocumentoFilial.Paragraphs.Add End If ThisDocument.Range.Copy DocumentoFilial.Range.Characters.Last.Paste DocumentoFilial.Range.ParagraphFormat.SpaceAfter = 0 DocumentoFilial.Range.ParagraphFormat.LineUnitAfter = 0 Base.ActiveRecord = wdNextRecord FilialAnterior = Filial Next Conta If Not DocumentoFilial Is Nothing Then Call SalvaPDF(FilialAnterior, DocumentoFilial, Diretorio) End If Else MsgBox "Erro ao configurar a base ou o diretório" End If End Sub Sub SalvaPDF(Nome As String, Documento As Document, Diretorio As String) Call Documento.ExportAsFixedFormat( _ OutputFileName:=Diretorio & Nome & ".pdf", _ ExportFormat:=wdExportFormatPDF) Call Documento.Close(SaveChanges:=False) End Sub
  7. @rosanezane Esse erro é porque o documento não está vinculado a base de dados/planilha. Falei sobre isso no post da macro.
  8. @Gustavo Feijo Se entendi o que quer fazer, é uma forma de gerar a declaração da matriz com os valores das células para colar no código fonte em C. Veja se é isto, com uma macro ou fórmula ficaria assim no formato texto pronto para copiar, int matriz[5][5] = { {2, 2, 2, 2, 2}, {2, 0, 0, 0, 0}, {2, 0, 0, 0, 0}, {2, 0, 0, 0, 0}, {2, 0, 0, 0, 0} }; Por ser um exemplo só considerei 5x5 das primeiras linhas/colunas.
  9. Cole em A2 e arraste, =SE(CONTAR.VAZIO(B2:G2)<>0;"INCOMPLETO"; "Item - " & TEXTO(CONT.SE($A$1:A1;"<>INCOMPLETO");"00"))
  10. Se quiser tentar com macro, cole o código no Módulo, Function ContaSequencia(Area As Range, ByVal Numero As Integer, ByVal Repete As Integer) As Long Dim Celula As Range Dim Conta As Long Dim Sequencia As Long For Each Celula In Area If Celula.Value = Numero Then Sequencia = Sequencia + 1 Else If Sequencia = Repete Then Conta = Conta + 1 End If Sequencia = 0 End If Next Celula ContaSequencia = Conta + IIf(Sequencia = Repete, 1, 0) End Function Aí poderá usar como uma fórmula, p.ex, =CONTASEQUENCIA(B2:B10001;8;3) Assim vai contar quantas vezes o número 8 aparece 3 vezes seguidas
  11. Isso pode ser feito com macro.
  12. @Teh Leonardo Testei seu último código e rodou normalmente sem erro.
  13. @Teh Leonardo O enunciado só diz para multiplicar um número aleatório pela raiz quadrada do outro. Cheguei a considerar que o outro devia ser aleatório também com randint, mas como isso não foi especificado como no primeiro caso entendo que é assim mesmo como fez nesse último código.
  14. @Teh Leonardo É como você fez nesse último código, aí está multiplicando um número pela raiz quadrada do outro.
  15. O enunciado só diz para gerar números aleatórios, entendi que o segundo também deve ser, então não precisa pedir a entrada com input. Para calcular a raiz quadrada tem a função math.sqrt.
  16. @beggarjs Para inverter o sinal você pode fazer como está na série, multiplicando a soma por -1 elevado ao contador. Ou pode multiplicar por uma variável iniciada com 1 e que inverte o sinal no loop, p.ex: variavel = -variavel.
  17. @beggarjs O fatorial deve ser só dos ímpares da sequencia e não do contador como fez. Para isso veja que a série tem 2n + 1 (n é o contador), o mesmo vale para o expoente do numerador. Além disso é preciso inverter o sinal na soma dos termos a cada loop.
  18. Se quer usar uma variável para definir o tamanho do vetor, a declaração do vetor deve aparecer depois, p.ex, int tamanho; cout << "Tamanho: "; cin >> tamanho; int idade[tamanho];
  19. @valbeezerra Cole a função no módulo e atribua o retorno dela a célula desejada, p.ex este é código completo, Sub Teste() Dim Vendedor As String Dim Numero As Range Set Numero = Range("D3") If IsNumeric(Numero) Then Vendedor = Plan1.ComboBox1.Value Range("F3") = Vendas(Vendedor, Numero.Value) End If End Sub Function Vendas(Vendedor As String, Conta As Long) As Double Dim ColunaVendedor As Range Set ColunaVendedor = ThisWorkbook.Sheets("Plan1").[A:A].Find( _ What:=Vendedor, LookIn:=xlValues, LookAt:=xlWhole) If Conta > 0 And Not ColunaVendedor Is Nothing Then Vendas = WorksheetFunction.SumIf( _ ColunaVendedor.Resize(Conta), Vendedor, _ ColunaVendedor.Offset(0, 1).Resize(Conta)) End If End Function
  20. @valbeezerra Assim é só passar o nome e a contagem para a função. O retorno será zero se não encontrar o nome ou a contagem for menor que 1. Function Vendas(Vendedor As String, Conta As Long) As Double Dim ColunaVendedor As Range Set ColunaVendedor = ThisWorkbook.Sheets("Plan1").[A:A].Find( _ What:=Vendedor, LookIn:=xlValues, LookAt:=xlWhole) If Conta > 0 And Not ColunaVendedor Is Nothing Then Vendas = WorksheetFunction.SumIf( _ ColunaVendedor.Resize(Conta), Vendedor, _ ColunaVendedor.Offset(0, 1).Resize(Conta)) End If End Function
  21. Veja se assim resolve, Sub MacroItens() Dim Plan2 As Worksheet Dim Codigo As Range Dim ContaItens As Integer Dim Linha As Long Set Codigo = ThisWorkbook.Sheets("Planilha1").[A2] Set Plan2 = ThisWorkbook.Sheets("Planilha2") Linha = 2 While Codigo <> "" If Codigo.Offset(0, 1) <> "" Then ContaItens = Codigo.End(xlToRight).Column - 2 If ContaItens > 0 Then Dim Colunas As Range Dim Itens As String For Each Colunas In Codigo.Offset(0, 2).Resize(1, ContaItens) Itens = Itens & Colunas & vbCrLf Next Colunas Plan2.Cells(Linha, 1) = Codigo Plan2.Cells(Linha, 2) = Codigo.Offset(0, 1) Plan2.Cells(Linha, 4) = Mid(Itens, 1, Len(Itens) - 1) Linha = Linha + 1 Itens = "" End If End If Set Codigo = Codigo.Offset(1) Wend End Sub
  22. Anexe o arquivo com a tabela dos itens.
  23. Com macro é possível fazer isso.
  24. Sem ver o código fica difícil saber exatamente como está fazendo para sugerir algo...
  25. O comando set serve para atribuir um objeto e esse não é o caso de Msgbox, então é só remover isso da atribuição ou não atribua nada se quer apenas mostrar a mensagem.

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!