单元格更改后,如何获取范围内的单元格进行硬编码?

时间:2019-06-23 02:03:23

标签: excel vba worksheet hard-coding

当在工作表的另一列(同一行)中选择状态时,我需要获取一个要进行硬编码的范围内的单元格。目的是为了衡量新员工在招聘流程的每个步骤(或状态)中待用的时间。

我尝试编写代码以使宏在工作簿打开后开始启动(模块1),然后一旦使用worksheet_change事件更新了J列中的状态,就循环遍历指定范围的单元格(AC3:AQ5000) (第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

我希望单元格从空白日期更改为(今天的)日期后,每个列都将对日期进行硬编码。到目前为止,我收到“检测到名称不明确的名称worksheet_change”,“预期编译错误的标识符”的错误消息,或者什么也没有发生。

2 个答案:

答案 0 :(得分:1)

未能清楚地了解目标,因此承担了以下责任

  1. 状态将仅在J列中更新
  2. 如果更新后的状态与AC到AQ列的标题(包含状态文本)匹配,则将与更新后的单元格对应的相应列和行替换为当前日期。 如果我假设正确无误,则无需遍历Range("ac3:aq5000")中的所有单元,而是仅将AC列的所有标头(第1行)循环到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

答案 1 :(得分:-1)

请尝试以下操作,并根据需要更改

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