我迫切需要解决我长期悬而未决的问题,如下所示。
基于可在我的工作表中设置的少数单元格中完成的可编辑选择,单元格C28到F28会根据选择不断计算答案。每次我对可编辑选择进行更改时,这些单元格(C28到F28)中的值都会发生变化。我想保留最后一个的记录。在每次进行最后一次更改之前,在这些单元格中。然后我需要显示之前的nos之间的关系(以%表示)。和没有。目前的变化很容易。
我最好不要使用VBA这样做,因为我之前从未使用它,因此不舒服。但如果VBA是解决这个问题的唯一解决方案,那么就这样吧! 如果这样做,这个工作表需要发送给许多用户,所以,无论什么诀窍 - 一旦文件被邮寄,需要为任何用户工作。
谢谢,
答案 0 :(得分:0)
这不是VBA的回答:
在进行更改之前,您需要复制范围(C28至F28)并仅在纸张的某些部分粘贴特殊值。
您将获得所有计算的记录。
使用VBA解决方案编辑:
如果我理解正确,你就像照片一样:
<强> 1。你需要进入Visual Basic编辑器(Alt + F11)(你会得到这样的东西):
<强> 2。您需要双击要执行此代码的工作表名称
第3。复制此代码并将其粘贴到右侧窗口中,如下所示:
<强> CODE:强>
Dim valueOfC28 As Long
Dim valueOfD28 As Long
Dim valueOfE28 As Long
Dim valueOfF28 As Long
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.AddressLocal = Range("C23").AddressLocal Then
Range("C29").Value = valueOfC28
End If
If Target.AddressLocal = Range("D23").AddressLocal Then
Range("D29").Value = valueOfD28
End If
If Target.AddressLocal = Range("E23").AddressLocal Then
Range("E29").Value = valueOfE28
End If
If Target.AddressLocal = Range("F23").AddressLocal Then
Range("F29").Value = valueOfF28
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.AddressLocal = Range("C23").AddressLocal Then
valueOfC28 = Range("C28").Value
End If
If Target.AddressLocal = Range("D23").AddressLocal Then
valueOfD28 = Range("D28").Value
End If
If Target.AddressLocal = Range("E23").AddressLocal Then
valueOfE28 = Range("E28").Value
End If
If Target.AddressLocal = Range("F23").AddressLocal Then
valueOfF28 = Range("F28").Value
End If
End Sub
我希望它会有所帮助!
编辑您需要的收藏:
用现有代码替换此代码:
Dim valueOfC28 As Long
Dim valueOfD28 As Long
Dim valueOfE28 As Long
Dim valueOfF28 As Long
Private Sub Worksheet_Change(ByVal Target As Range)
Dim inc As Integer
Dim flag As Boolean
Dim OLDvalueOfC29 As Long
Dim OLDvalueOfD29 As Long
Dim OLDvalueOfE29 As Long
Dim OLDvalueOfF29 As Long
Dim SheetName As String
flag = False
OLDvalueOfC29 = Range("C29").Value
OLDvalueOfD29 = Range("D29").Value
OLDvalueOfE29 = Range("E29").Value
OLDvalueOfF29 = Range("F29").Value
If Target.AddressLocal = Range("C23").AddressLocal Then
flag = True
Range("C29").Value = valueOfC28
End If
If Target.AddressLocal = Range("D23").AddressLocal Then
flag = True
Range("D29").Value = valueOfD28
End If
If Target.AddressLocal = Range("E23").AddressLocal Then
flag = True
Range("E29").Value = valueOfE28
End If
If Target.AddressLocal = Range("F23").AddressLocal Then
flag = True
Range("F29").Value = valueOfF28
End If
If Target.AddressLocal = Range("C23:F23").AddressLocal Then
flag = True
Range("C29").Value = valueOfC28
Range("D29").Value = valueOfD28
Range("E29").Value = valueOfE28
Range("F29").Value = valueOfF28
End If
If flag = True Then
inc = 1
Do While Range("K" & inc).Value <> ""
inc = inc + 1
Loop
Range("K" & inc) = OLDvalueOfC29
Range("L" & inc) = OLDvalueOfD29
Range("M" & inc) = OLDvalueOfE29
Range("N" & inc) = OLDvalueOfF29
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.AddressLocal = Range("C23").AddressLocal Then
valueOfC28 = Range("C28").Value
End If
If Target.AddressLocal = Range("D23").AddressLocal Then
valueOfD28 = Range("D28").Value
End If
If Target.AddressLocal = Range("E23").AddressLocal Then
valueOfE28 = Range("E28").Value
End If
If Target.AddressLocal = Range("F23").AddressLocal Then
valueOfF28 = Range("F28").Value
End If
If Target.AddressLocal = Range("C23:F23").AddressLocal Then
valueOfC28 = Range("C28").Value
valueOfD28 = Range("D28").Value
valueOfE28 = Range("E28").Value
valueOfF28 = Range("F28").Value
End If
End Sub