我使用这个函数来查找和替换整个工作簿中的字符串。
但我不知道为什么 "run time error: Object variable or with block variable not set"
上会出现错误 rngCheck = Me.Range("A2:A37")
我尝试了很多来找到问题,但没有找到您的帮助将不胜感激。
Sub FndRplce(fnd As String, rplc As String)
Dim sht As Worksheet
Dim boolStatus As Boolean
boolStatus = Application.ScreenUpdating
Application.ScreenUpdating = False
For Each sht In ActiveWorkbook.Worksheets
sht.Cells.Replace what:=fnd, Replacement:=rplc, _
LookAt:=xlPart, LookIn:=xlValues, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
Next sht
Application.ScreenUpdating = boolStatus
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngCheck As Range
Dim strOld As String
Dim strNew As String
rngCheck = Me.Range("A2:A37")
If Target.Count > 1 Then Exit Sub
If Intersect(Target, rngCheck) Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Application.EnableEvents = False
strNew = Target.Value
Application.Undo
strOld = Target.Value
Call FndRplce(strOld, strNew)
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
答案 0 :(得分:1)
请尝试下一段代码:
1.在Sheet1代码模块中复制这个:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngCheck As Range, strOld As String, strNew As String, lastR As Long
'Now, it calculates the last existing value in column "A:A":
'no need to adapt the code after adding records
lastR = Me.Range("A" & Me.Rows.Count).End(xlUp).Row
Set rngCheck = Me.Range("A2:A" & lastR)
If Target.Count > 1 Then Exit Sub
If Intersect(Target, rngCheck) Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Application.EnableEvents = False
strNew = Target.Value
Application.Undo: strOld = Target.Value
Call FndRplce(strOld, strNew)
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Sub FndRplce(fnd As String, rplc As String)
Dim sht As Worksheet, boolStatus As Boolean
boolStatus = Application.ScreenUpdating
Application.ScreenUpdating = False
For Each sht In ActiveWorkbook.Worksheets
sht.Cells.Replace what:=fnd, Replacement:=rplc, _
LookAt:=xlPart, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
Next sht
Application.ScreenUpdating = boolStatus
End Sub
请测试并发送一些反馈。