Página 1 de 1

"bloco if sem End if"

Enviado: 23 Mar 2018 às 16:53
por AMORIM123
Boa tarde galera.

Estou com o seguinte código abaixo de cadastro com validação de dados a partir do Trim$(frm.txt_periodo.Text) & Trim$(frm.txt_empresa.Text) para não mostrar ao usuário que já empresa cadastrada para o período, porém ao depurar o cód. ele retorno a mensagem: "bloco if sem End if", porém meu cód. tá ok, acho?!

Se alguém conseguir ver algum erro

Código: Selecionar todos
Private Sub btn_salvar_Click()

Dim plan As Worksheet
Dim quantidade As Long
Dim frm As frm_estoque
Dim empresa As Integer
Dim periodo As Date
Dim ei As Currency
Dim compras As Currency
Dim ef As Currency
Dim vendas As Currency
Dim linha As Integer
Dim busca As String
Dim novoRegistro As Boolean

Set plan = ThisWorkbook.Sheets("Estoque")
Set frm = frm_estoque
quantidade = plan.Cells(Rows.Count, 1).End(xlUp).Row + 1



linha = 2
periodo = Trim$(frm.txt_periodo.Text)
empresa = Trim$(frm.txt_empresa.Text)
ei = frm.txt_ei.Text
compras = frm.txt_compras.Text
ef = frm.txt_ef.Text
vendas = frm.txt_vendas

novoRegistro = True

plan.Activate
plan.Range("A2").Select

    Do While Cells(linha, 1) & Cells(linha, 2) <> ""
    
        busca = Trim$(frm.txt_periodo.Text) & Trim$(frm.txt_empresa.Text)
        If busca = periodo & empresa Then
            If MsgBox("Empresa " & empresa & " já cadastrado para o " & periodo & " , deseja sobrescreve-lo?!", vbYesNo) = vbYes Then
            
                Cells(linha, 1) = periodo
                Cells(linha, 2) = empresa
                Cells(linha, 3) = ei
                Cells(linha, 4) = compras
                Cells(linha, 5) = ef
                Cells(linha, 6) = vendas
                novoRegistro = False
            Else
                novoRegistro = False
                Exit Sub
            End If
        End If
        
        linha = linha + 1
        
            
    Loop
    
    
    If novoRegistro = True Then
        Cells(linha, 1) = periodo
        Cells(linha, 2) = empresa
        Cells(linha, 3) = ei
        Cells(linha, 4) = compras
        Cells(linha, 5) = ef
        Cells(linha, 6) = vendas
    End If
    
If Me.txt_periodo = "" Then
    MsgBox ("Preenchimento imconpleto! Insira Período"), vbExclamation, aviso
    Me.txt_periodo.SetFocus
    Exit Sub
If Me.txt_empresa = "" Then
    MsgBox ("Preenchimento imconpleto! Insira Empresa"), vbExclamation, aviso
    Me.txt_empresa.SetFocus
    Exit Sub
If Me.txt_ei = "" Then
    MsgBox ("Preenchimento imconpleto! Insira EI"), vbExclamation, aviso
    Me.txt_ei.SetFocus
    Exit Sub
If Me.txt_compras = "" Then
    MsgBox ("Preenchimento imconpleto! Insira Compras"), vbExclamation, aviso
    Me.txt_compras.SetFocus
    Exit Sub
ElseIf Me.txt_ef = "" Then
    MsgBox ("Preenchimento imconpleto! Insira EF"), vbExclamation, aviso
    Me.txt_ef.SetFocus
    Exit Sub
ElseIf Me.txt_vendas = "" Then
    MsgBox ("Preenchimento imconpleto! Insira Vendas"), vbExclamation, aviso
    Me.txt_vendas.SetFocus
    Exit Sub
End If


If MsgBox("Dados cadastrados com sucesso! Deseja realizar um novo registro?!", vbYesNo) = vbYes Then

        Call UserForm_Initialize
        
        Exit Sub
        
Else
    Unload Me


End If


End Sub
Segue planilha em anexo.
desde já muito obrigado!

Re: "bloco if sem End if"

Enviado: 23 Mar 2018 às 19:09
por osvaldomp
Há 3 Ifs sem End Ifs

If Me.txt_periodo = "" Then
...
End If

If Me.txt_empresa = "" Then
...
End If

If Me.txt_ei = "" Then
...
End If

"bloco if sem End if"

Enviado: 23 Mar 2018 às 19:36
por AMORIM123
:) É mesmo..ter mais cuidado..obrigado!

"bloco if sem End if"

Enviado: 26 Mar 2018 às 12:39
por AMORIM123
osvaldomp, coloquei os "esleif" antes dos if para não precisar finalizar (end if), porém meu cód. agora esta dando erro em tempo de execução ....objeto não encontrado:

O objetivo do cód. abaixo é salvar as informações inseridas nos meus txtbox, porém antes de salva fazer a validação para ver se já não há um cadastro com as mesmas informações, esta validação é feita pela concatenação "Trim$(frm.txt_periodo.Text) & Trim$(frm.txt_empresa.Text)", isto é se em uma linha tiver algum registro com essas informações ai o usuário é notificado por msgbox, para sobrescrever as informações ou não.... porém não entendo o porquê que não está rodando..já revisei várias vezes mais até momento nada...caso tenha como me ajudar te agradeço meu caro!
Código: Selecionar todos
Private Sub btn_calcular_Click()

Dim plan As Worksheet
Dim quantidade As Long
Dim frm As frm_estoque
Dim empresa As Integer
Dim periodo As Date
Dim ei As Currency
Dim compras As Currency
Dim ef As Currency
Dim vendas As Currency
Dim linha As Integer
Dim busca As String
Dim novoRegistro As Boolean

Set plan = ThisWorkbook.Sheets("Estoque")
Set frm = frm_estoque



quantidade = plan.Cells(Rows.Count, 1).End(xlUp).Row + 1
linha = 2
periodo = Trim$(frm.txt_periodo.Value)
empresa = Trim$(frm.txt_empresa.Value)
ei = frm.txt_ei.Text
compras = frm.txt_compras.Text
ef = frm.txt_ef.Text
vendas = frm.txt_vendas

novoRegistro = True

plan.Activate
plan.Range("A2").Select

    Do While Cells(linha, 2) & Cells(linha, 3) <> ""
    
        busca = Trim$(frm.txt_periodo.Text) & Trim$(frm.txt_empresa.Text)
        If busca = periodo & empresa Then
            If MsgBox("Empresa " & empresa & " já cadastrado para o " & periodo & " , deseja sobrescreve-lo?!", vbYesNo) = vbYes Then
            
                Cells(linha, 1) = periodo
                Cells(linha, 2) = empresa
                Cells(linha, 3) = ei
                Cells(linha, 4) = compras
                Cells(linha, 5) = ef
                Cells(linha, 6) = vendas
                novoRegistro = False
            Else
                novoRegistro = False
                Exit Sub
            End If
        End If
        
        linha = linha + 1
        
            
    Loop
    
    
    If novoRegistro = True Then
        Cells(linha, 1) = periodo
        Cells(linha, 2) = empresa
        Cells(linha, 3) = ei
        Cells(linha, 4) = compras
        Cells(linha, 5) = ef
        Cells(linha, 6) = vendas
    End If
    
If Me.txt_periodo = "" Then
    MsgBox ("Preenchimento imconpleto! Insira Período"), vbExclamation, aviso
    Me.txt_periodo.SetFocus
    Exit Sub
ElseIf Me.txt_empresa = "" Then
    MsgBox ("Preenchimento imconpleto! Insira Empresa"), vbExclamation, aviso
    Me.txt_empresa.SetFocus
    Exit Sub
ElseIf Me.txt_ei = "" Then
    MsgBox ("Preenchimento imconpleto! Insira EI"), vbExclamation, aviso
    Me.txt_ei.SetFocus
    Exit Sub
ElseIf Me.txt_compras = "" Then
    MsgBox ("Preenchimento imconpleto! Insira Compras"), vbExclamation, aviso
    Me.txt_compras.SetFocus
    Exit Sub
ElseIf Me.txt_ef = "" Then
    MsgBox ("Preenchimento imconpleto! Insira EF"), vbExclamation, aviso
    Me.txt_ef.SetFocus
    Exit Sub
ElseIf Me.txt_vendas = "" Then
    MsgBox ("Preenchimento imconpleto! Insira Vendas"), vbExclamation, aviso
    Me.txt_vendas.SetFocus
    Exit Sub
End If


If MsgBox("Dados cadastrados com sucesso! Deseja realizar um novo registro?!", vbYesNo) = vbYes Then

        Call UserForm_Initialize
        
Exit Sub
        
Else
    Unload Me

End If


End Sub

Em anexo minha planilha

Re: "bloco if sem End if"

Enviado: 26 Mar 2018 às 13:04
por babdallas
Você está colocando a empresa e o período em variáveis baseado no dados digitados nas respectivas textbox. Depois você comparar a concatenação destas variáveis com a concatenação dos textbox. Logo, este verificação será sempre verdadeira, pois você está comprando a mesma coisa.
Acredito que você queira verificar se a empresa X na data Y já está na planilha Estoque. É isso? Se for, usaria a função corresp (match no VBA) para verificar se a concatenação dos dados digitados nos textbox existem na planilha Estoque.

"bloco if sem End if"

Enviado: 26 Mar 2018 às 16:05
por AMORIM123
babdallas, sou bem iniciante teria como dar um exemplo da compilação usando o match (vba)?! :mrgreen:

Re: "bloco if sem End if"

Enviado: 26 Mar 2018 às 16:15
por babdallas
Primeiro preciso entender o que quer fazer. Veja se entendi corretamente:
Você quer realizar certos cálculos e armazená-los na planilha. Porém, antes de armazenar, você precisa verificar se a empresa e a data digitada pelo usuário nos textbox já estão na planilha. Se estiver, avise o usuário que já foi feito cadastro da empresa naquele dia e, se não houver, transferir os dados para a planilha na primeira linha vazia? É isso?

"bloco if sem End if"

Enviado: 26 Mar 2018 às 16:58
por AMORIM123
Isso mesmo, porém os cálculos são feitos na própria planilha e caso o período & empresa Já existam na planilha ...seja exibido ao usuário as opções: de sobrescrever vbyes com os novos dados ou não vbno para sair da sub...o cód já está com essa instrução só acho que me embralhei...no "Do while"