2016-03-16 8 views
0

У меня есть лист Excel, который имеет три колонки:Изменение значения ячейки форматирования

номер сотрудника

имя сотрудника

доступности (некоторые уже имеют значения Nothing)

Что я пытаюсь сделать, это когда наличие значение изменяется от числа до нуля номер сотрудника и имя сотрудника, связанное с этой строкой, получает зачеркивание. Также, когда наличие номер добавлен, прочерк исчезает. Я бы хотел, чтобы этот код запускался при нажатии командной кнопки. На данный момент код запускается при нажатии кнопки, но те доступны значения, которые уже ничего не изменили и не изменяются, получают зачеркивание. Есть ли способ, что только значения значения, которые ничего не меняют, не те, которые уже были ничем, не могут получить зачеркивание? Я написал код ниже, но не знаю, пойду ли я в правильном направлении.

Sub AircraftChange(ByVal Target As Range) 
Dim watchrange As Range, r As Range, rw As Long 
Dim intersectrange As Range, endrow As Long 

endrow = Cells(Rows.count, "B").End(xlUp).Row 
Set watchrange = Range("E2:E" & endrow) 
Set intersectrange = Intersect(Target, watchrange) 

If intersectrange Is Nothing Then Exit Sub 

For Each r In intersectrange 
rw = r.Row 
If r.Value = "" Then 
    Range("B" & rw & ":C" & rw).Font.Strikethrough = True 
Else 
    Range("B" & rw & ":C" & rw).Font.Strikethrough = False 
End If 
Next r 
End Sub 

Не мог бы кто-нибудь мне помочь?

Спасибо заранее enter image description here

+0

Поскольку у вас есть командная кнопка и вы хотите управлять обновлением, вы обязаны использовать VBA. Но если вы хотите обновить форматирование (с или без зачеркивания) автоматически, то вы также можете выполнить это с условным форматированием и без кода VBA. – Ralph

+0

Столбец доступности управляется пользователем, и как только пользователь либо добавляет, либо удаляет номер в значении доступности, я хочу нажать кнопку команды, а имя и номер сотрудника будут либо получить зачеркивание, либо удалить один или если ничего не изменится происходит с номером сотрудника и ID –

+0

Я добавил изображение файла, который я использую ... Вы можете видеть, что значения доступности - это числа в 4-м столбце ... так что я хочу, чтобы это произошло, если любое из этих значений которые показывают изменения ни к чему, они не пересекаются, или если добавлено значение, зачеркивание уходит ...но те, что внизу, в зеленом и оранжевом цветах, которые не имеют доступности. Я не хочу, чтобы они получали зачеркивание, потому что они никогда не меняются. Мне просто нужны эти ценности, которые меняются от чего-то к нулю или от ничего к чему-то –

ответ

0

Документы, касающиеся вашего вопроса, то задача может быть завершена в VBA с использованием массива для хранения предыдущих значений в столбце D, как показано в следующем фрагменте кода:

Dim ColumArray(65000) As String 

Private Sub Worksheet_Change(ByVal Target As Excel.Range) 
    If Target.Column = 4 Then 
     ThisRow = Target.Row 
     If Target.Value = "" And ColumArray(ThisRow) <> "" Then 
      Range("B" & ThisRow & ":C" & ThisRow).Font.Strikethrough = True 
     Else 
      Range("B" & ThisRow & ":C" & ThisRow).Font.Strikethrough = False 
     End If 
     ColumArray(ThisRow) = Target.Value 
    End If 
End Sub 

Обратите внимание, что эта процедура не требует события Button: она будет запускаться автоматически при любом изменении в столбце «D». Кроме того, вы можете инкапсулировать его в свой Sub AircraftChange(ByVal Target As Range) и запустить его при событии Click Button. Кроме того, вы можете установить максимальный индекс массива ColumArray (65000), относящийся к последней строке столбца «B» (согласно вашему коду: endrow = Cells (Rows.count, «B»). End (xlUp) .Row) ,

Наиболее универсальным решением (хотя и более длинным) будет создание глобального массива, размещенного в дополнительном модуле кода Excel VBA (например, Module1), для хранения значений, например, Worksheet(1) Столбец «D» на Workbook_Open и добавить Процедура Sub, как показано выше, на Рабочем листе (1).

Надеюсь, это поможет.

Смежные вопросы