Примерно так должно работать
edit: добавлена обработка ошибок, чтобы убедиться, что события не застряли «выключено»
Private Sub Worksheet_Change(ByVal Target As Range)
Dim v
'skip multi-cell updates
If Target.CountLarge > 1 Then Exit Sub
With Target
v = Trim(.Value)
If Len(v) > 0 And .Column > 2 Then
If v Like "Z-#*" Then
On Error Goto haveError
Application.EnableEvents = False
With Me.Cells(.Row + 1, 3)
.Value = Right(v, Len(v) - 2)
.Offset(0, 1).Select '? select next cell in new row ?
End With
.Value = "" 'clear the original "Z" scan?
Application.EnableEvents = True
Else
Me.Cells(.Row, .Column + 1).Select
End If
End If
End With
Exit sub
haveError:
Msgbox Err.Description
Application.EnableEvents = True
End Sub
Для кого-либо еще, кто противостоит этой проблеме, я нашел решение, которое работает на меня. Конечно, мне все еще интересно видеть другие интересные ответы.
Вот то, что я сделал:
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding
RelativeSource={
RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}},
Path=IsSelected}" Value="True"/>
<Condition Binding="{Binding IsAvailable}" Value="False"/>
</MultiDataTrigger.Conditions>
<Setter TargetName="Name" Property="Foreground" Value="#F00"/>
</MultiDataTrigger>
нет ничего специального об этом являющемся много триггером все же. Если бы Вы просто хотели разработать выбранный пункт по-другому в Вашем шаблоне данных, то Вы могли бы использовать:
<DataTrigger Binding="{Binding
RelativeSource={
RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}},
Path=IsSelected}" Value="True">
<Setter TargetName="Name" Property="Foreground" Value="#888"/>
</DataTrigger>