Ir ao conteúdo
  • Cadastre-se

ArmandPer

Membro Pleno
  • Posts

    64
  • Cadastrado em

  • Última visita

posts postados por ArmandPer

  1. É sempre bom colaborar com os colegas, pois muitas vezes procuramos uma solução prática e rápida. Considerando que tenha já alguma familiaridade com VBA no Excel. Segue um mini tutorial sobre como alinhar à direita valores em um ListBox, montado com uma matriz em múltiplas colunas, acompanhe:

    Crie uma pequena planilha como esta:

    Planilha1.png

    Nomeie um intervalo na planilha que no código depois será visto que vai ajudar

    muito na verificação de quantos dados estão ocupando as linhas da planilha. No caso o vetor chamei de VT_DATA ... veja a ilustração:

    Nomeando%2520C%25C3%25A9lulas.png

    feito isso, abra seu editor VBA. Inclua um formulário semelhante a este da figura com as medidas de Height = 212 e Width = 552

    Formul%25C3%25A1rio%2520FrmLista.png

    A name do Form é FrmLista. Depois inseri um objeto ListBox no Form, que denominei de LstView. Observe as alterações em algumas propriedades importantes no ListBox:

    Formul%25C3%25A1rio%2520com%2520LISTBOX.png

    Criei também um módulo que chamei de ModArrayList veja a ilustração:

    M%25C3%25B3dulo.png

    Inserir um botão na planilha a partir dos ActiveX disponível na Guia Desenvolvedor do Excel, para chamar o formulário.

    Inclus%25C3%25A3o%2520de%2520bot%25C3%25A3o.png

    Bom, já temos um pequena planilha, temos um formulário com um ListBox devidamente configurado as propriedades, temos um módulo onde será criada uma função que vai gerar a matriz para adicioná-la ao ListBox.

    Vamos ao código:

    no escopo do módulo...

    Function Listando()
    Dim linhasPlan As Long
    Dim matriz()
    Dim lin As Long
    Dim col As Integer
    Dim valorStr As String
    'Fazendo a leitura de quantas linhas de dados _
    tenho na planilha ativa, a estando no módulo _
    uma forma de mostrar qual é a planilha ativa _
    é evocando o objeto que interessa, no caso do _
    exemplo é "Plan1".

    'Range("VT_DATA"), está relacionando na propriedade _
    Range a coleção de células selecionadas e nomeadas _
    com VT_DATA. Isso é feito na "caixa de nome" ao lado _
    da "caixa de formulas" [fx]. Isso assegura ter a contagem _
    de linhas corretas, pois certamente toda descrição de _
    duplicata terá uma data.

    linhasPlan = WorksheetFunction.CountA(Sheets("plan1").Range("VT_DATA"))

    'agora temos condição de redimensionarmos a matriz

    ReDim matriz(lin To linhasPlan, col To 3)

    'limpa o objeto ListBox

    FrmLista.LstView.Clear
    'limpando a matriz

    For i = 0 To linhasPlan
    For j = 0 To 2
    matriz(i, j) = Empty
    Next j
    Next i

    'Montando o cabeçalho
    matriz(0, 0) = "DATA"
    matriz(0, 1) = "DESCRIÇÃO"
    matriz(0, 2) = "VALOR EM R$"

    'acrescentando os dados da Worksheet na matriz
    For i = 1 To linhasPlan
    For j = 0 To 2
    If j = 2 Then 'coluna de valores
    'O Valor é convertido para String que formatado
    'a variável valorStr recebe o Valor ajustado com
    'a função Space onde tenho uma expressão que
    'verifica com a função Len o tamanho da String
    'menos 10 caracteres sugeridos, assim completa
    'com espaços em branco a frente do valor alinhando
    'todos os valores a direita.
    valorStr = Format(CStr(Sheets("plan1").Cells(i + 1, j + 1)), "###,##0.00")
    matriz(i, j) = Space(10 - Len(valorStr)) & valorStr
    Else
    matriz(i, j) = Sheets("plan1").Cells(i + 1, j + 1)
    End If

    Next j
    Next i
    Listando = matriz
    End Function

    Agora o código no formulário...

    Private Sub LstView_Click()
    If LstView.ListIndex <> 0 Then
    MsgBox "Estou na linha " & LstView.ListIndex & vbLf & vbLf & _
    "Informações da linha selecionada: " & vbLf & _
    "Data: " & LstView.List(LstView.ListIndex, 0) & vbLf & _
    "Descrição: " & LstView.List(LstView.ListIndex, 1) & vbLf & _
    "Valor: " & LTrim(LstView.List(LstView.ListIndex, 2)), vbInformation, "MENSAGEM"

    End If
    End Sub

    Private Sub UserForm_Activate()
    'Ao clicar no botão que está na planilha
    'é acessado o módulo onde o retorno da função Listando
    'carrega o LstView.
    LstView.List = ModArrayList.Listando
    End Sub

    e por último o código do botão que se encontra na planilha...

    Private Sub CmdForm_Click()
    FrmLista.Show vbModeless
    End Sub

    Pronto, assim teremos o seguinte resultado na tela ao clicarmos

    no botão Formulário que está na planilha:

    Resultado.png

    Bom, qualquer dúvida ou se passou alguma informação em branco, comentem.

    Espero poder ter ajudado alguns colegas em prováveis dúvidas.

    :rolleyes:

  2. Olá Lamcarter.

    Primeiro, quanto ao erro que deu, certamente o objeto TextBox2.Text não existe na sua Planilha, então ele reclama esse objeto. Pode ser o Name do Objeto.

    Quanto ao InputBox, é complicado, ele não oferece suporte para o programador para alterar facilmente a condição de mascara. Então temos que apelar para uma programação mais refinada, talvez ainda não conheça, o uso de API's.

    O InputBox é útil para entradas simples de dados, não para senhas por isso usei a caixa de texto incluindo um activeX na planilha. Seu erro com a TextBox, é nomeação da mesma apenas isso. melhor recorrer por esse recurso por enquanto.

  3. Bom, quanto a caixa de texto, ela deve estar incorporada na própria planilha, segue algumas ilustrações que pode ajudar a esclarecer o que pode fazer, inclusive sobre o detalhe da constante como variável global e mais alguns toques sobre declaração de variáveis caso tenha dúvidas.

    Onde colocar sua caixa de texto:

    sobretextbox1activeexe.jpg

    Quanto as propriedades:

    propriedadesdatextbox.jpg

    Quanto a variáveis:

    codigovbavar.jpg

    Bom, acredito que ajude bastante a imagem. caso tenha alguma dúvida mais sobre VBA, quem sabe possa ajudar.

    É repartindo o pão que todos tem a melhor solução... :D

  4. Bom, pode-se trabalhar com uma condicional:

    coloque na sua planilha uma caixa de texto (activeexe) TextBox1

    uma constante como variável global

    Não esqueça esse detalhes. Clique com o lado direito do mouse na caixa de texto, em propriedades, mude a propriedade PasswordChar = "*"

    Isso faz com que não se vizualize a senha.

    Const Senha = "1234"

    Sub Incluir_ou_Alterar()

    If TextBox1.Text<>Senha Then

    Msgbox "Senha invalida",VbCritical,"ACESSO NEGADO"

    TextBox1.Text = ""

    Exit Sub

    Else

    TextBox1.Text = ""

    Sheets("Planilha tal").Select

    ActiveSheet.Unprotect "minha senha"

    Sheets("Menu Principal").Select

    Worksheets("Planilha tal").ShowDataForm

    ActiveSheet.Protect "minha senha"

    End IF

    End Sub

    Pode ser uma opção, caso tenha encontrado outra até interessante postar

    Abraços :rolleyes:

    • Curtir 1

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!