Итак, я создаю форму в 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
Таким образом, когда вы нажимаете «Сохранить», он должен перенести ввод данных в форме на лист данных, и форма должна быть сброшена.Или наоборот, если вы нажмете «сброс», появится запрос на продолжение, и если вы нажмете «да», форма должна сброситься.
Теперь ни по одному из вариантов он ничего не делает.за исключением сброса до приглашения, ничего не произойдет, если вы продолжите сброс формы.