保存细胞的价值

时间:2014-11-05 17:46:37

标签: excel vba excel-vba

我想在Excel中保存单元格的值。

使用以下代码:

Dim oldval As Range
Sub Macro0()

Set oldval = ActiveCell

End Sub

Sub Macro2()

Dim y As Integer
Dim x As Variant

Dim rng2 As Range
Set rng2 = ActiveCell

Dim rng As Range
Set rng = ActiveCell

If rng.Column = 8 And rng.Value <> "" Then
    'Extract the number part of string
    x = Split(rng2.Value, "_")(0)
    y = Split(rng.Value, "_")(0)

    If y < 1 Or x = "" Then Exit Sub

    If x < y Then
        MsgBox "Attenzione, si sta decrementando di stato un fornitore !"
    Else
        MsgBox "Stato cambiato con successo"

End If
End If


End Sub

我需要在更改之前保存单元格中的值。 我尝试使用该代码:

Private Sub Worksheet_Change(ByVal Target As Range)
Call Macro1
End Sub




Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Call Macro0
End Sub

但它不起作用,因为即时使用不在工作簿上的宏。 在保存旧值并检查其是否高于已插入的新值之后,我需要进行控制。 我该如何保存旧值? 感谢

编辑: @Jeeped 多数民众赞同它看起来如何文件 File

2 个答案:

答案 0 :(得分:1)

您需要在项目级别声明变量。这是一个简单的例子:

Dim a As String
Sub macro1()
    a = Range("A1")
End Sub
Sub macro2()
    MsgBox a
End Sub

如果运行macro1,变量a(在顶层声明)将存储单元格范围(“A1”)的值。然后,如果你在第二时刻运行macro2,那么该值仍然存在。

您只需在项目顶部声明变量oldval,并在更改之前存储与oldValue = ActiveCell.Value一样的旧值。即使在退出宏之后,变量也会保留该值,因此您可以使用该值在以后进行比较。

答案 1 :(得分:1)

我想我刚才完全明白你的需要。这是一个解决方法:

在你的模块中,像这样添加macro1()

Sub macro1(ByVal oldVal As String, ByVal newVal As String)
    MsgBox "The value was " & oldVal & ", but now is " & newVal
End Sub

在工作表模块中,添加以下两个事件+声明

Dim oldVal As String, newVal As String 'the top declaration allows you to use the variables even when the macro/method of the worksheet has finished to run
Private Sub Worksheet_Change(ByVal Target As Range)
    newVal = Target.Value 'this will just take the current value of the cell
    Call macro1(oldVal,newVal) 'they are both passed to your procedure
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    oldVal = Target.Value 'this will record the value of the cell everytime you are selecting it
End Sub

以下是它的工作原理,将单元格的内容从“buongiorno”更改为“buonasera”:

enter image description here

enter image description here

当然这是一个示例,但您只需要重新调整代码的变通方法,它应该可以正常工作。 注意:我刚刚发现消息框用不同于编码的语言显示消息,这是因为我在测试方法时已经制作了屏幕截图。对此抱歉,如果您认为这会造成混淆,请建议编辑。