Funçao Activate par...
 
Notifications
Clear all

Funçao Activate parcial, porque?

8 Posts
2 Usuários
0 Reactions
1,963 Visualizações
(@fabioprade)
Posts: 273
Reputable Member
Topic starter
 

Saudaçoes a todos,

Neste projeto, ao ativar o formulario ele deveria ser carregado com informaçoes de varias plans, mas esta carregando somente as informaçoes da plan ativa, porque???
Outra coisa, as datas estao sendo salvas com dia e mes invertidos, ja li um pouco de tudo na rede mas nao consegui resolver.

Obrigado

Fabio

 
Postado : 02/11/2012 6:13 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Ao ativar o formulario o codigo que "pesquisa" a ultima linha não restringe planilha, portanto "pega" a que está ativa, e nem todas terão o mesmo numero de registros.
É necesario que seja determinada em cada "IF" o numero de registros para cada sheet. Poderá ser algo assim (somente o trecho afetado:

Private Sub userform_activate()
Dim lastRow As Integer
   
lastRow = Sheets("Copel").Cells(Cells.Rows.Count, "A").End(xlUp).Row
If Sheets("Copel").Range("D" & lastRow).Text = "Pago" Then
    'MsgBox "Nao ha faturas em aberto da Copel", vbInformation
    TextBox8.Value = Sheets("Copel").Range("A" & lastRow)
    TextBox9.Value = Sheets("Copel").Range("B" & lastRow)
    TextBox10.Value = Sheets("Copel").Range("D" & lastRow)
    TextBox11.Value = Sheets("Copel").Range("E" & lastRow)
Else
    TextBox4.Value = Sheets("Copel").Range("A" & lastRow)
    TextBox5.Value = Sheets("Copel").Range("B" & lastRow)
    TextBox6.Value = Sheets("Copel").Range("D" & lastRow)
    TextBox7.Value = Sheets("Copel").Range("C" & lastRow)
    TextBox8.Value = Sheets("Copel").Range("A" & lastRow - 1)
    TextBox9.Value = Sheets("Copel").Range("B" & lastRow - 1)
    TextBox10.Value = Sheets("Copel").Range("D" & lastRow - 1)
    TextBox11.Value = Sheets("Copel").Range("E" & lastRow - 1)
End If
    
lastRow = Sheets("Tim").Cells(Cells.Rows.Count, "A").End(xlUp).Row
If Sheets("Tim").Range("D" & lastRow).Text = "Pago" Then
    'MsgBox "Nao ha faturas em aberto da Tim", vbInformation
    TextBox16.Value = Sheets("Tim").Range("A" & lastRow)
    TextBox17.Value = Sheets("Tim").Range("B" & lastRow)
    TextBox18.Value = Sheets("Tim").Range("D" & lastRow)
    TextBox19.Value = Sheets("Tim").Range("E" & lastRow)
Else
    TextBox12.Value = Sheets("Tim").Range("A" & lastRow)
    TextBox13.Value = Sheets("Tim").Range("B" & lastRow)
    TextBox14.Value = Sheets("Tim").Range("D" & lastRow)
    TextBox15.Value = Sheets("Tim").Range("C" & lastRow)
    TextBox16.Value = Sheets("Tim").Range("A" & lastRow - 1)
    TextBox17.Value = Sheets("Tim").Range("B" & lastRow - 1)
    TextBox18.Value = Sheets("Tim").Range("D" & lastRow - 1)
    TextBox19.Value = Sheets("Tim").Range("E" & lastRow - 1)
End If

lastRow = Sheets("GVT").Cells(Cells.Rows.Count, "A").End(xlUp).Row
If Sheets("GVT").Range("D" & lastRow).Text = "Pago" Then
    'MsgBox "Nao ha faturas em aberto da GVT", vbInformation
    TextBox24.Value = Sheets("GVT").Range("A" & lastRow)
    TextBox25.Value = Sheets("GVT").Range("B" & lastRow)
    TextBox26.Value = Sheets("GVT").Range("D" & lastRow)
    TextBox27.Value = Sheets("GVT").Range("E" & lastRow)
Else
    TextBox20.Value = Sheets("GVT").Range("A" & lastRow)
    TextBox21.Value = Sheets("GVT").Range("B" & lastRow)
    TextBox22.Value = Sheets("GVT").Range("D" & lastRow)
    TextBox23.Value = Sheets("GVT").Range("C" & lastRow)
    TextBox24.Value = Sheets("GVT").Range("A" & lastRow - 1)
    TextBox25.Value = Sheets("GVT").Range("B" & lastRow - 1)
    TextBox26.Value = Sheets("GVT").Range("D" & lastRow - 1)
    TextBox27.Value = Sheets("GVT").Range("E" & lastRow - 1)
End If
......

Qto as datas e valores;
Nativamente um TextBox "passa" seus "dados (valores)" como Texto (string); portando para salvar esses dados como numero ou data, os mesmos devem ser convertidos.
Tambem uma formatação previa das celulas/colunas da planilha que ira receber esses dados e recomendado.
Ficara algo assim (somente trecho afetado):

....
ActiveCell.Offset(lastRow - 1, 0).Value = CDate(TxtData.Text)
ActiveCell.Offset(lastRow - 1, 1).Value = CStr(TxtValor.Text)
....

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

 
Postado : 03/11/2012 7:58 am
(@fabioprade)
Posts: 273
Reputable Member
Topic starter
 

Obrigado Reinaldo, resolvidas as duas questoes, mas agora te faço outras duas:

Sempre no activate do mesmo formulario, adicionei algumas msgbox...

If Controle.TextBox6.Text = "Em Atraso" Then
MsgBox (" Atençao!!! Voce tem fatura da COPEL em aberto vencida em " & TextBox4.Value & "no valor de" & TextBox5.Value), vbCritical
End If

...so que isto ficou meio chato porque toda vez que inicia o form ele repete as msgbox, pensei que colocando no ( workbook_open ) ele resolveria, mas estava errado, tem alguma forma de fazer aparecer so ao iniciar o programinha?
E tem como agrupar todas as mensagens de alguma forma, sem que ele abra uma msgbox para cada ocorrencia?

Obrigado

Fabio

 
Postado : 03/11/2012 3:07 pm
(@fabioprade)
Posts: 273
Reputable Member
Topic starter
 

Acabei encontrando na rede uma alternativa postado pelo Mauro em outro forum...

Sub LocalizaPrimeiroVencido()
Dim I As Variant

Dim wshVenc As Worksheet
Set wshVenc = Worksheets("BASE") 'Altere para o nome da sua Aba

For Each I In wshVenc.Range("E2:E" & wshVenc.Range("A65536").End(xlUp).Row)
If I = "Menos de Cinco Dias" Then
MsgBox "existem datas,com menos de cinco dias para o vencimento"
Exit Sub
End If
Next

End Sub

...acabou que cedi por fazer a busca em uma plan, visto que nao cconsegui fazer pelo form, adaptei e esta rodando legal, mas fica ainda a questao de agrupar resultados de busa em uma unicca msgbox.

Um grande abraço a todos.

Fabio

 
Postado : 03/11/2012 4:43 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Talvez assim:

Sub LocalizaPrimeiroVencido()
Dim LRow As Long, NbPlan As Long, I As Long, T As Long
Dim MyArray(3) As Variant, msg As Variant
MyArray(0) = "Copel"
MyArray(1) = "Tim"
MyArray(2) = "GVT"

For NbPlan = 0 To 2

Sheets(MyArray(NbPlan)).Select

LRow = Cells(Cells.Rows.Count, "A").End(xlUp).Row

    For I = 3 To LRow
    T = 0
        If Cells(I, "D") = "Em Atraso" Then
            T = T + 1
        End If
    Next
        If MyArray(nvplan) = 0 Then
            msg = msg + "Conta " & MyArray(NbPlan) & " Tem " & T & " datas em Atraso"
        Else
            msg = msg + Chr(10) + "Conta " & MyArray(NbPlan) & " Tem " & T & " datas em Atraso"
        End If
Next
MsgBox msg
End Sub

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

 
Postado : 04/11/2012 7:55 am
(@fabioprade)
Posts: 273
Reputable Member
Topic starter
 

Bom dia Reinaldo,

muito obrigado pela resposta, show de bola como sempre, so que neste teu codigo, ele considera somente a ultima linha( fatura ) da plan, se eu tiver a ultima para vencer e a penultima Em Atraso, ele nao vai buscar...

...estou aqui quebrando a cabeça para entender como mudar isto mas ta dificil, conto ccom a tua ajuda mais uma vez.

obrigado

 
Postado : 04/11/2012 11:19 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Oppss!!

Sub LocalizaPrimeiroVencido()
Dim LRow As Long, NbPlan As Long, I As Long, T As Long
Dim MyArray(3) As Variant, msg As Variant
MyArray(0) = "Copel"
MyArray(1) = "Tim"
MyArray(2) = "GVT"

For NbPlan = 0 To 2

Sheets(MyArray(NbPlan)).Select

LRow = Cells(Cells.Rows.Count, "A").End(xlUp).Row
    T = 0
    For I = 3 To LRow
        If Cells(I, "D") = "Em Atraso" Then
            T = T + 1
        End If
    Next
        If NbPlan = 0 Then
            msg = msg + "Conta " & MyArray(NbPlan) & " Tem " & T & " datas em Atraso"
        Else
            msg = msg + Chr(10) + "Conta " & MyArray(NbPlan) & " Tem " & T & " datas em Atraso"
        End If
Next
MsgBox msg
End Sub

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

 
Postado : 04/11/2012 12:17 pm
(@fabioprade)
Posts: 273
Reputable Member
Topic starter
 

Muito obrigado Reinaldo, ate o proximo topico que ja estou escrevendo,

 
Postado : 04/11/2012 12:49 pm