数据将不会存储在Excel表单内

当ComboBox2等于NiPd时,我希望会有一个popup框,那么ComboBox6的值必须落在我设定的范围内。
如果超出范围,将显示popup消息。
除此之外,我的代码还会检查TextBox8值,当值超过3.2时,它也会显示popup消息。

但是我已经编译了所有的代码,当textbox8小于3.2时,当单击commandbutton1时,将无法将数据存储在Excel表格中。

除此之外,我还发现,如果我select在TextBox8中重新input值,它将自动存储我不希望发生的数据。 我希望,它只会存储我重新input的数据。 我坚持这一点,我完全不知道我的代码里面有什么问题。

我的代码如下:

Private Sub CommandButton1_Click() Sheets("Overall").Activate Dim m As Variant, RequiredRange As Variant Dim msg As Integer RequiredRange1 = Array("30S", "30A", "40S") RequiredRange2 = Array("10A", "15S", "15A", "20S") RequiredRange3 = Array("30S", "30A", "40S") If Me.ComboBox2.Value = "NiPd" Then m = Application.Match(ComboBox6.Value, RequiredRange1, False) If IsError(m) Then msg = MsgBox("Stabilizer Reading:" & ComboBox6.Value & Chr(10) & _ "Selection Value Out Of Range" & Chr(10) & Chr(10) & _ "Do You Want To Continue With Submission?", 36, "Warning") If msg = 7 Then Me.ComboBox6.SetFocus: Exit Sub End If End If If Me.ComboBox2.Value = "NiAu" Then m = Application.Match(ComboBox6.Value, RequiredRange2, False) If IsError(m) Then msg = MsgBox("Stabilizer Reading:" & ComboBox6.Value & Chr(10) & _ "Selection Value Out Of Range" & Chr(10) & Chr(10) & _ "Do You Want To Continue With Submission?", 36, "Warning") If msg = 7 Then Me.ComboBox6.SetFocus: Exit Sub End If End If If Me.ComboBox2.Value = "NiPdAu" Then m = Application.Match(ComboBox6.Value, RequiredRange3, False) If IsError(m) Then msg = MsgBox("Stabilizer Reading:" & ComboBox6.Value & Chr(10) & _ "Selection Value Out Of Range" & Chr(10) & Chr(10) & _ "Do You Want To Continue With Submission?", 36, "Warning") If msg = 7 Then Me.ComboBox6.SetFocus: Exit Sub End If End If With Me If Len(.ComboBox1.Value) * Len(.TextBox1.Value) * Len(.ComboBox7.Value) * Len(.ComboBox3.Value) * Len(.ComboBox2.Value) * Len(.TextBox2.Value) * Len(.TextBox3.Value) * Len(.ComboBox4.Value) * Len(.ComboBox5.Value) * Len(.TextBox4.Value) * Len(.TextBox5.Value) * Len(.TextBox6.Value) * Len(.ComboBox6.Value) * Len(.TextBox7.Value) * Len(.TextBox8.Value) * Len(.TextBox9.Value) = 0 Then MsgBox "Please Complete All Fields Before Submit" Else If CSng(.TextBox8.Text) > 3 Then If MsgBox("Plating Rate below than 3.0 um, Kindly stop production and use another Ni Bath" & vbLf & vbLf & _ "Do you wish to continue?", vbYesNo, "Exceeds") = vbNo Then MsgBox "user to re-type the value in TextBox8.", vbInformation, "Warning" If CSng(.TextBox8.Text) = 3.2 Then If MsgBox("Plating Rate below than 3.2 um , Standby the next Ni bath and start heat up to 65°" & vbLf & vbLf & _ "Do you wish to continue?", vbYesNo, "Exceeds") = vbNo Then MsgBox "user to re-type the value in TextBox8.", vbInformation, "Warning" Exit Sub End If End If End If eRow = Sheet4.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row Cells(eRow, 2).Value = ComboBox1.Text Cells(eRow, 5).Value = TextBox1.Text Cells(eRow, 1).Value = ComboBox7.Text Cells(eRow, 6).Value = ComboBox3.Text Cells(eRow, 15).Value = ComboBox2.Text Cells(eRow, 17).Value = TextBox2.Text Cells(eRow, 18).Value = TextBox3.Text Cells(eRow, 9).Value = ComboBox4.Text Cells(eRow, 11).Value = ComboBox5.Text Cells(eRow, 7).Value = TextBox4.Text Cells(eRow, 8).Value = TextBox5.Text Cells(eRow, 14).Value = TextBox6.Text Cells(eRow, 16).Value = ComboBox6.Text Cells(eRow, 12).Value = TextBox7.Text Cells(eRow, 13).Value = TextBox8.Text Cells(eRow, 19).Value = TextBox9.Text End If End If End With End Sub 

您应该避免编写代码,如: If msg = 7 Then Me.ComboBox6.SetFocus: Exit Sub因为它太难以查看发生了什么。 而是分割代码行:

 If msg = 7 Then Me.ComboBox6.SetFocus Exit Sub End If 

你也应该总是在If … End If块中缩进代码,因为这样可以更容易地看到代码是如何分组的。

如果你像下面那样重新组织你的代码,那么查看分组就变得容易了。 您还可以使用其他过程来保持大量的代码分离。 我已经添加了UpdateTheSheet proc。

 Private Sub CommandButton1_Click() Sheets("Overall").Activate Dim m As Variant, RequiredRange As Variant Dim msg As Integer RequiredRange1 = Array("30S", "30A", "40S") RequiredRange2 = Array("10A", "15S", "15A", "20S") RequiredRange3 = Array("30S", "30A", "40S") If Me.ComboBox2.Value = "NiPd" Then m = Application.Match(ComboBox6.Value, RequiredRange1, False) If IsError(m) Then msg = MsgBox("Stabilizer Reading:" & ComboBox6.Value & Chr(10) & _ "Selection Value Out Of Range" & Chr(10) & Chr(10) & _ "Do You Want To Continue With Submission?", 36, "Warning") If msg = 7 Then Me.ComboBox6.SetFocus Exit Sub End If End If End If If Me.ComboBox2.Value = "NiAu" Then m = Application.Match(ComboBox6.Value, RequiredRange2, False) If IsError(m) Then msg = MsgBox("Stabilizer Reading:" & ComboBox6.Value & Chr(10) & _ "Selection Value Out Of Range" & Chr(10) & Chr(10) & _ "Do You Want To Continue With Submission?", 36, "Warning") If msg = 7 Then Me.ComboBox6.SetFocus Exit Sub End If End If End If If Me.ComboBox2.Value = "NiPdAu" Then m = Application.Match(ComboBox6.Value, RequiredRange3, False) If IsError(m) Then msg = MsgBox("Stabilizer Reading:" & ComboBox6.Value & Chr(10) & _ "Selection Value Out Of Range" & Chr(10) & Chr(10) & _ "Do You Want To Continue With Submission?", 36, "Warning") If msg = 7 Then Me.ComboBox6.SetFocus Exit Sub End If End If End If With Me If Len(.ComboBox1.Value) * Len(.TextBox1.Value) * Len(.ComboBox7.Value) * Len(.ComboBox3.Value) * Len(.ComboBox2.Value) * Len(.TextBox2.Value) * Len(.TextBox3.Value) * Len(.ComboBox4.Value) * Len(.ComboBox5.Value) * Len(.TextBox4.Value) * Len(.TextBox5.Value) * Len(.TextBox6.Value) * Len(.ComboBox6.Value) * Len(.TextBox7.Value) * Len(.TextBox8.Value) * Len(.TextBox9.Value) = 0 Then MsgBox "Please Complete All Fields Before Submit" Else If CSng(.TextBox8.Text) > 3 Then If MsgBox("Plating Rate below than 3.0 um, Kindly stop production and use another Ni Bath" & vbLf & vbLf & _ "Do you wish to continue?", vbYesNo, "Exceeds") = vbNo Then MsgBox "user to re-type the value in TextBox8.", vbInformation, "Warning" If CSng(.TextBox8.Text) = 3.2 Then If MsgBox("Plating Rate below than 3.2 um , Standby the next Ni bath and start heat up to 65°" & vbLf & vbLf & _ "Do you wish to continue?", vbYesNo, "Exceeds") = vbNo Then MsgBox "user to re-type the value in TextBox8.", vbInformation, "Warning" Exit Sub End If End If End If eRow = Sheet4.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row UpdateTheSheet End If End If End With End Sub Private Sub UpdateTheSheet() ' Writes the values from user input to the worksheet Cells(eRow, 2).Value = ComboBox1.Text Cells(eRow, 5).Value = TextBox1.Text Cells(eRow, 1).Value = ComboBox7.Text Cells(eRow, 6).Value = ComboBox3.Text Cells(eRow, 15).Value = ComboBox2.Text Cells(eRow, 17).Value = TextBox2.Text Cells(eRow, 18).Value = TextBox3.Text Cells(eRow, 9).Value = ComboBox4.Text Cells(eRow, 11).Value = ComboBox5.Text Cells(eRow, 7).Value = TextBox4.Text Cells(eRow, 8).Value = TextBox5.Text Cells(eRow, 14).Value = TextBox6.Text Cells(eRow, 16).Value = ComboBox6.Text Cells(eRow, 12).Value = TextBox7.Text Cells(eRow, 13).Value = TextBox8.Text Cells(eRow, 19).Value = TextBox9.Text End Sub