删除记录时出现错误1004“应用程序定义或对象定义的错误”

时间:2018-05-12 15:44:34

标签: excel vba excel-vba

我是VBA的新手,我正在按照本教程学习使用VBA Button从Excel中添加,清除和删除记录。

我的添加和删除按钮无法正常工作。我不知道哪里错了。我复制了add/clear linkdelete link

中的确切代码

所以这是我在下面添加的代码:

Dim currentrow As Long


Private Sub cmdDelete_Click()

answer = MsgBox("Are you sure you wish to delete the record?", vbYesNo + vbQuestion, "Delete Record?")
If answer = vbYes Then
Cells(currentrow, 1).EntireRow.Delete
End If
End Sub


Private Sub UserForm1_Initialize()

currentrow = 12
TextBox1 = Cells(currentrow, 1)
TextBox2 = Cells(currentrow, 2)
TextBox3 = Cells(currentrow, 3)
TextBox4 = Cells(currentrow, 4)
TextBox5 = Cells(currentrow, 5)
TextBox6 = Cells(currentrow, 6)
TextBox7 = Cells(currentrow, 7)
TextBox8 = Cells(currentrow, 8)
TextBox9 = Cells(currentrow, 9)
TextBox10 = Cells(currentrow, 10)

End Sub

上述工作正常。但它没有显示警告信息重复记录。即使我重复相同的记录,它也没有显示任何警告。我的行从12开始。

2)删除按钮抛出错误 错误1004“应用程序定义或对象定义的错误”

这是删除按钮的代码

{{1}}

这里有什么问题?

2 个答案:

答案 0 :(得分:1)

使用VBA可以了解的一点是,您可以通过单击编码区域的左侧边距来设置断点。在你" Run"代码,程序在断点处停止。然后你可以按f8逐行,鼠标悬停变量来查看它们的值,然后使用立即窗口测试它们。

添加记录有什么问题?像TextBox1 = Cells(i, 1)这样的VBA比较区分大小写,因此请尝试使用:

Option Compare Text

位于模块顶部。

要弄清楚为什么cmdDelete不起作用,请将断点放在Cells(currentrow, 1).EntireRow.Delete所在的位置。当代码停止时,将鼠标移到currentrow上并检查其值。如果它真的是12,那么你的代码应该有用......如果它不是,你需要弄清楚模块中currentrow的值的设置。

祝你好运。

答案 1 :(得分:1)

除了你已经被其他回答者告知的所有其他内容之外,你正在扩展“For i = 12 to lastrow ... Next”循环以包含整个“cmdAdd()”代码,而你要关闭它就在你第一次“结束如果”之后

然后,一旦您知道没有重复项,请等待添加新记录

此外,您可以使用userform对象的Controls()属性来返回想要的文本框,从而使您可以使用循环来编写或读取所有文本框

最后,使用WorksheetFunction.CountIf()并避免循环

Dim currentrow As Long

Private Sub cmdAdd_Click()
    Dim lastrow As Long, count As Long, j As Long

    With Sheet1
        lastrow = .Cells(.Rows.count, 1).End(xlUp).Row
        count = WorksheetFunction.CountIf(.Range(.Cells(12, 1), .Cells(lastrow, 1)), Me.TextBox1.Value)
        If count > 0 Then
            MsgBox ("Duplicate entry ! Name already exists!")
        Else
            For j = 1 To 10
                .Cells(lastrow + 1, j) = Me.Controls("TextBox" & j).Value
            Next
        End If
   End With
End Sub


Private Sub cmdDelete_Click()
    If MsgBox("Are you sure you wish to delete the record in row " & currentow & "?", vbYesNo + vbQuestion, "Delete Record?") = vbYes Then
        Sheet1.Cells(currentrow, 1).EntireRow.Delete
    End If
End Sub


Private Sub UserForm_Initialize()
    Dim i As Long

    currentrow = 12
    With Me
        For i = 1 To 10
            .Controls("TextBox" & i).Value = Sheet1.Cells(currentrow, i)
        Next
    End With
End Sub

作为旁注,你的cmdDelete()总是删除第12行的记录,除非你有一些代码来更新“currentrow”