Ir ao conteúdo

Midori

Membro Pleno
  • Posts

    3.601
  • Cadastrado em

  • Última visita

Tudo que Midori postou

  1. @Deltaprimo Se o seu Excel for em português a fórmula deve ser SE em vez de IF.
  2. @Martti Algumas células estão mescladas, a macro vai remover a mescla e copiar os dados para outra aba. Crie uma aba com o nome Tabela e execute a macro de teste. Se trazer os dados no formato certo execute a última. Sub Teste() Call CopiaRelatorio( _ ThisWorkbook.Sheets("Table 1"), _ ThisWorkbook.Sheets("Tabela")) End Sub Sub CopiaRelatorio(Origem As Worksheet, Destino As Worksheet) Dim LinAba As Long Dim LinTbl As Long Dim Colunas As Integer Dim Bairro As String Colunas = Origem.UsedRange.Columns.Count Origem.Columns(1).Resize(, Colunas).MergeCells = False For LinAba = 1 To Origem.UsedRange.Rows.Count If Origem.Cells(LinAba, "A").Font.Bold = True Then Bairro = Origem.Cells(LinAba, "A") Else LinTbl = Destino.[A1].CurrentRegion.Rows.Count + 1 Destino.Cells(LinTbl, "A") = Bairro Destino.Cells(LinTbl, "B").Resize(, Colunas - 1).Value = _ Origem.Cells(LinAba, "A").Resize(, Colunas).Value End If Next LinAba End Sub Sub JuntarRelatorios() Dim Destino As Worksheet Dim Aba As Worksheet Set Destino = ThisWorkbook.Sheets("Tabela") For Each Aba In ThisWorkbook.Worksheets If Aba.Name <> Destino.Name Then Call CopiaRelatorio(Aba, Destino) End If Next Aba End Sub
  3. @Deltaprimo Sua fórmula pode ter o critério para não calcular caso não tenha data, p.ex, =IF(B8="";"";B8-$F$8) Cole em D8 e arraste.
  4. @Fabiano Leo É só atribuir o valor negativo da própria célula: Cel.Value = -Cel.Value.
  5. @UmAmigo Essa lista vem junto com a pesquisa no site? Se vier a macro deve importar também.
  6. @levi feirreira Activate é uma função, membro de Range. Com TypeName verá que é do tipo Boolean, p.ex, MsgBox TypeName([A1].Activate) Por isso ela não deve fazer parte da atribuição de Procura que é uma variável do tipo Range. É diferente de Find que é um objeto Range e Procura recebe o retorno dela que pode ser Range ou Nothing. Caso o retorno de Find seja diferente de Nothing você pode usar qualquer membro de Range como o Activate, p.ex, Call Procura.Activate
  7. @levi feirreira Remova o .Activate da atribuição.
  8. @UmAmigo Veja se assim resolve. Entre com o CNPJ em A1 e execute a macro. Sub Executar() Call ImportaMinhaReceita([A1].Value) End Sub Sub ImportaMinhaReceita(CNPJ As String) Dim PlanConsulta As Worksheet On Error Resume Next ThisWorkbook.Queries("ConsultaCNPJ").Delete On Error GoTo 0 CNPJ = Format(CNPJ, """""00"".""000"".""000""/""0000-00") Call ThisWorkbook.Queries.Add( _ Name:="ConsultaCNPJ", _ Formula:="let" & Chr(13) & "" & Chr(10) & _ " Source = Json.Document(Web.Contents(""https://minhareceita.org/" & CNPJ & """))," & _ Chr(13) & "" & Chr(10) & " #""Converted to Table"" = Record.ToTable(Source)" & _ Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Converted to Table""") With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _ "OLEDB;Provider=Microsoft.Mashup.OleDb.1;" & _ "Data Source=$Workbook$;Location=ConsultaCNPJ;Extended Properties=""""" _ , Destination:=Range("$A$5")).QueryTable .CommandType = xlCmdSql .CommandText = Array("SELECT * FROM [ConsultaCNPJ]") .Refresh BackgroundQuery:=False End With End Sub
  9. @levi feirreira Atribua a busca a uma variável e depois faça o teste se ela é Nothing, p.ex, Dim Procura As Range Set Procura = Selection.Find(What:="102"... If Procura Is Nothing Then Exit Sub End If
  10. @bantinerbs Como comentado acima, faltou espaço. [ é um comando, se entrar com which [ no terminal verá que é um arquivo.
  11. @Bruno Morais da Fonseca Qual é a dificuldade? Já conseguiu ler os dados do arquivo? Você pode ler cada linha e testar o campo onde tem o nome do time. Com a função split é só passar o índice da coluna.
  12. Para salvar em pdf tem o procedimento ExportAsFixedFormat. É só passar o nome do arquivo para o diretório ThisWorkbook.Path que é onde a planilha foi salva. Na outra aba os dados devem ser enviados para a última linha da tabela, há diversas formas de identificar isso, uma das mais simples é com [A1].CurrentRegion.Rows.Count + 1. A limpeza das células pode ser feita com ClearContents.
  13. Deve ter visto um alerta de erro nessa atribuição de desvioalpha. O que quer fazer nessa atribuição de mediaalpha? Para acessar os elementos de mediaalpha você deve passar o índice.
  14. @Edgar beleza Uma forma de fazer isso é com AdvancedFilter. Assim fica simples aplicar os critérios para criar os dados filtrados em numa tabela auxiliar para carregar o listbox. Crie uma nova planila com o nome Filtro e copie o código, Sub AtualizaFiltro() Dim Tabela As Range Dim AreaFiltrada As Range Dim PlanFiltro As Worksheet Dim Controle As Control Set Tabela = ThisWorkbook.Sheets("Plan1").[A1].CurrentRegion Set PlanFiltro = ThisWorkbook.Sheets("Filtro") Set AreaFiltrada = PlanFiltro.[A10].CurrentRegion For Each Controle In Frame1.Controls If Controle.Value = True Then PlanFiltro.[C2].Value = Controle.Caption AreaFiltrada.Clear Call Tabela.AdvancedFilter( _ Action:=xlFilterCopy, _ CriteriaRange:=PlanFiltro.[A1].CurrentRegion, _ CopyToRange:=AreaFiltrada(1, 1)) ListBox1.RowSource = "Filtro!" & AreaFiltrada.Address Exit For End If Next Controle End Sub Private Sub UserForm_Click() Call AtualizaFiltro End Sub Private Sub UserForm_Initialize() ListBox1.ColumnCount = 3 ListBox1.RowSource = "Plan1!A2:C8" End Sub A planilha Filtro deve ter estes campos, Faça um teste. O evento está no Click do Form e filtra apenas a primeira seleção de checkbox que encontrar, mas você pode editar o código para acrescentar mais situações. Os critérios do filtro do TextBox também devem ser registrados na planilha Filtro (o nome na célula B2, etc).
  15. @Esraeu A macro tira a formatação porque usei Clear, para deixar é só substituir por ClearContents, Call Lista.ClearContents Ou então remova essa linha se não quiser apagar a última seleção.
  16. @Esraeu Podemos ativar a macro para cria lista quando a célula B2 é modificada. Estes são os passos: 1) Clique com o direito na aba da planilha e selecione Vew Code: 2) No editor cole o código. Depois a planilha deve ser salva como xlsm. Sub AtualizaLista(Lista As Range, AreaModelo As Range, Modelo As String) Dim Area As Range Dim Procura As Range Dim Valores As String Set Procura = AreaModelo.Find( _ What:=Modelo, LookIn:=xlValues, LookAt:=xlWhole) If Not Procura Is Nothing Then Set Procura = Procura.MergeArea Set Area = Procura(1, 2).Resize(Procura.Rows.Count) If Area.Rows.Count = 1 Then Valores = Area.Value Else Valores = Join(Application.Transpose(Area), ",") End If Call Lista.Clear Call Lista.Validation.Delete Call Lista.Validation.Add(Type:=xlValidateList, Formula1:=Valores) End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$2" Then Call AtualizaLista([B3], [F:F], [B2]) End If End Sub
  17. @Esraeu Pode ser com macro? Assim poderia adicionar uma nova lista com os tamanhos na célula C3 toda vez que o modelo é selecionado.
  18. @luhowl No último loop está apenas atribuindo o produto do maior por cada posição do vetor. No fim a variável multi vai acabar ficando só com o cálculo do último elemento. Se quer multiplicar cada elemento pelo maior, faça o cálculo para todos os elementos, p.ex, for(int i = 0; i < MAX; i += 1){ vet[i] *= maior_valor; } O segundo loop não é necessário, você pode pegar o maior valor no primeiro onde faz os inputs.
  19. @ZTM Onde errei?
  20. Da forma que fiz, se tirar o +1 o código vai começar a atribuir a partir do nome da coluna.
  21. @Evandro Candido Nas suas condicionais a variável inss já recebe o valor que deve ser abatido do bruto na atribuição de sal_liquido. Então não é a diferença que deve atribuir a inss, mas o valor desse desconto: inss = 621.04.
  22. Nesse caso pode atribuir a última linha da planilha para fazer o loop até ela. Dependendo da tabela pode ser com CurrentRegion ou então UsedRange, p.ex, Sub Main() Const PREFIXO As String = "245897-" Dim Item As Range Dim Linha As Long Set Item = Cells.Find( _ What:="Add item", LookIn:=xlValues, LookAt:=xlWhole) If Not Item Is Nothing Then For Linha = Item.Row + 1 To ActiveSheet.UsedRange.Rows.Count If Item(Linha).Value <> "" Then If Left(Item(Linha).Value, Len(PREFIXO)) <> PREFIXO Then Item(Linha).Value = PREFIXO & Item(Linha).Value End If End If Next Linha End If End Sub
  23. @Evandro Candido Constantes decimais em C++ são double então envite comparar constantes desse tipo com float como fez. Isso pode levar a erros em testes condicionais, p.ex, int main(void){ float valor = 0.01; if(valor == 0.01){ cout << "Igual\n"; }else{ cout << "Diferente\n"; } return 0; } Esse código vai retornar "Diferente", para evitar isso você pode declarar a variável como double ou então fazer uma conversão da constante com cast ou colocar 0.01f (f no valor). Para testar a tabela dos valores não precisa colocar o intervalo, basta fazer um teste de cada, if(salario <= 1693.72){ }else if(salario <= 2822.90){ }else if(salario <= 5646.80){ ... No caso do desconto, o valor não devia ser só abatido do salário em vez de atribuir a diferença para a variável inss?
  24. @isabela queiroz Está faltando várias linhas de código aí. Cadê o While, o Set Item, o If Not Item? Acrescente a condicional no seu primeiro código.
  25. @isabela queiroz Como o seu código não tem nenhuma condição no loop para concatenar "245897-" com o valor da célula, isso será feito para qualquer uma. Por isso você precisa testar antes se o valor já começa com "245897-". É isso que estrutura que postei faz. Veja que usei duas funções de string, Left e Len, para verificar se o código já faz parte do início do valor da célula

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!