Как я могу получить ячейку в диапазоне для жесткого кода, когда ячейка меняется? - PullRequest
0 голосов
/ 23 июня 2019

Мне нужно получить ячейку в диапазоне для жесткого кодирования, когда статус выбран в другом столбце (той же строке) на рабочем листе. Цель состоит в том, чтобы я мог измерить, как долго новый кандидат на работу сидит на каждом этапе (или статусе) процесса найма.

Я пытался написать код для запуска макроса после открытия рабочей книги (module1), а затем для циклического прохождения указанного диапазона ячеек (AC3: AQ5000) после обновления статуса в столбце J с помощью события worksheet_change (лист1). Столбцы AC-AQ имеют формулу для определения даты в ячейке после обновления столбца J до состояния, соответствующего каждому столбцу (=IF($J5=AC$1,IF(AC5<>"",AC5,TODAY()),"")). Циркулярная ссылка была отключена.

Private Sub Worksheet_change(ByVal Target As Range)

    Dim Target As Range
    Dim MyCell As Range
    Set Target = Sheet1.Range("ac3:aq5000")
    For Each MyCell In Target
        If MyCell.Value > "" Then
            MyCell.Copy
            MyCell.PasteSpecial Paste:=x1pasteformats
        End If
    Next MyCell

End Sub

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

Ответы [ 2 ]

1 голос
/ 23 июня 2019

Не удалось четко понять цель, и предполагается следующее

  1. Статус будет обновляться только в столбце J
  2. Если обновленный статус совпадает с заголовками (содержащими текст состояния) столбца ACAQ, то соответствующий столбец и строка, соответствующая обновленной ячейке, должны быть заменены текущей датой.Если я предположил, что это правильно, то нет необходимости циклически проходить через все ячейки в Range("ac3:aq5000"), а вместо этого зацикливать все заголовки (строка 1) столбца AC только на AQ.Также нет необходимости использовать какой-либо макрос в модуле 1.

Если предполагаемый выходной сигнал будет таким, как показано ниже

enter image description here

Тогда код будет просто:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Rng As Range, cel As Range, col As Long
Set Rng = Intersect(Range("J:J"), Target)
    If Not Rng Is Nothing Then
    Application.EnableEvents = False
        For Each cel In Rng
          For col = 29 To 43
            If cel.Value <> "" And cel.Value = Cells(1, col).Value Then
            Cells(cel.Row, col).Value = Now()
            End If
          Next
        Next cel
    Application.EnableEvents = True   
    End If
End Sub
0 голосов
/ 23 июня 2019

Пожалуйста, попробуйте следующее и измените в соответствии с вашими потребностями

Sub pastespecial()
Dim rangevalue, cellvalue As Range
Set rangevalue = Sheet1.Range("a1:a2")
For Each cellvalue In rangevalue
    If cellvalue > "" Then
        cellvalue.Copy
        cellvalue.pastespecial xlPasteValues
    End If
Next cellvalue


End Sub
...