替换公式中的文本时发现错误

时间:2014-11-22 06:17:25

标签: excel vba excel-vba

我今天发现了一个非常有趣的 bug ,如果它是 bug

您能否确认是否可以复制它?如果它是一个bug并且没有报告,那么我可以这样提交。 如果任何Excel-MVP想将其作为错误提交,我也可以。

让我们在单元格sheet1的{​​{1}}中说,你有一个公式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 应该已更改为公式栏中的= $B$2+ $B$3 ,但不会只有在您单步执行或者如下所述提到的情况下才会有效

现在做一件事。选择= $C$3+ $B$3A1以外的任何单元格。现在,如果您运行代码,代码将按预期工作。

起初我以为我的excel已经疯了所以我关闭并重新启动它但是我能够在A2多次重现上述内容。

然后我认为这是Excel 2010问题,但也可以使用此代码观察到上述行为。

.SpecialCells

你能复制吗?

3 个答案:

答案 0 :(得分:6)

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

  1. 替换后尝试ThisWorkbook.Save

  2. 在替换公式后,选择除A1或A2之外的其他单元格(选择其公式被替换的单元格)。

答案 1 :(得分:5)

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

  1. 通过代码选择另一个单元格
  2. 保存工作簿
  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: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应该在原始方案中更新但不是

答案 2 :(得分:2)

我部分能够复制它,也是Excel 2010。

如果我在选中单元格的情况下运行宏,使用Visual Basic编辑器中的“运行”选项,单元格中的值会更改以反映新公式,但公式栏中的公式不会显示已更新。但必须更新它,因为结果发生了变化。如果我单击单元格并返回,则会显示更新的公式,并显示搜索/替换有效。

如果我在VBA窗口中单步执行宏,则公式栏会在宏运行时显示为已更新。

如果我从Excel窗口运行宏,请使用宏 - >查看 - >运行时,公式栏会在宏运行时显示为已更新。

如果我将r.Select添加到宏的最后一行,则从VBA运行它。

如果我运行宏以便它不更新公式栏,则单击进入公式栏,公式栏显示旧公式,但单元格内容会更改以显示新公式而不是答案。

编辑:Excel 2013中的行为显示相同