在公式中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除A1A2以外的任何单元格。 现在,如果您运行代码,则代码按预期工作。

起初我以为我的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 

你能复制它吗?

我复制了你的问题,并通过两种方式逃脱:

  1. 尝试ThisWorkbook.Savereplace后。

  2. replace公式后,select除A1或A2(其公式被replace的单元格)以外的其他单元格。

例如,在其他答案中已经提出了许多替代scheme

  1. 通过代码select其他单元格
  2. 保存工作簿

如果我不想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中显示相同