数据不会存储在Excel工作表

时间:2015-05-29 02:09:04

标签: excel vba excel-vba

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

但我编译了所有代码,当涉及到textbox8小于3.2时,当点击commandbutton1时,它无法将数据存储在excel表中。

除此之外,我还发现如果我选择重新键入TextBox8中的值,它将自动存储我的数据,这是我不希望它发生的。 我希望,它只会存储我重新输入的数据。 我坚持这一点,我完全不知道我的代码中出了什么问题。

我的代码如下:

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

1 个答案:

答案 0 :(得分:1)

你应该避免编写像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