我想在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 多数民众赞同它看起来如何文件
答案 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”:
和
当然这是一个示例,但您只需要重新调整代码的变通方法,它应该可以正常工作。 注意:我刚刚发现消息框用不同于编码的语言显示消息,这是因为我在测试方法时已经制作了屏幕截图。对此抱歉,如果您认为这会造成混淆,请建议编辑。