我有一个工作表,上面有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。
答案 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