Ir ao conteúdo

Excel MsgBox personalizado ou Useform


Ir à solução Resolvido por Midori,

Posts recomendados

Postado

Olá Pessoal, preciso de mais uma ajuda de vocês.

 

Vou resumir pra conseguir exemplificar melhor minha solicitação. São 36 planilhas que recebemos dos usuários, cada planilha possui 31 marcas divididas em blocos conforme exemplo em anexo, mas no exemplo só coloquei um bloco.

      Na coluna T possui um cálculo da diferença da sugestão histórica com a meta Coluna F inserida pelo usuário, queria uma forma de quando recebermos o arquivo, ao clicar no botão, aparecesse uma msgbox ou userform e mostrasse apenas as diferença de cada marca. No arquivo em anexo, exemplifiquei melhor como preciso que apareça o msgbox.

 

Não sei qual a complexidade dessa solicitação, mas fico aberto para sugestões.

 

Obrigado.

Planilha exemplo.xlsx

Postado

@Scofieldgyn segue sugestão com Pop-up.

 

 

Ao clicar em Histórico vs Nova Meta aparce um popup com as diferença de cada marca, e incluindo os dados dinâmicamente, de acordo com a coluna DIF.

 

image.png.6aa54d6392fcf2fde2d898963b7ab2aa.png

 

  • Amei 1
Postado

@Basole Bom dia, Muito obrigado, adaptei o código e funcionou.

 

 

Porém na planilha já tem um private e está dando conflito, teria uma forma de tratar em módulo?

 

Outro problema é que não está pegando a Diferença das outras marcas, se você achar melhor, te envio a planilha completa, mas só uma dúvida, depois você consegue excluir essa planilha? pois são dados sigilosos.

Postado

@Scofieldgyn No Userform os dados podem ser mostrados no TextBox. Para testar crie os controles e ajuste o tamanho,

 

Private Sub UserForm_Initialize()
    TextBox1.MultiLine = True
    TextBox1.Font.Name = "Courier"
    TextBox1.Text = Historico
    TextBox1.Locked = True
End Sub

Function Historico() As String
    Dim Rota    As String
    Dim Meta    As String
    Dim Peso    As String
    Dim Dif     As String
    Dim Texto   As String
    Dim Celula  As Range
        
    Set Celula = ThisWorkbook.ActiveSheet.[T4]
    
    Texto = "ROTA" & vbTab & "META" & vbTab & vbTab & _
        "PESO" & vbTab & vbTab & "DIF" & vbCrLf
    
    While Celula <> 0
        Rota = Celula.Offset(0, -18)
        Meta = Format(Celula.Offset(0, -14), "#,##0.00")
        Peso = Format(Celula.Offset(0, -1), "#,##0.00")
        Dif = Format(Celula, "#,##0.00")
        Texto = Texto & Rota & vbTab & Meta & vbTab & _
            Peso & vbTab & Dif & vbCrLf
        Set Celula = Celula.Offset(1)
    Wend
    Historico = Texto
End Function

 

  • Amei 1
Postado
agora, Scofieldgyn disse:

@Basole Bom dia, Muito obrigado, adaptei o código e funcionou.

Porém na planilha já tem um private e está dando conflito, teria uma forma de tratar em módulo?

Outro problema é que não está pegando a Diferença das outras marcas, se você achar melhor, te envio a planilha completa, mas só uma dúvida, depois você consegue excluir essa planilha? pois são dados sigilosos.

 

@Scofieldgynbom dia!

 

Quando diz Private se refere a worksheet_selectionchange?

Se for isso pode-se adptar o mesmo código do meu exemplo, a uma macro/sub.

Mas não vai ficar mais, de forma automatica, ou seja precisa-se de um botão.

 

Quanto as marcas, no exemplo que enviou eu só vi uma marca como exemplo

 

Quanto a excluir os anexos dos posts, eu não tenho acesso para tal.

Acredito que o mestre @Patropi possa fazer isso

 

  • Amei 1
Postado

@Scofieldgyn Abra a janela VBA com Alt+F11. Crie o formulário no menu em Insert > Userform. Ao lado do formulário vai ter os controles (Toolbox), lá procure o TextBox e desenhe no form. Depois com duplo clique sobre o formulário abra o editor e cole o código. Para executar é F5 (ou Run). Depois você pode colocar um botão na planilha para chamar o form.

 

userform.png.4fcf535aafa3a5b3061c938d11b6cf4b.png

 

userform2.png.30eaa668b9fe3da16487b9818451e719.png

 

Mas se achar mais fácil pode usar Msgbox no lugar do form, aí é só mostrar o retorno da função como no TextBox,

 

Sub Macro()
    MsgBox Historico
End Sub

 

  • Amei 1
Postado

@Midori  fiz conforme orientou, mas não pega todas as marcas.

 

 

2 horas atrás, Scofieldgyn disse:

@Midori  fiz conforme orientou, mas não pega todas as marcas, veja no anexo.

 

 

Ah identifiquei outro ponto ai no código, ele só mostra a diferença se a primeira célula da DIF estiver com diferença, se tiver zerado, não vai mostar nada, mesmo que as demais abaixo dela esteja com diferença.

Faz um teste pra você ver, coloque zero na T9 e roda.

Postado

@Scofieldgyn A função com as alterações,

 

Function Historico() As String
    Dim Rota    As String
    Dim Meta    As String
    Dim Peso    As String
    Dim Dif     As String
    Dim Texto   As String
    Dim Celula  As Range
        
    Set Celula = ThisWorkbook.ActiveSheet.[T9]
    
    Texto = "ROTA" & vbTab & "META" & vbTab & vbTab & _
        "PESO" & vbTab & vbTab & "DIF" & vbCrLf
    
    While Celula.Row < ThisWorkbook.ActiveSheet.UsedRange.Rows.Count
        Rota = Celula.Offset(0, -18)
        Meta = Format(Celula.Offset(0, -14), "#,##0.00")
        Peso = Format(Celula.Offset(0, -1), "#,##0.00")
        Dif = Format(Celula, "#,##0.00")
        
        If IsNumeric(Celula) And Celula <> 0 And Trim(Rota) <> "TOTAL" Then
            Texto = Texto & Rota & vbTab & Meta & vbTab & _
                Peso & vbTab & Dif & vbCrLf
        End If
        Set Celula = Celula.Offset(1)
    Wend
    Historico = Texto
End Function

 

  • Amei 1
Postado

@Scofieldgyn Rodei na planilha do anexo e apareceram todos.

 

Você deixou a outra Sub?

Private Sub UserForm_Initialize()
    TextBox1.MultiLine = True
    TextBox1.Font.Name = "Courier"
    TextBox1.Text = Historico
    TextBox1.Locked = True
End Sub

 

  • Amei 1
  • Solução
Postado

@Scofieldgyn Para deixar a coluna da marca alinhada considerei o máximo de 25 caracteres (com tab não ficou alinhado). Se acha que nesse campo pode ter marcas com mais caracteres, talvez seja melhor usar um ListBox no lugar do TextBox.

 

Function Historico() As String
    Dim Marca   As String
    Dim Rota    As String
    Dim Meta    As String
    Dim Peso    As String
    Dim Dif     As String
    Dim Texto   As String
    Dim Celula  As Range
        
    Set Celula = ThisWorkbook.ActiveSheet.[T9]
    Marca = Celula.Offset(-2, -18)
    
    Texto = "MARCA" & String(25 - Len("MARCA"), " ") & "ROTA" & _
        vbTab & "META" & vbTab & vbTab & _
        "PESO" & vbTab & vbTab & "DIF" & vbCrLf
    
    While Celula.Row < ThisWorkbook.ActiveSheet.UsedRange.Rows.Count
        Rota = Celula.Offset(0, -18)
        Meta = Format(Celula.Offset(0, -14), "#,##0.00")
        Peso = Format(Celula.Offset(0, -1), "#,##0.00")
        Dif = Format(Celula, "#,##0.00")
        
        If Trim(Celula.Offset(1, -18)) = "ROTA" Then
            Marca = Celula.Offset(0, -18)
        End If
        
        If IsNumeric(Celula) And Celula <> 0 And Trim(Rota) <> "TOTAL" Then
            Texto = Texto & Marca & String(25 - Len(Marca), " ") & _
                Rota & vbTab & Meta & vbTab & _
                Peso & vbTab & Dif & vbTab & vbCrLf
        End If
        Set Celula = Celula.Offset(1)
    Wend
    Historico = Texto
End Function

 

  • Amei 1
Postado

@Midori muito obrigado, a principio está dando  tudo certo. 👏🤝

 

Obrigado também o @Basoleque vem me ajudando muito!

 

image.png.2e62a0b2b7174c2e6a5d7a3ee17a2cc6.png

@Patropi pode excluir os arquivos zipados por favor, contém dados reais e não podem ser compartilhado/visualizados.

 

pode deixar o arquivo excel, assim pode ajudar demais colegas do fórum que tiverem interesse no assunto.

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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!