Notifications
Clear all

Ajuste em Código - Concatenar em Código VBA

11 Posts
3 Usuários
0 Reactions
2,630 Visualizações
chook
(@chook)
Posts: 197
Estimable Member
Topic starter
 

Boa tarde!

Então, tenho uma série de labels que retornam os resultados de um mês. Onde cada label é referente ao dia.

Na minha lógica criei um laço onde inicia em 1 e finaliza em 31, pesquisando e carregando os valores em soma1 para o dia 1, soma2 para o dia 2 e assim por diante.

O que não consegui fazer foi utilizar o concatenar para que ajuste o nome dos somatorios, soma1, soma2 como "soma" & y e escreva no resultado de receitas do dia 1, dia 2, "rec" & y & ".caption"

For y = 1 To 31
    For j = 3 To UltimaLinha
        If Month(Range("AH" & j).Value) = 1 And Year(Range("AH" & j).Value) = CInt(anoatual) And Day(Range("AH" & j).Value) = y Then
            Soma1 = Soma1 + Sheets("Pedidos").Range("U" & j).Value
        End If
    Next
    rec1.Caption = Format(Soma1, "#,##0.00")
Next

Forte abraço a todos!!

Atenciosamente,

Alex Lacerda
[email protected]

 
Postado : 25/05/2012 12:59 pm
benzadeus
(@benzadeus)
Posts: 78
Trusted Member
 
Dim Soma(1 To 31) As Double

For y = 1 To 31
    For j = 3 To UltimaLinha
        If Month(Range("AH" & j).Value) = 1 And Year(Range("AH" & j).Value) = CInt(anoatual) And Day(Range("AH" & j).Value) = y Then
            Soma(y) = Soma(y) + Sheets("Pedidos").Range("U" & j).Value
        End If
    Next
    rec1.Caption = Format(Soma1, "#,##0.00")
Next

'Para testar
For y = 1 To 31
    Debug.Print Soma(y)
Next y

Felipe Costa Gualberto
Microsoft Excel MVP
http://www.ambienteoffice.com.br

 
Postado : 25/05/2012 4:35 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Benzadeus,

Seja bem vindo ao fórum. Esse é fera!!

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 26/05/2012 7:08 am
chook
(@chook)
Posts: 197
Estimable Member
Topic starter
 

Bom dia Benzadeus,

após a modificação o código ficou assim:


Private Sub janeiro_Click()
Dim UltimaLinha, i, z, y, j As Integer
Dim Soma1, Soma2, Soma3, Soma4, Soma5, Soma6, Soma7, Soma8, Soma9, Soma10, Soma11, Soma12 As Double
Dim Soma13, Soma14, Soma15, Soma16, Soma17, Soma18, Soma19, Soma20, Soma21, Soma22, Soma23, Soma24 As Double
Dim Soma25, Soma26, Soma27, Soma28, Soma29, Soma30, Soma31 As Double

Sheets("Pedidos").Select
UltimaLinha = Sheets("Pedidos").Cells(Cells.Rows.Count, 1).End(xlUp).Row
If UltimaLinha < 3 Then UltimaLinha = 3
For y = 1 To 31
    For j = 3 To UltimaLinha
        If Month(Range("AH" & j).Value) = 1 And Year(Range("AH" & j).Value) = CInt(anoatual) And Day(Range("AH" & j).Value) = y Then
            Soma(y) = Soma(y) + Sheets("Pedidos").Range("U" & j).Value
        End If
    Next
    rec(y).Caption = Format(Soma(y), "#,##0.00")
Next
End Sub

O problema é que ao clicar no botão que chama esta função apresenta o erro: "Erro de compilação: 'Sub" ou 'Function' não definida". Não consegui identificar o problem! :D

Atenciosamente,

Alex Lacerda
[email protected]

 
Postado : 28/05/2012 7:47 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Lacerda, voce precisa declarar a variavel Soma, conforme o codigo do Gualberto(Benzadeus):"Dim Soma(1 To 31) As Double".

Observação:
Em uma declaração de variaveis, para cada variavel e necessario a indicação do tipo ("As"), caso contrario assumirão o vlr padrão.
Exemplo: Dim UltimaLinha, i, z, y, j As Integer, sómente y é considerado "Integer", as demais assumem o valor padrão "Variant"
Para que todas seja consaideradas como y a declaração deve ser:
Dim UltimaLinha As Integer, i As Integer, z As Integer, y As Integer, j As Integer

Com o codigo reformulado, não é necessario a declaração de todas essas variaveis

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 28/05/2012 8:58 am
chook
(@chook)
Posts: 197
Estimable Member
Topic starter
 

Reinaldo, já consertei! apesar de meu codigo está todo erradooooooo! Vou ter que ajustar isso;

Bom agora esta apresentando outro erro. Na linha abaixo, não sei como declarar isso! o nome do label é rec1, rec2, rec3 etc...

rec(y).Caption = Format(Soma(y), "#,##0.00")

Atenciosamente,

Alex Lacerda
[email protected]

 
Postado : 28/05/2012 9:10 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não entendi bem , mas tente :
Rec= "rec" & y
Rec.caption...........

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 28/05/2012 9:51 am
chook
(@chook)
Posts: 197
Estimable Member
Topic starter
 

Não funcionou!!

"rec" & y & ".Caption" = Format(Soma(y), "#,##0.00")

Continua com erro nos nomes dos labels!

Atenciosamente,

Alex Lacerda
[email protected]

 
Postado : 28/05/2012 11:23 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não funcionou!!

"rec" & y & ".Caption" = Format(Soma(y), "#,##0.00")

Continua com erro nos nomes dos labels!

Pelo que entendi da questão, você está utilizando Controles "Label" nomeados rec1, rec2, rec3........

Só que não vi nenhuma linha na rotina referenciando-os como sendo Controles do tipo Label.

Na dica do Reinaldo, definimos o valor da Variavel "Rec " como sendo a concatenação do "Texto" "rec" e o valor de "y" :
Rec = "rec" & y
e utilizando a instrução: MsgBox Rec, nos daria o valor concatenado, até ai tudo certo, mas em que parte ou em que rotina temos a definição que citei acima (Controle Label)

De uma olhada na explicação e baixe o exemplo do site abaixo :
É sobre os CommandButtons, mas é só alterar o tipo de controle para Label :
Handle Multiple UserForm Buttons With One Subroutine
http://j-walk.com/ss/excel/tips/tip44.htm

No Forum temos alguns tópicos sobre tipo de controles, é só dar uma pesquisada.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 28/05/2012 7:23 pm
chook
(@chook)
Posts: 197
Estimable Member
Topic starter
 

Agooooora entendi! :D Desculpe meu atraso, foi que demorei para respirar quando nasci...

Ajustei o comando conforme abaixo, técnica mente está funcionando, pois o msgbox apresenta rec1.caption . No entanto não altera os valores dos rec´s... O que estou fazendo de errado?

receit = "rec" & y & ".Caption"
receit = Format(Soma(y), "#,##0.00")

Atenciosamente,

Alex Lacerda
[email protected]

 
Postado : 29/05/2012 6:06 am
chook
(@chook)
Posts: 197
Estimable Member
Topic starter
 

Amigos Alguma luz?

Atenciosamente,

Alex Lacerda
[email protected]

 
Postado : 31/05/2012 6:45 am