如果您向包含单词"今天"的单元格添加注释,那么我们希望触发VBA代码来替换"今天"今天的评论日期。但问题是我无法找到事件(或任何其他方式)来了解添加评论的时间,或者知道哪个单元格(范围对象)。有任何想法吗?
我当前的愚蠢解决方案是在Worksheet_SelectionChange
事件中添加VBA代码(遗憾的是,在选择更改之前我无法获取旧位置),然后执行For Each
循环,检查表格中的每个评论,然后执行该替换。
答案 0 :(得分:0)
解决方法可能是使用“帮助”单元格来存储最后一个选定单元格的地址,以便一旦用户完成注释并选择另一个单元格,事件处理程序将仅检查“最后一个”单元格
类似于下面的内容(我使用单元格“A1”作为“帮助者”)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cmt As Comment
With Target
If .Address <> Cells(1, 1) Then
Set cmt = Range(Cells(1, 1)).Comment
If Not cmt Is Nothing Then
With cmt
.Text (Replace(.Text, "today", Date))
End With
End If
End If
End With
Cells(1, 1) = Target.Address
End Sub
答案 1 :(得分:0)
上次单击的单元格的地址可以方便地存储在变量中。下面的代码应安装在期望采取措施的选项卡的代码表中。激活工作表后,它将记录ActiveCell并跟踪此后的每次单击。如果上次单击的单元格中有评论,它将用当前计算机日期替换“今天”一词。
Dim PrevCell As Range
Private Sub Worksheet_Activate()
Set PrevCell = ActiveCell ' last previously selected cell
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Cmt As Comment
On Error GoTo NoPrevCell
' an error would occur if your code crashes for some
' unrelated reason and the sheet isn't activated
' before resuming work on the same sheet.
Set Cmt = PrevCell.Comment
If Not Cmt Is Nothing Then
With Cmt
.Text Replace(.Text, "today", Format(Date, "dd-mm-yy"), _
1, -1, vbTextCompare)
End With
End If
Set PrevCell = ActiveCell
Exit Sub
NoPrevCell:
Worksheet_Activate
Resume 0
End Sub
我认为让此应用程序的替换功能能够识别“ Today”的大小写,这一点很重要。这是通过在函数本身中指定不区分大小写来实现的。我也更喜欢在函数中在此处设置日期格式,而不是依赖Windows设置中确定的“短日期”格式。