我是VBA的新手,我正在按照本教程学习使用VBA Button从Excel中添加,清除和删除记录。
我的添加和删除按钮无法正常工作。我不知道哪里错了。我复制了add/clear link和delete 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}}
这里有什么问题?
答案 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”