从表中删除特定记录的Userform始终在删除特定记录后复制最后一条记录

时间:2018-04-16 09:25:33

标签: excel vba excel-vba

我对此有点过分了。我目前正在开发一个用户表单,可以从表中添加,更新和删除记录。

我遇到了删除功能的问题。当它删除所选记录时,它会复制表中的最后一条记录,以便记录数保持不变。

以下是具体代码,c_01指的是包含每个条目的唯一标识符的组合框。

删除功能:

function :: (Int, Int) -> [[Int]] -> Int
function (s, d) matrix = inner (s, d) matrix 
  where  
    inner (i, 0) g = g !! (i-1) !! (0)
    inner (i, k) g = maximum [memo ! ((i, k-1), g)
                             ,
                              memo ! ((i-1, k), g)
                             ]
    memo = listArray bounds
                [inner (i,k) g | ((i,k), g) <- Data.Array.range bounds]
    bounds = ( ((1,1), [[1,1]]), ((n,n), [[n,n]]) )

保存功能:

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

关于为什么这会创建最后一条记录的副本而不仅仅是删除指定记录的任何提示都会有所帮助。

如果您需要完整代码或Userform的屏幕截图,我可以提供。

1 个答案:

答案 0 :(得分:1)

没有重复的行为 - 只清除所有行

您不仅要[0]将组合框数据写入重新定义的范围,您还必须[1]调整listobject范围的大小,并[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