Notifications
Clear all

Auto nomeameto dos Labels - VBA

10 Posts
3 Usuários
0 Reactions
2,086 Visualizações
(@chook)
Posts: 197
Reputable Member
Topic starter
 

Bom dia amigos,
como podem observar, tenho a intenção de colocar os captions dos labels automatico, e dinamico. Temos no form três colunas de labels que seguem:

Coluna A - labels de a1 a a15
Coluna B - labels de b1 a b15
Coluna C - labels de c1 a c15

O que preciso é que automaticamente seja carregado o label com o nome das grades atendendo o padrão 4 numeros e uma letra, 0000A, 0001A, 0002A...0015A. A mesma coisa com B e a mesma coisa com C

Cheguei nesta ideia abaixo mais não funciona.

For i = 1 To 15
    "a" & (i) & ".Caption" = "000" & i & "A"
Next

Observe ainda que tem abaixo de cada coluna um botão +, onde quero aumentar de 5 em 5. Ex.: carregou o initialize temos de 0000A a 0015A, ao clicar em +, teremos de 0005A a 0020A e assim por diante.

Forte abraço a todos!!

 
Postado : 31/05/2012 6:39 am
(@tomamais)
Posts: 26
Eminent Member
 

Alex,

Seria algo assim?

Dim controle
     For Each controle In Me.Controls
          If TypeName(controle) = "Label" Then
            MsgBox controle.Name
          End If
     Next

Abraços

 
Postado : 31/05/2012 10:20 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Aproveitando o codigo do Tomaz

     For Each controle In Me.Controls
        If TypeName(controle) = "Label" Then
            Ci = Left(controle.Name, 1)
            Cf = Right(controle.Name, 1)
            Select Case UCase(Ci)
                Case "A"
                    controle.Caption = "000" & Cf & UCase(Ci)
                Case "B"
                    controle.Caption = "000" & Cf & UCase(Ci)
                Case "C"
                    controle.Caption = "000" & Cf & UCase(Ci)
            End Select
          End If
     Next
 
Postado : 31/05/2012 11:01 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Corrigindo/Completando a rotina:

Private Sub UserForm_Initialize()
Dim controle
     For Each controle In Me.Controls
        If TypeName(controle) = "Label" Then
            Ci = Left(controle.Name, 1)
            If Len(controle.Name) > 2 Then
                cf = Right(controle.Name, 2)
            Else
                cf = Right(controle.Name, 1)
            End If
            If Len(cf) > 1 Then
                Pf = "00"
            Else
                Pf = "000"
            End If
            Select Case UCase(Ci)
                Case "A"
                    controle.Caption = Pf & cf & UCase(Ci)
                Case "B"
                    controle.Caption = Pf & cf & UCase(Ci)
                Case "C"
                    controle.Caption = Pf & cf & UCase(Ci)
            End Select
          End If
     Next
 
Postado : 31/05/2012 11:17 am
(@chook)
Posts: 197
Reputable Member
Topic starter
 

Reinaldo, realmente você consegue me surpreender com seu refinamento. Você é muito bom mesmo amigo!

Sem querer abusar, você notou que abaixo das colunas tem um botão +? A ideia e que ao clicar no + os lables aumentem 5 numeros na sequencia exemplo:

1ª Carga (initialize) : 0001A, 0002A, 000NA, 0015A
Ao clicar no mais abaixo da coluna A: 0005A, 0006A, 000NA, 0020A
Ao clicar novamente no mais abaixo da coluna A: 0010A, 0011A, 000NA, 0025A

Entendeu? É possível?

 
Postado : 01/06/2012 6:11 am
(@chook)
Posts: 197
Reputable Member
Topic starter
 

Na verdade isso serve é para que o vendedor possa saber qual a grade que está disponível para uso. o legal mesmo e que mostrasse as 5 últimas grades utilizadas e as 10 próximas disponíveis.

Em outras palavras: Caso a última grade utilizada fosse a 0022A, a sequencia seria 0018A, 0019A, 0020A, 0021A, 0022A, 0023A, 0024A, 000NA...0032A

 
Postado : 01/06/2012 6:40 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Veja o anexo

 
Postado : 01/06/2012 8:39 am
(@chook)
Posts: 197
Reputable Member
Topic starter
 

É isso mesmo!! Só não consegui adaptar para os dados no combobox, pois da forma que colocou está lendo na planilha.

 
Postado : 01/06/2012 11:39 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não estou entendendo. Imaginei que as "grades" (não sei o que é) já utilizadas estivessem cadastradas em algum lugar, normalmente em uma planilha. Se não estão; como é "carregado" o combo

 
Postado : 01/06/2012 11:48 am
(@chook)
Posts: 197
Reputable Member
Topic starter
 

Da forma que havia feito anteriormente estava funcionando, pois ele pegava os dados da combobox.

A carga é dada no inicio, com o codigo abaixo:

Dim lCa As Integer, lCb  As Integer, lCc As Integer
Sheets("Pedidos").Activate 'Seleciona a planilha Banco
cmbxGrade.Clear 'Limpa o ComboBox
Linha = Range("M65536").End(xlUp).Row
    cmbxGrade.Clear
    cmbxGrade = ""
For i = 3 To Linha
    If Range("N" & i).Value <> "" And Right(Range("N" & i).Value, 1) = "A" Or Right(Range("N" & i).Value, 1) = "B" Or Right(Range("N" & i).Value, 1) = "C" Then
        cmbxGrade.AddItem Range("N" & i)
    End If
Next i
'***************************************************** Cabeçalho Listbox 2 *******
    Call Ordena
    Call Retira_Repetidos
    Call Retira_Repetidos

depois de retirado as repetições, pois são vários pedidos que compõe uma grade, ele é ordenado. Aí e que entra seu código, lendo e atualizando os labels.

Grades: trabalhamos com impressão de cartões de visita e panfletos, o agrupamento destes impressos para rodar a impressão se chama grade. Cada grade cabe mais de 57 cartões e uns 30 panfletos. por isso que tem que retirar os repetidos.

 
Postado : 01/06/2012 12:02 pm