Sid*_*out 11 excel vba excel-vba
我今天发现了一个非常有趣的错误,即它是否是一个错误.
你能否确认一下你是否可以复制它?如果它是一个bug并且没有报告,那么我可以这样提交.如果任何Excel-MVP想要将其作为错误提交,我也可以.
让我们说在sheet1单元格中A1,你有一个公式= $B$2+ $B$3.现在确保您的单元格已被选中.现在将此代码粘贴到模块中.
Sub Sample()
Dim r As Range, sPre As String, sAft As String
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
sPre = "$B$2": sAft = "$C$3"
On Error Resume Next
Set r = ws.Range("A1:A2").SpecialCells(xlCellTypeFormulas)
On Error GoTo 0
If Not r Is Nothing Then r.Replace what:=sPre, _
replacement:=sAft, _
lookat:=xlPart, _
MatchCase:=False
End Sub
Run Code Online (Sandbox Code Playgroud)
理想情况下,代码应该已经工作,并且= $B$2+ $B$3应该已经= $C$3+ $B$3在公式栏中更改为,但事实并非如此.只有当您单步执行它或者如下一行所述时,它才会起作用
现在做一件事.选择除A1或之外的任何单元格A2.现在,如果您运行代码,代码将按预期工作.
起初我以为我的excel已经疯了所以我关闭并重新启动它但是我能够Excel 2010多次重现上面的内容.
然后我认为这是一个.SpecialCells问题,但也可以使用此代码观察到上述行为.
Sub Sample()
Dim r As Range, sPre As String, sAft As String
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
sPre = "$B$2": sAft = "$C$3"
Set r = ws.Range("A1:A2")
r.Replace what:=sPre, _
replacement:=sAft, _
lookat:=xlPart, _
MatchCase:=False
End Sub
Run Code Online (Sandbox Code Playgroud)
你能复制它吗?
虽然在其他答案中已经提出了许多替代方案,例如
如果我不想选择单元格或保存工作簿,那么还有一种比上面两种更好的替代方法吗?就在这里.刚试过这个就可以了
Sub Sample()
Dim r As Range, sPre As String, sAft As String
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
sPre = "$B$2": sAft = "$C$3"
On Error Resume Next
Set r = ws.Range("A1:A3").SpecialCells(xlCellTypeFormulas)
On Error GoTo 0
If Not r Is Nothing Then r.Replace what:=sPre, _
replacement:=sAft, _
lookat:=xlPart, _
MatchCase:=False
r.Formula = r.Formula
End Sub
Run Code Online (Sandbox Code Playgroud)
但问题仍然存在,Formula Bar应该在原始方案中更新,但事实并非如此