0
有一点问题,需要您帮助更新我的VBA代码。VBA如何使用两列之间的工作表变更事件
我有两列,第一列显示%第二和第二列是一个数字。单元需要根据用户输入重新计算,这就是为什么我在工作表变更(下面的代码)上使用了一个事件。我设法做的是在第一列中更改%时修改第二列。
现在我想知道我怎么可能(如果可能给出的情况下),修改它,以便如果用户更改第一列中的%重新计算第二(我有)或如果用户改变第二列,它会在第一次重新计算%,而不会一遍又一遍地重新触发它自己。
这就是我所拥有的。任何帮助赞赏。
列1为 “P” 和第2列是 “Q”
Private Sub Worksheet_Change(ByVal Target As Range)
Application.Calculation = xlCalculationAutomatic
Dim WsCY As Worksheet, WsM As Worksheet
Dim CVal As String
Dim Found As Range
'Sheets I'm working with
Set WsCY = ThisWorkbook.Worksheets("Current Year Data")
Set WsM = ThisWorkbook.Worksheets("Main")
'Value used to search for the base value on which the % from 1st column is applied
CVal = WsM.Range("C10")
Set Found = WsCY.Columns("B").Find(what:=CVal, LookIn:=xlValues, lookat:=xlWhole)
If Target.Address = WsM.Range("P13").Address Then
WsM.Range("Q13").Value = WsM.Range("P13").Value * WsCY.Range("AB" & Found.Row) + WsCY.Range("G" & Found.Row)
ElseIf Target.Address = WsM.Range("P15").Address Then
WsM.Range("Q15").Value = WsM.Range("P15").Value * WsCY.Range("AC" & Found.Row) + WsCY.Range("H" & Found.Row)
ElseIf Target.Address = WsM.Range("P17").Address Then
WsM.Range("Q17").Value = WsM.Range("P17").Value * WsCY.Range("AD" & Found.Row) + WsCY.Range("I" & Found.Row)
ElseIf Target.Address = WsM.Range("P21").Address Then
WsM.Range("Q21").Value = WsM.Range("P21").Value * WsCY.Range("AE" & Found.Row) + WsCY.Range("J" & Found.Row)
ElseIf Target.Address = WsM.Range("P23").Address Then
WsM.Range("Q23").Value = WsM.Range("P23").Value * WsCY.Range("AF" & Found.Row) + WsCY.Range("K" & Found.Row)
ElseIf Target.Address = WsM.Range("P25").Address Then
WsM.Range("Q25").Value = WsM.Range("P25").Value * WsCY.Range("AG" & Found.Row) + WsCY.Range("L" & Found.Row)
Else
End If
End Sub
的我需要什么示例2:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = False
If Target.Address = WsM.Range("P1").Address Then
WsM.Range("Q1").Value = WsM.Range("P1").Value * 100
ElseIf Target.Address = WsM.Range("Q1").Address Then
WsM.Range("P1").Value = WsM.Range("Q1").Value/100 - 1
Else
End If
Application.EnableEvents = True
End Sub
不太确定您的意思。我做了第二个例子,并尝试了一下,但没有做任何事情。我如何使用Application.EnableEvents基本上停止它,一旦进行更改? –