Ir ao conteúdo

Midori

Membro Pleno
  • Posts

    3.602
  • Cadastrado em

  • Última visita

Tudo que Midori postou

  1. Quais resultados não está conseguindo? Como ficou o código com a sua edição?
  2. É só fazer as atribuições nessas colunas. Para facilitar o trabalho criei dois procedimentos, então basta ir acrescentando as linhas no código com eles. É só seguir o exemplo, p.ex, Para acrescentar um valor em BJ: Call Registra(Target, "BJ", "Teste") E para pegar o dado de L: Resultado(Target, "L") Private Sub Registra(Status As Range, Coluna As String, Valor As String) Dim C As Long C = Range(Coluna & ":" & Coluna).Column If C <> Status.Column Then Cells(Status.Row, C).Value = Valor End If End Sub Private Function Resultado(Status As Range, Coluna As String) As String Resultado = Cells(Status.Row, Range(Coluna & ":" & Coluna).Column).Value End Function Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count = 1 And Target.Row >= 5 Then Dim Tipo As String If Target.Column = [N:N].Column Then Tipo = Right(Target.Value, 2) If Tipo <> "ON" Then Tipo = Right(Target.Value, 3) End If Call Registra(Target, "BF", Tipo) Call Registra(Target, "AM", Target.Value & Format(Resultado(Target, "L"), "YYYY")) Call Registra(Target, "AO", Target.Value & Format(Resultado(Target, "L"), "MMM/YY")) ElseIf Target.Column = [R:R].Column Then Dim Ano As String Dim MesAno As String Tipo = Trim(Left(Target, InStr(Target, " "))) If Tipo <> "ATIVO" And Tipo <> "INATIVO" Then Tipo = "" Else Ano = "/" & Split(Target, "/")(2) MesAno = " " & Split(Target, "/")(1) & Ano End If Call Registra(Target, "BA", Tipo & Ano) Call Registra(Target, "BD", Tipo & MesAno) Call Registra(Target, "BJ", Tipo & Tipo) End If End If End Sub
  3. Não entendi o que quer fazer agora, algumas colunas que mencionou estão ocultas e sem dados. Se anexar a planilha com esses exemplos vai ajudar.
  4. O código para o módulo da planilha. A atualização será na edição das colunas, Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count = 1 And Target.Row >= 5 Then Dim Status As Variant Dim Tipo As String Status = Trim(Target.Value) If Target.Column = [N:N].Column Then Tipo = Right(Status, 2) If Tipo <> "ON" Then Tipo = Right(Status, 3) End If Cells(Target.Row, [BF:BF].Column).Value = Tipo ElseIf Target.Column = [R:R].Column Then Dim Ano As String Dim MesAno As String Tipo = Trim(Left(Status, InStr(Status, " "))) If Tipo <> "ATIVO" And Tipo <> "INATIVO" Then Tipo = "" Else Ano = "/" & Split(Status, "/")(2) MesAno = " " & Split(Status, "/")(1) & Ano End If Cells(Target.Row, [BA:BA].Column).Value = Tipo & Ano Cells(Target.Row, [BD:BD].Column).Value = Tipo & MesAno Cells(Target.Row, [BJ:BJ].Column).Value = Tipo End If End If End Sub
  5. É como eu comentei ali sobre o parametro LookAt. Editou a função LocalizaConteudo?
  6. A sintaxe da função é: Format(Expression, [ Format ], [ FirstDayOfWeek ], [ FirstWeekOfYear ]) O primeiro parametro é obrigatório e deve receber a expressão que será formatada no retorno da função. No seu caso é a data. Você deve passar a data como argumento e aplicar o formato no segundo parametro, p.ex: Resultado.Value = "PDD CANCEL " & Format(PedidoDia.Value, "DD/MM/YY") & " C/DVL
  7. O parâmetro LookAt pode receber duas constantes: xlWhole e xlPart. Usei a primeira para testar o texto todo, mas a segunda serve para qualquer parte. Então é só editar essa parte. Para isso tem a função de formatação: Format(..., "DD/MM/YY")
  8. Aqui funciona. Se entrar com um texto em M1 e esse existir na coluna B, a célula com o valor encontrado será selecionada. O que acontece aí nessa condição? Para isso é só colocar este Else, ... ElseIf UCase(Celula.Value) = "CANCELOU PEDIDO C/DVL" Then Resultado.Value = "PDD CANCEL " & PedidoDia.Value & " C/DVL" PedidoCancelado = True Else Resultado.Value = "" End If
  9. Acredito que esteja se referindo a procedimento. Na programação a modularização (não confunda com o módulo/componente do VBA) é uma boa prática e significa dividir o código em pedaços menores para realizar uma tarefa de acordo com o contexto. O Worksheet_Change é um procedimento Sub, ativado no evento change, e no mesmo módulo você pode criar outros. Assim fica mais simples testar já que poderá apenas comentar a linha da chamada caso queira desativar algum, p.ex, Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo FIM If Target.Count = 1 Then If Target.Row >= 5 Then Call PedidoCancelado(Target) Call TodasMaiusculas(Target) End If If Target.Address = "$M$1" Then Dim Localiza As Range Set Localiza = LocalizaConteudo(Target) If Not Localiza Is Nothing Then Call Localiza.Select End If End If End If FIM: If Err.Number <> 0 Then Application.EnableEvents = True MsgBox "Erro" End If End Sub Function PedidoCancelado(Celula As Range) As Boolean If Celula.Column = [K:K].Column Then Dim PedidoDia As Range Dim Resultado As Range Set PedidoDia = Cells(Celula.Row, [J:J].Column) Set Resultado = Cells(Celula.Row, [Z:Z].Column) If UCase(Celula.Value) = "CANCELOU PEDIDO S/DVL" Then Resultado.Value = "PDD CANCEL " & PedidoDia.Value & " S/DVL" PedidoCancelado = True ElseIf UCase(Celula.Value) = "CANCELOU PEDIDO C/DVL" Then Resultado.Value = "PDD CANCEL " & PedidoDia.Value & " C/DVL" PedidoCancelado = True End If End If End Function Function TodasMaiusculas(Celula As Range) As Boolean If Not Application.Intersect(Range("B:C,G:H,K:K"), Celula) Is Nothing Then Application.EnableEvents = False Celula.Value = UCase(Celula.Value) Application.EnableEvents = True TodasMaiusculas = True End If End Function Function LocalizaConteudo(Celula As Range) As Range If Trim(Celula.Value) <> "" Then Set LocalizaConteudo = Celula.Worksheet.[B:B].Find( _ What:=Celula.Value, After:=Celula.Worksheet.[B5], _ LookIn:=xlValues, LookAt:=xlWhole) End If End Function Escolhi retornar algum valor, por isso usei Function no lugar Sub. Isso é útil no projeto caso queira exibir uma mensagem se um valor for encontrado ao algum dado modificado.
  10. Você quer fazer em 5 colunas, porém seu código verifica o range K5:K5000. Nesse caso não é questão de conflito. Acho que o código fica mais "organizado" aplicando indentação e espaços entre algumas linhas.
  11. Chegou a testar o código com um registro? Os membros de objEmail devem receber os dados da planilha. Depois é só fazer o loop para pegar cada um com as chamadas e atribuições em objEmail nele.
  12. Para isso tem a função UCASE que você pode usar no evento Change.
  13. Na atribuição do nome veja se assim resolve. .InitialFileName = "C:\DOCUMENTOS\2024\" & ThisDocument.Paragraphs(1).Range.Text
  14. Você pode usar os objetos do Outlook, p.ex, Sub EnviaEmail() Dim objOutlook As Object Dim objEmail As Object Set objOutlook = CreateObject("Outlook.Application") Set objEmail = objOutlook.createitem(0) objEmail.To = "[email protected]" objEmail.Subject = "Assunto" objEmail.Body = "Mensagem" 'Call objEmail.Attachments.Add("Anexo") Call objEmail.Display 'Call objEmail.Send End Sub Aí é só fazer um loop na tabela para pegar os valores do endereço, anexo, etc. A chamada a Display é para a fase de teste, depois é só remover e chamar Send.
  15. Tentou entrar em contato com o desenvolvedor? Talvez tenha algum suporte. De qualquer forma, começando pela primeira dúvida, qual campo deve ser repetido? Onde está isso? Pode mostrar um exemplo de como está e como deve ficar, se possível com dados fictícios e print da tela?
  16. É só atribuir o valor da célula ao TextBox, p.ex: TextBox1.Value = [A1].Value Isso pode ser feito em algum evento como o Initialize do carregamento do formulário. Para bloquear a edição tem a propriedade Enable do controle.
  17. Para anexar planilhas com macro é necessário compactar. Sugiro colocar apenas dados fictícios como exemplo.
  18. O erro acontece porque o procedimento tem o mesmo nome do módulo. Para resolver isso você pode passar os dois para OnTime: "Consec.Consec"
  19. O formato é o que está lá no salvar como xls Excel-97-2003. No caso de incompatibilidade de algum recurso o Excel mostra um alerta antes.
  20. Para registrar a data tem o evento Change onde você pode testar o resultado e fazer a atribuição, p.ex: Target(, 2).Value = Date. E na coluna D aplique a função DATADIF. https://support.microsoft.com/pt-br/office/função-datadif-25dba1a4-2812-480b-84dd-8b32a451b35c
  21. Essa parte pode ficar assim, Dim Busca As Range Set Busca = Planilha2.Range("b:b").Find(.List(X, 0), lookat:=1) If Not Busca Is Nothing Then Lin = Busca.Row Range("b" & Linha).Cells = Planilha2.Cells(Lin, 2) Range("c" & Linha).Cells = Planilha2.Cells(Lin, 3) Linha = Linha + 1 End If
  22. Nessa linha se Find não encontrar nada vai acontecer o erro 91. Antes de tentar pegar o valor de Row, atribua o retorno da função a uma variável do tipo Range e faça um teste com a instrução Nothing.
  23. Entendi que quer fazer a soma do conteúdo da célula com o registro do List. Fica assim, .Cells(Linha, 9).Value = .Cells(Linha, 9).Value + ListView1.ListItems(i).SubItems(9)
  24. No Office hoje o sentido de Macro só é associado ao VBA, porém é possível criar Macros no Excel sem ser na linguagem VBA. Macros são só ações ou conjunto de instruções que definimos para executar repetidas vezes. Desde a primeira versão o Excel tem o recurso de Macro antes do VBA que só veio na verão 5.0. Quase ninguém mais usa, mas o ambiente de programação fica na opção Inserir das abas.
  25. O modo mais simples é com tabela dinâmica. Selecione a tabela e arraste os campos para agrupar.

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