我对此有点不知所措。我目前正在开发一个用户表单,它能够从表中添加、更新和删除记录。
我的删除功能有问题。在删除所选记录时,它会复制表中的最后一条记录,以便记录数保持不变。
下面是具体的代码,c_01 指的是包含每个条目唯一标识符的组合框。
删除功能:
Private Sub B_02_Click() ' Delete
With c_01
.RemoveItem .ListIndex
If .ListCount > 0 Then .ListIndex = 0
If .ListIndex = -1 Then
For j = 0 To UBound(.List, 2)
Me("T_" & Format(j, "00")) = ""
Me("T_" & Format(j, "00")).Locked = True
Next
.Value = ""
End If
End With
End Sub
保存功能:
Private Sub b_03_Click() ' Save
With Sheets("Data").ListObjects(1)
.ShowTotals = False
If c_01.ListCount = 0 Then .DataBodyRange.ClearContents
If c_01.ListCount > 0 Then .DataBodyRange.Resize(c_01.ListCount).Value = c_01.List
.ShowTotals = True
End With
Hide
End Sub
关于为什么这会创建最后一条记录的副本而不是简单地删除指定记录的任何提示都会有所帮助。
如果您需要完整的代码或用户表单的屏幕截图,我可以提供。
没有重复的行为 - 只需清除所有行
您不仅必须 [0] 将组合框数据写入重新定义的范围,还必须 [1] 调整列表对象范围的大小并 [2] 清除以下行;否则旧数据只会被部分覆盖。
示例代码
Private Sub B_03_Click() ' Save
With Sheets("Data").ListObjects(1)
.ShowTotals = False
If C_01.ListCount = 0 Then .DataBodyRange.ClearContents
If C_01.ListCount > 0 Then
' [0] Write combobox values
.DataBodyRange.Resize(C_01.ListCount).Value = C_01.List
' [1] Resize listobject range
.Resize .Range.Resize(C_01.ListCount + 1) ' << resize listobject including header (+1), too
' [2] Suggestion to clear at least some lines below as well
.Range.Offset(.Range.Rows.Count).ClearContents ' << clear lines after listobject table
End If
.ShowTotals = True
End With
Hide
End Sub
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句