0

R4假设在工作表中单元格的公式为=B1+B2,其当前值为10

VBA 命令Range("R4").Value = 5会将公式及其值更改为5.

有谁知道是否存在一个 VBA 命令可以改变R4to的值5,但不改变它的公式,这样它的公式仍然是=B1+B2

PS:我们也可以通过另一种方式达到相同的状态:1)做一个2 Range("R4").Value = 5)改变公式但不评估它。在这种情况下,是否存在一个 VBA 命令可以更改单元格的公式而不对其进行评估?R4=B1+B2

编辑:我想做的是......

我想写一个函数,它需要一个工作表,其中一些单元格可能已过时(公式与其值不匹配),并自动生成一个 VBA Sub,这个 VBA Sub 可以重现这个工作表。VBA Sub 可能如下所示:

Sub Initiate()
    Cells(2,3).Value = 5
    Cells(4,5).Value = 10
    ...
    Cells(2,3).Formula = "=2+3"
    Cells(4,5).Formula = "=C2+C2"
    ...
End Sub

这样运行Initiate()会构建一个具有相同值和公式的工作表。

如果没有我要问的 VBA 命令,这Initiate()将很难生成。

4

3 回答 3

0

Here is some very dirty code that will save all values of all formulas on the active sheet as custom properties of the sheet, and a 2nd sub that will mark red all cells where the value has changed from it's original value, while preserving all formulas. It will need some error-checking routines (property already exists, property doesn't exist,...) but should give you something to work with. Since I don't really understand your problem it's a bit hard to say ;)

Sub AddCustomProperty()
Dim mysheet As Worksheet
Dim mycell2 As Range
Dim myProperty As CustomProperty
Set mysheet = ActiveWorkbook.ActiveSheet

For Each objcell In mysheet.UsedRange.Cells
    Debug.Print objcell.Address
    If objcell.HasFormula Then Set myProperty = mysheet.CustomProperties.Add(objcell.Address, objcell.Value)
Next objcell
End Sub
Sub CompareTags()
Dim mysheet As Worksheet
Dim mycell2 As Range
Dim myProperty As CustomProperty
Set mysheet = ActiveWorkbook.ActiveSheet

For Each objcell In mysheet.UsedRange.Cells

Debug.Print objcell.Address
    If objcell.HasFormula Then
        On Error Resume Next
        If mysheet.CustomProperties(objcell.Address).Value <> objcell.Value Then
        objcell.Font.ColorIndex = 3
        On Error GoTo 0
        End If
    End If
Next objcell
End Sub
于 2013-07-14T08:21:54.633 回答
0

在不更改公式本身的情况下更改公式的结果非常简单:

更改其参数的值。这是一种求解器类型的方法:

Sub ForceDesiredResult()
    Dim r As Range
    Set r = Range("B2")
    With r
        If r.HasFormula Then
            .Formula = .Formula & "-5"
        Else
            .Value = .Value - 5
        End If
    End With
End Sub
于 2013-07-13T17:04:43.800 回答
0

您不能将单元格的值更改为不同于单元格公式计算的值。

关于您的 ps:您可以通过将计算模式更改为手动来更改单元格的公式而无需重新评估。但这当然适用于整个工作簿,而不仅仅是这个单元格

编辑:也许解决方案是将单元格的公式临时保存在该单元格的标签或隐藏的工作表中?

于 2013-07-13T15:35:43.240 回答