Excel 当单元格发生变化时,如何使单元格处于硬编码范围内?

Excel 当单元格发生变化时,如何使单元格处于硬编码范围内?,excel,vba,worksheet,hard-coding,Excel,Vba,Worksheet,Hard Coding,当在工作表的另一列(同一行)中选择状态时,我需要获取一个在硬编码范围内的单元格。目的是让我能够衡量新员工候选人在招聘流程的每个步骤(或状态)中任职的时间 我尝试编写代码,以便在工作簿打开(模块1)后启动宏,然后在使用工作表更改事件(sheet1)更新第J列中的状态后,循环指定的单元格范围(AC3:AQ5000)。列AC到AQ有一个公式,一旦列J更新到与每列匹配的状态(=IF($J5=AC$1,IF(AC5“”,AC5,TODAY()),”))。循环引用已关闭 Private Sub Worksh

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

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

我希望在单元格从空白变为(今天的)日期后,让每一列硬编码日期。到目前为止,我收到了“名称不明确、工作表更改”、“编译错误、预期标识符”等错误,或者什么也没有发生。

请尝试以下内容,并根据需要更改

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

未能清楚理解目标,并假设以下内容

  • 状态将仅在J列中更新
  • 如果更新的状态与列AC到AQ的标题(包含状态文本)匹配,则更新单元格对应的相应列和行将替换为当前日期。 如果我假设正确,则无需遍历
    范围(“ac3:aq5000”)
    中的所有单元格,而只需将列AC的所有标题(第1行)循环到AQ。也不需要操作模块1中的任何宏 假设输出如下所示

    那么代码就是:

    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
    
    Private子工作表\u selection更改(ByVal目标作为范围)
    尺寸Rng作为范围,cel作为范围,col作为长度
    设置Rng=相交(范围(“J:J”),目标)
    如果不是,那么Rng什么都不是
    Application.EnableEvents=False
    对于Rng中的每个cel
    对于col=29至43
    如果cel.Value“”和cel.Value=单元格(1,col.Value),则
    单元格(cel.Row,col).Value=Now()
    如果结束
    下一个
    下一个细胞
    Application.EnableEvents=True
    如果结束
    端接头
    
    谢谢。你的假设是正确的。我将您的代码粘贴到宏中,收到一个“变量未定义”错误。我添加了'col as Range',然后收到了一个“类型不匹配”错误。“对于col=29至43”行中的两个错误“col”均突出显示。抱歉,编辑了代码。在excel VBA中,表示行数或列数的任何变量都必须声明为Long。很高兴您使用了
    选项Explicit
    ,这是一个很好的实践,确保声明了每个变量。我跳过了那个声明。