Excel代码,我的“添加数据”按钮不起作用

时间:2016-09-26 04:47:40

标签: excel excel-vba excel-2013 vba

我是编码的新手,并通过谷歌搜索得到了这一点。我希望这是一个相当简单的代码更改。我有一个表格,显示我想要的东西。我的关闭按钮工作,但我的“添加数据”按钮不起作用。因为它没有填充我在excel中输入完成的表单到工作表的信息。无论我输入什么内容,我都会得到第一列填充0.1,如果有人愿意帮助的话,这是我的代码。我将非常感激。

Private Sub cmdbutton_add_Click()
Dim iRow As Long
Dim ws As Worksheet
Set ws = Worksheets("Inputs")

'find first empty row in database
iRow = ws.Cells.Find(What:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row + 1

'Check for a Name number
If Trim(Me.textbox_lineno.Value) = " " Then
Me.textbox_lineno.SetFocus
MsgBox "Please Complete the form"
Exit Sub
End If

'copy the data to the database
ws.Cells(iRow, 1).Value = Me.textbox_lineno.Value
ws.Cells(iRow, 1).Value = Me.listbox_pipetype.Value
ws.Cells(iRow, 1).Value = Me.textbox_frompit.Value
ws.Cells(iRow, 1).Value = Me.textbox_topitormh.Value
ws.Cells(iRow, 1).Value = Me.textbox_linealm.Value
ws.Cells(iRow, 1).Value = Me.textbox_depthstart.Value
ws.Cells(iRow, 1).Value = Me.textbox_depthend.Value
ws.Cells(iRow, 1).Value = Me.textbox_pipedia.Value
ws.Cells(iRow, 1).Value = Me.textbox_beddingbelow.Value
ws.Cells(iRow, 1).Value = Me.textbox_beddingabove.Value
ws.Cells(iRow, 1).Value = Me.textbox_roadallowance.Value

MsgBox "Data Added", vbOKOnly + vbInformation, "Data Added"

'Clear the data
Me.textbox_lineno.Value = ""
Me.listbox_pipetype.Value = ""
Me.textbox_frompit.Value = ""
Me.textbox_topitormh.Value = ""
Me.textbox_linealm.Value = ""
Me.textbox_depthstart.Value = ""
Me.textbox_depthend.Value = ""
Me.textbox_pipedia.Value = ""
Me.textbox_beddingbelow.Value = ""
Me.textbox_beddingabove.Value = ""
Me.textbox_roadallowance.Value = ""
Me.textbox_lineno.SetFocus
End Sub







Private Sub cmdbutton_close_Click()
Unload Me
End Sub

1 个答案:

答案 0 :(得分:1)

这一行永远不应该验证:

If Trim(Me.textbox_lineno.Value) = " " Then

您永远不会增加列分配。如果我知道对象存在,那么我通常会选择使用另一个变量的With Object语句。

我将用于清除文本框的代码解压缩到他们自己的子例程中。

因为所有数据都在一行而With .Range("A1", .Range("A" & .Rows.Count).End(xlUp)).Offset(1)引用该行的第一个单元格,所以我使用Columns(x)类似于使用.Cells(1,x)。我觉得它看起来更干净。

我觉得这些改动是为了巩固代码;让它更容易阅读。您不必在页面上下滚动以查看子工作正在做什么。

Private Sub cmdbutton_add_Click()
    'Check for a Name number
    If Trim(Me.textbox_lineno.Value) = "" Then
        Me.textbox_lineno.SetFocus
        MsgBox "Please Complete the form", vbInformation, "Action Cancelled"
        Exit Sub
    End If

    With Worksheets("Inputs")
        With .Range("A1", .Range("A" & .Rows.Count).End(xlUp)).Offset(1)
            'copy the data to the database
            .Columns(1).Value = Me.textbox_lineno.Value
            .Columns(2).Value = Me.listbox_pipetype.Value
            .Columns(3).Value = Me.textbox_frompit.Value
            .Columns(4).Value = Me.textbox_topitormh.Value
            .Columns(5).Value = Me.textbox_linealm.Value
            .Columns(6).Value = Me.textbox_depthstart.Value
            .Columns(7).Value = Me.textbox_depthend.Value
            .Columns(8).Value = Me.textbox_pipedia.Value
            .Columns(9).Value = Me.textbox_beddingbelow.Value
            .Columns(10).Value = Me.textbox_beddingabove.Value
            .Columns(11).Value = Me.textbox_roadallowance.Value
        End With
    End With

    MsgBox "Data Added", vbOKOnly + vbInformation, "Data Added"

    ClearForm

    Me.textbox_lineno.SetFocus
End Sub

Function ClearForm()
    'Clear the data
    Me.textbox_lineno.Value = ""
    Me.listbox_pipetype.Value = ""
    Me.textbox_frompit.Value = ""
    Me.textbox_topitormh.Value = ""
    Me.textbox_linealm.Value = ""
    Me.textbox_depthstart.Value = ""
    Me.textbox_depthend.Value = ""
    Me.textbox_pipedia.Value = ""
    Me.textbox_beddingbelow.Value = ""
    Me.textbox_beddingabove.Value = ""
    Me.textbox_roadallowance.Value = ""
End Function

enter image description here