当在工作表的另一列(同一行)中选择状态时,我需要获取一个要进行硬编码的范围内的单元格。目的是为了衡量新员工在招聘流程的每个步骤(或状态)中待用的时间。
我尝试编写代码以使宏在工作簿打开后开始启动(模块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”,“预期编译错误的标识符”的错误消息,或者什么也没有发生。
答案 0 :(得分:1)
未能清楚地了解目标,因此承担了以下责任
Range("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
答案 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