如何通知用户他们创建了重复记录,并询问他们是不是要覆盖?

Posted

技术标签:

【中文标题】如何通知用户他们创建了重复记录,并询问他们是不是要覆盖?【英文标题】:How to inform user they have created a duplicate record, and ask if they want to overwrite?如何通知用户他们创建了重复记录,并询问他们是否要覆盖? 【发布时间】:2021-10-13 09:21:00 【问题描述】:

我有一个工作簿并创建了命令按钮。我已经成功地为 2 个按钮创建了 VBA,但我正在为重复代码而苦苦挣扎。我正在将数据从工作表中的特定单元格传输到名为“主”的工作表上,我的文件是通过保存命令自动创建的,该命令将工作表自动保存为发票 (c10),然后是项目参考 (a12)。我正在尝试将代码写入我现有的 VBA 以告诉我正在添加重复项,并询问我是否要覆盖它?

这是我已经走了多远,我花了几个小时在重复功能上,试图纠正它,但我一直摔倒。除(“C10”)外,该行中允许所有其他重复项。我只是无法为我完成这项工作。 请问有人可以帮忙吗?

    Dim Item As Range, DataEntry As Range
    Dim Data() As Variant
    Dim i As Integer
    Dim DataRow As Long
    Dim wsMaster As Worksheet
    
    Set wsMaster = ThisWorkbook.Worksheets("Master")
    
    Set DataEntry = ActiveSheet.Range("C10,A3,A12,E10,F33")
   
    Dim assetIDRange, a As Range

    For Each Item In DataEntry
        i = i + 1
        ReDim Preserve Data(1 To i)

        Data(i) = Item.Value
    Next
    
    DataRow = wsMaster.Cells(wsMaster.Rows.Count, "A").End(xlUp).Row + 1
       wsMaster.Cells(DataRow, 1).Resize(1, DataEntry.Cells.Count).Value = Data
    MsgBox "Record Added To Master", 48, "Record Added"
End Sub

【问题讨论】:

要检查哪个条目?对照什么检查什么? 听起来你可以使用数据库,至少像 MS Access。 嗨,HackSlash,我同意,但不幸的是,我的笔记本电脑上还没有这个功能(还没有)......在老板身上工作。 【参考方案1】:

试试这样的:

Sub InsertUpdate()

    Dim Item As Range, DataEntry As Range
    Dim Data() As Variant
    Dim i As Integer
    Dim wsMaster As Worksheet
    Dim m, c As Range, action
    
    Set wsMaster = ThisWorkbook.Worksheets("Master")
    
    Set DataEntry = ActiveSheet.Range("C10,A3,A12,E10,F33")
   
    ReDim Data(1 To 1, 1 To DataEntry.Cells.Count)
    For Each Item In DataEntry.Cells
        i = i + 1
        Data(1, i) = Item.Value
    Next
    
    'existing row with same C10 value?
    m = Application.Match(Data(1, 1), wsMaster.Columns("a"), 0)
    
    If Not IsError(m) Then 'found existing match?
        If MsgBox("Replace existing entry for '" & Data(1, 1) & "' ?", vbQuestion + vbYesNo) = vbYes Then
            Set c = wsMaster.Columns("a").Cells(m)
            action = "Updated"
        End If
    Else
        Set c = wsMaster.Cells(wsMaster.Rows.Count, "A").End(xlUp).Offset(1, 0)
        action = "Added"
    End If
    
    If Not c Is Nothing Then
        c.Resize(1, UBound(Data, 2)).Value = Data
        MsgBox "Record " & action & " To Master", 48, "Record Added"
    End If
    
End Sub

【讨论】:

为什么要检查Data(1, 1) 非常感谢,现在一切正常!我已经在这几天了。 @FaneDuru - 来自原始问题:“除了(“C10”)之外,允许行中的所有其他重复项。” C10 的值在Data(1,1) @Narkyknickers 你只需要检查“C10”中的值吗? 显然,我的英语太差了,无法理解“将工作表自动保存为发票(c10)然后项目参考(a12)”......

以上是关于如何通知用户他们创建了重复记录,并询问他们是不是要覆盖?的主要内容,如果未能解决你的问题,请参考以下文章

拆分 Access 数据库并可能创建重复记录

如何通知用户要删除/更新的数据具有临界值?

如何确定用户是不是尚未注册接收推送通知和/或他们的设置是不是被禁用

如何根据用户的兴趣发送通知?

如何询问用户是不是希望在 CloudKit JS 中被发现?

如何重复代码直到满足特定条件? [复制]