Я не знаком с этой ошибкой? Не уверен, с чего начать, чтобы решить проблему - PullRequest
0 голосов
/ 13 июня 2019

Итак, я создаю форму в Excel, используя VBA, и у меня есть весь код.Я хотел проверить форму и сохранить ее, чтобы она экспортировала данные на другой лист в той же книге.Я заполнил форму и нажал «Сохранить», и она ничего не делает.Я захожу в vba, и я получаю ошибку времени выполнения '424', и она не говорит, где код неисправен или проблема.

Я пробовал запускать функции в перерывах и не мог их сузить.

Function ValidateForm() As Boolean

    txtDA.BackColor = vbWhite
    txtTB.BackColor = vbWhite
    txtPN.BackColor = vbWhite
    cmbMO.BackColor = vbWhite
    txtLO.BackColor = vbWhite
    cmbDT.BackColor = vbWhite
    txtPO.BackColor = vbWhite
    txtQU.BackColor = vbWhite
    txtMR.BackColor = vbWhite

    ValidateForm = True

    If Trim(txtDA.Value) = "" Then

        MsgBox "Date can't be left blank.", vbOKOnly + vbInformation, "Date"
        txtDA.BackColor = vbRed
        txtDA.Activate
        ValidateForm = False

    ElseIf Trim(txtTB.Value) = "" Then
        MsgBox "Transferred By name can't be left blank.", vbOKOnly + vbInformation, "Transferred By"
        txtTB.BackColor = vbRed
        txtTB.Activate
        ValidateForm = False

    ElseIf Trim(txtPN.Value) = "" Then
        MsgBox "Part Number can't be left blank.", vbOKOnly + vbInformation, "Part Number"
        txtPN.BackColor = vbRed
        txtPN.Activate
        ValidateForm = False

    ElseIf cmbMO.Text <> "Inventory" And cmbMO.Text <> "Production" And _
            cmbMO.Text <> "Box Assembly Area" And cmbMO.Text <> "Other" Then

        MsgBox "Please select the correct Material Origin from drop down and explain in the Material Movement Rationale section.", vbOKOnly + vbInformation, "Material Origin"
        cmbMO.BackColor = vbRed
        cmbMO.Activate
        ValidateForm = False

    ElseIf Trim(txtLO.Value) = "" Then
        MsgBox "Lot can't be left blank.", vbOKOnly + vbInformation, "Lot"
        txtLO.BackColor = vbRed
        txtLO.Activate
        ValidateForm = False

    ElseIf cmbDT.Text <> "Damaged" And cmbDT.Text <> "Expired" And _
            cmbDT.Text <> "Unapproved Item" And cmbDT.Text <> "Obsolete" And _
            cmbDT.Text <> "Other" Then
        MsgBox "Please select the correct Defect Type if unknown select Other from drop down and explain in the Material Movement Rationale section.", vbOKOnly + vbInformation, "Qualification"
        cmbDT.BackColor = vbRed
        cmbDT.Activate
        ValidateForm = False

    ElseIf Trim(txtPO.Value) = "" Then
        MsgBox "P.O. can't be left blank if not applicable enter N/A.", vbOKOnly + vbInformation, "P.O."
        txtPO.BackColor = vbRed
        txtPO.Activate
        ValidateForm = False

    ElseIf Trim(txtQU.Value) = "" Then
        MsgBox "Quantity can't be left blank.", vbOKOnly + vbInformation, "Quantity"
        txtQU.BackColor = vbRed
        txtQU.Activate
        ValidateForm = False

    ElseIf Trim(txtMR.Value) = "" Then
        MsgBox "Material Movement Rationale can't be left blank.", vbOKOnly + vbInformation, "Material Movement Rationale"
        txtMO.BackColor = vbRed
        txtMO.Activate
        ValidateForm = False

    End If

End Function


Function Reset()

    Application.ScreenUpdating = False

    txtDA.Value = ""
    txtDA.BackColor = vbWhite

    txtTB.Value = ""
    txtTB.BackColor = vbWhite

    txtPN.Value = ""
    txtPN.BackColor = vbWhite

    cmbMO.Text = ""
    cmbMO.BackColor = vbWhite

    txtLO.Value = ""
    txtLO.BackColor = vbWhite

    cmbDT.Text = ""
    cmbDT.BackColor = vbWhite

    txtPO.Value = ""
    txtPO.BackColor = vbWhite

    txtQU.Value = ""
    txtQU.BackColor = vbWhite

    txtMR.Value = ""
    txtMR.BackColor = vbWhite

    Application.ScreenUpdating = True


End Function




Private Sub cmdReset_Click()

    Dim i As Integer

    i = MsgBox("Do you want to reset this form?", vbQuestion + vbYesNo + vbDefaultButton2, "Form Reset")

    If i = vbYes Then

        Call Reset

    End If

End Sub

Private Sub cmdSave_Click()

    Application.ScreenUpdating = False

    Dim iRow As Long

    iRow = Sheets("Data").Range("A1048576").End(xlUp).Row + 1

    If ValidateForm = True Then

        With ThisWorkbook.Sheets("Data")

           .Range("A" & iRow).Value = iRow - 1
           .Range("B" & iRow).Value = txtDA.Value
           .Range("C" & iRow).Value = txtTB.Value
           .Range("D" & iRow).Value = txtPN.Value
           .Range("E" & iRow).Value = cmbMO.Text
           .Range("F" & iRow).Value = txtLO.Value
           .Range("G" & iRow).Value = cmbDT.Text
           .Range("H" & iRow).Value = txtPO.Value
           .Range("I" & iRow).Value = txtQU.Value
           .Range("J" & iRow).Value = txtMR.Value

        End With
        Call Reset
    Else
        Application.ScreenUpdating = True
        Exit Sub
    End If

        Application.ScreenUpdating = True

End Sub

Таким образом, когда вы нажимаете «Сохранить», он должен перенести ввод данных в форме на лист данных, и форма должна быть сброшена.Или наоборот, если вы нажмете «сброс», появится запрос на продолжение, и если вы нажмете «да», форма должна сброситься.

Теперь ни по одному из вариантов он ничего не делает.за исключением сброса до приглашения, ничего не произойдет, если вы продолжите сброс формы.

...