-1

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

我尝试编写代码以在工作簿打开后启动宏(module1),然后在使用 worksheet_change 事件(sheet1)更新列 J 中的状态后循环遍历指定的单元格范围(AC3:AQ5000) . 一旦列 J 更新为与每列匹配的状态,AC 到 AQ 列都有一个公式来确定单元格的日期(=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

一旦单元格从空白更改为(今天的)日期,我希望每列都对日期进行硬编码。到目前为止,我收到“检测到工作表更改的名称不明确”、“编译错误预期标识符”的错误,或者没有任何反应。

4

2 回答 2

1

未能清楚地理解目标和以下假设

  1. 状态将仅在 J 列中更新
  2. 如果更新状态与列 AC 到 AQ 的标题(包含状态文本)匹配,则对应于更新单元格的相应列和行将替换为当前日期。如果我假设正确,则无需遍历所有单元格,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
于 2019-06-23T03:11:22.400 回答
-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
于 2019-06-23T02:40:17.457 回答