2017-09-26 51 views
0

我需要更改单元格的值。例如,Range("B1").value是“蛋糕”,我也如何更改单元格的值BEFORE Change_Event应用[Excel/VBA]

Range("B1").value = "Bubblegum" 

但是,我有一个Worksheet_Change事件,并在启动时,如果我MsgBox "Target.value"这将是“蛋糕”,而不是“泡泡糖”。

这里是我的事件:

Private Sub Worksheet_Change(ByVal Target As Range) 

    Dim cellAdress As String 
    cellAdress = Target.Column 

    If cellAdress = 5 Then 
     If Target.Value = "X" Then 
      Range("F" & Target.Row).Value = "0,0€" 
     ElseIf Target.Value = "O" Then 
      If Range("A" & Target.Row).Interior.ColorIndex = 2 Then 
       Range("F" & Target.Row).Value = Worksheets("Astreinte").Range("B10").Value 
      Else 
       Range("F" & Target.Row).Value = Worksheets("Astreinte").Range("B11").Value 
      End If 
     Else 
      Range("F" & Target.Row).Value = "Valeur Incorrecte" 
     End If 
    End If 

End Sub 

,这里是我的代码

For Each myDate In DateMonthCorrespondante 
    Range("E" & (2 + Day(myDate))).Value = "O" 
Next 

我怎样才能改变这种状况?

感谢您的帮助

+0

请包括整个代码,这是对现在很少帮助你。 – Luuklag

+1

你说什么有什么问题。更改值后,只会触发'Worksheet_Change'事件。你说的是Cake的价值,你改成了Bubblegum,但是'Worksheet_Change'返回了Cake?我无法重现这一点。 – Moacir

+0

这是因为我的线上有问题 范围(“E”&(2 + Day(myDate)))。Value =“O” 我之前保护了我的工作表......并没有改变我的范围的值。我的错。 –

回答

0

您可以尝试使用SelectionChange和共同变更事件,即

Dim v 

Private Sub Worksheet_Change(ByVal Target As Range) 

MsgBox v 

End Sub 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

v = Target.Value 

End Sub 

所有这些都在片模块中。然后,您可以添加条件来限制您希望显示该框的情况等。

+0

我试过了,但是selectionChange会在它改变之前取值。我想要它之后。 (尽管如此,感谢您的回答) –

+0

在“更改”事件中,“after”值可用作“Target”...而SelectionChange事件用于临时存储“v”中的“before”值以便将它置于手边当单元格更改时 – MikeD

+0

好吧!谢谢你:)! –

0

禁用之前的事件并重新启用之后。

Application.EnableEvents = False 
Range("B1").value = "Bubblegum" 
Application.EnableEvents = True 
0

那么,在你的帮助下,我终于解决了我的问题。

我行

Range("E" & (2 + Day(myDate))).Value = "O" 

有一个错误,因为该事件的,它并没有这么说我。

相关问题