当在其他地方输入相同数据时,删除旧条目吗?

时间:2019-07-31 12:19:46

标签: excel vba

我有一个工作表,上面有190个人的名字和桌子。

当我在新的就座位置上写相同的名字时,我想自动执行以下操作:搜索一个人以前坐在过的地方,并删除旧的就座位置上的名字。

Option Explicit

Public Sub One_Find()
    Dim Placeholder As Integer
    Dim FieldRange As Range
    Set FieldRange = Cells.Find(What:=ActiveCell.Value, LookIn:=xlValues, _
      LookAt:=xlWhole, SearchOrder:=xlByColumns)
    Placeholder = 0

    If FieldRange Is Nothing Then
        MsgBox ("Find failed")
        Exit Sub
    End If

    Dim FirstAddress As String
    FirstAddress = FieldRange.Address

    Do While FieldRange.Address = FirstAddress
        FieldRange = Cells.FindNext(FieldRange)
        Placeholder = Placeholder + 1
        If Placeholder = 2000 Then
            Exit Sub
        End If
    Loop

    FieldRange.Value = "WORKS"
End Sub

也许是解决方案:

Option Explicit

Public Sub One_Find()
    Dim Placeholder As Integer
    Dim FieldRange As Range
    Dim Placeholder2 As String
    Placeholder2 = ActiveCell.Value
    Set FieldRange = Cells.Find(What:=Placeholder2, LookIn:=xlValues, _
      LookAt:=xlWhole, SearchOrder:=xlByColumns)
    Placeholder = 0

    If FieldRange Is Nothing Then
        MsgBox ("Find failed")
        Exit Sub
    End If

    Dim FirstAddress As String
    FirstAddress = FieldRange.Address

    Do While FieldRange.Address = FirstAddress
        FieldRange.Value = Placeholder + "."
        FieldRange = Cells.FindNext(FieldRange)
        Placeholder = Placeholder + 1
        If Placeholder = 2000 Then
            Exit Sub
        End If
        Loop

    FieldRange.Value = "WORKS"
End Sub

Placeholder2将是我要搜索的值。

我期望使用WORKS而不是旧名称,但起初它只加载了3个小时,直到我实现了将其作为“占位符”居住的时间

我正在学习C#中的VBA。

1 个答案:

答案 0 :(得分:1)

您需要在循环内替换值FieldRange.Value = "WORKS"。否则,如果仅出现一次,它将循环无休止,因为它将始终找到相同的地址,并且FieldRange.Address = FirstAddress始终为True

另外,While应该位于循环的末尾,否则第一次查找将不会被替换。

以下方法应该起作用:

Option Explicit

Public Sub One_Find()
    Dim FieldRange As Range
    Set FieldRange = Cells.Find(What:=ActiveCell.Value, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns)

    If FieldRange Is Nothing Then
        MsgBox ("Find failed")
        Exit Sub
    End If

    Dim FirstAddress As String
    FirstAddress = FieldRange.Address

    Do 
        FieldRange.Value = "WORKS"
        FieldRange = Cells.FindNext(FieldRange)
    Loop While FieldRange.Address <> FirstAddress
End Sub