在公式中replace文本时发现的Bug
我今天发现了一个非常有趣的bug ,即如果它是一个bug 。
你能确认你是否可以复制它? 如果它是一个错误,并没有报告,那么我可以这样归档。 如果任何一个Excel-MVP想把它作为一个错误文件,我也可以。
假设在单元格A1
sheet1
中,有一个公式= $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
理想情况下,代码应该已经工作,并且= $B$2+ $B$3
应该在公式栏中变为= $C$3+ $B$3
,但事实并非如此 。 它只有在您逐步完成或者您在下一行中提到的时候才会起作用
现在做一件事。 select除A1
或A2
以外的任何单元格。 现在,如果您运行代码,则代码按预期工作。
起初我以为我的Excel已经疯了,所以我closures了,重新启动它,但我能够在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
你能复制它吗?
我复制了你的问题,并通过两种方式逃脱:
-
尝试
ThisWorkbook.Save
replace后。 -
replace公式后,select除A1或A2(其公式被replace的单元格)以外的其他单元格。
例如,在其他答案中已经提出了许多替代scheme
- 通过代码select其他单元格
- 保存工作簿
如果我不想select单元格或保存工作簿,那么是否有另一种方法比上述两种更好? 就在这里。 刚试过这个,它的工作原理
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
但问题仍然是, Formula Bar
应该在原来的情况下更新,但事实并非如此
我部分能够复制它,也Excel 2010。
如果我用所选的单元格运行macros,使用Visual Basic编辑器中的运行选项,单元格中的值将更改以反映新的公式,但公式栏中的公式不会显示为已更新。 但它必须更新,因为结果改变了。 如果我点击单元格并返回,更新的公式将显示并显示search/replace工作。
如果我在VBA窗口中单步执行macros,则在macros运行时,公式栏会显示为已更新。
如果我从Excel窗口运行macros,使用macros – >查看 – >运行,公式栏在macros运行时确实显示为已更新。
如果我添加r.Select
到macros的最后一行,从VBA运行它的作品。
如果我运行macros,所以它不更新公式栏,然后单击到公式栏,公式栏显示旧公式,但单元格内容更改以显示新的公式,而不是答案。
编辑:行为在Excel 2013中显示相同