首页 > 解决方案 > EXCEL VBA ,仅在条件验证时才允许

问题描述

我需要一个条件来查看某个项目是否在 X wharehouse(CC) 中有库存,如果没有库存,则用户可以移动是否有库存,如果没有库存,则该项目无法移动。现在我有一个条件,只允许从 1 到最大库存。

last = Application.ThisWorkbook.Worksheets("Registos").Range("A65536").End(xlUp).Row

   For i = 1 To last
        REFERENCIA = Application.ThisWorkbook.Worksheets("Registos").Cells(i, 8)
        ENTRADAeSAIDA = Application.ThisWorkbook.Worksheets("Registos").Cells(i, 12)
        CC = Application.ThisWorkbook.Worksheets("Registos").Cells(i, 6)

下面是我的条件,假设要检查签入,如果没有签入就不能结帐,我的问题是我第一次运行 CommandButton 它不起作用,所以会有结帐没有任何检查在,并且在我第一次运行 CommandButton 之后,它可以工作,但不能正常工作,因为即使我有库存,它也不允许我移动任何东西

            If registos.ComboBox1 = "SAÍDA" Then
                If REFERENCIA <> registos.TextBox1 And CC = registos.Label11.Caption Then
                    MsgBox "Não existe em stock!"
                    GoTo fim
                Else: GoTo salto_1
                End If
            End If

在这里结束条件

salto_1:
            If REFERENCIA = registos.TextBox1 And registos.ComboBox1 = "SAÍDA" Then
                Worksheets("registos").Select
                ActiveSheet.ListObjects("Tabela1").Range.AutoFilter Field:=8, Criteria1:= _
                registos.TextBox1.Text                                                        'Filtrar referência

                ActiveSheet.ListObjects("Tabela1").Range.AutoFilter Field:=6, Criteria1:= _
                registos.Label11.Caption                                                      'Filtrar CC

                ActiveSheet.ListObjects("Tabela1").Range.AutoFilter Field:=12, Criteria1:= _
                "ENTRADA"                                                                     'Filtrar Entrada

                'Somar quantidades de peças de Entrada
                xty100 = ThisWorkbook.Worksheets("calculos").Range("A1")

                ActiveSheet.ListObjects("Tabela1").Range.AutoFilter Field:=12, Criteria1:= _
                "SAÍDA"                                                                       'Filtrar Saída

                'Somar quantidade de peças de saída
                xty101 = ThisWorkbook.Worksheets("calculos").Range("A1")

                sumfinal = xty100 - xty101                                                     'Calculo do Stock


                ThisWorkbook.Worksheets("calculos").Range("A20") = Format(registos.TextBox4, "@")
                xtybx4 = ThisWorkbook.Worksheets("calculos").Range("A20")

                If xtybx4 <= sumfinal And xtybx4 > 0 Then
                    GoTo salto_2
                Else
                    MsgBox "Não foi possível concluir o movimento!Stock  " & sumfinal & ""
                GoTo fim
                End If
            End If

    Next i






salto_2:




         If registos.TextBox3 = "" And registos.TextBox1 <> "" And registos.TextBox2 <> "" And registos.TextBox4 <> "" And registos.ComboBox5 <> "" Then
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 1, 1) = Now()                                                  'data
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 1, 5) = registos.Label20.Caption                               'ano fiscal
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 1, 6) = registos.Label11.Caption                               'cc
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 1, 7) = a1logiin.TextBox1                                      'operario
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 1, 8) = registos.TextBox1                                      'referencia formata
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 1, 9) = registos.TextBox2                                      'ordem
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 1, 11) = Format(registos.TextBox4, "#")                        'quantidade
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 1, 12) = registos.ComboBox1                                    'ENTRADA/SAIDA
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 1, 13) = registos.ComboBox5                                    ' ESTADO
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 1, 14) = Format(registos.ComboBox3, "#")                       'CODIGO DEFEITO
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 1, 16) = registos.ComboBox6                                    'ORIGEM DEFEITO
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 1, 17) = registos.TextBox5                                     'OBSERVAÇÕES
            MsgBox "Dados introduzidos com sucesso!"
            'GoTo fim
            GoTo fim2
         End If
            MsgBox "Insira todos os dados"
        GoTo fim

fim2: If registos.ComboBox1 <> "SAÍDA" Then
    GoTo fim
    End If


         If registos.ComboBox1 = "SAÍDA" And registos.TextBox3 = "" And registos.TextBox1 <> "" And registos.TextBox2 <> "" And registos.TextBox4 <> "" And registos.ComboBox5 <> "" And registos.ComboBox2 <> "" Then
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 2, 1) = Now()                                                  'data
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 2, 5) = registos.Label20.Caption           'ThisWorkbook.Worksheets("anofiscal").Range("A1")       'ano fiscal
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 2, 6) = registos.ComboBox2                                     'cc
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 2, 7) = a1logiin.TextBox1                                      'operario
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 2, 8) = registos.TextBox1                                      'referencia formata
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 2, 9) = registos.TextBox2                                      'ordem
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 2, 11) = Format(registos.TextBox4, "#")                        'quantidade
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 2, 12) = "ENTRADA"                                             'Define a saída de um como a entrada de outro
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 2, 13) = registos.ComboBox5                                    ' ESTADO
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 2, 14) = Format(registos.ComboBox3, "#")                       'CODIGO DEFEITO
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 2, 16) = registos.ComboBox6                                    'ORIGEM DEFEITO
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 2, 17) = registos.TextBox5                                     'OBSERVAÇÕES
            Application.ThisWorkbook.Worksheets("Registos").Cells(last + 2, 18) = registos.ComboBox7                                    'detalhe produção
            GoTo fim
            End If

If contador = 1 Then
        MsgBox "Foi efetuado o registo de " & contador & " referência!", vbInformation
   ' Else
    '    MsgBox "Foi efetuado o registo de " & contador & " referências!", vbInformation
End If
contador = 0
GoTo fim:

fim:
End Sub

标签: vbaexcelif-statement

解决方案


推荐阅读