我目前正在尝试创建一个函数,仅当与其相邻的单元格包含文本Open
时,才会自动填充单元格中的当前日期。
同样,如果状态为Closed
,我也希望函数执行相同的操作。
此代码的主要挑战是我不希望使用=TODAY()
或=NOW()
等函数更改日期,而是希望这些日期在填充后永久保留。
这是我希望能够使用此功能的表的图像。
就代码而言,这是我能够提出的建议:
Function add_todays_date()
If Sheets("Sheet2").Range("C5") = "Open" Then
Sheets("Sheet3").Range("G4").Copy
ActiveWorkbook.Sheets("Sheet2").Range("D5").PasteSpecial Paste:=xlValues
答案 0 :(得分:1)
您可以结合使用IsEmpty测试,以避免覆盖已查看和填充的单元格。
证明原则:
Option Explicit
Sub test()
With ActiveSheet
If IsEmpty(.Cells(1, 2)) And .Cells(1, 1) = "Open" Then
.Cells(1, 2) = Format(Now(), "dd/mm/yyyy")
End If
End With
End Sub
或者在循环结构中:
Option Explicit
Sub test()
Dim currCell As Range
For Each currCell In ActiveSheet.Range("B1:B10") 'Adjust as required
If IsEmpty(currCell) And currCell.Offset(0, -1) = "Open" Then
currCell = Format(Now(), "dd/mm/yyyy")
End If
Next currCell
End Sub
答案 1 :(得分:1)
我不认为你想要一个函数,它们像Excel工作表函数一样工作,它们可能会在你下次打开工作簿或刷新工作表时更新。
Option Explicit
Public Function add_todays_date()
Dim selected_range As Range
Set selected_range = Selection
With selected_range.Offset(0, -1)
If .Value = "Open" Or .Value = "Closed" Then
add_todays_date = Format(Now, "dd/mm/yy")
End If
End With
End Function
@Qharr回答是我要做的,你甚至可以创建一个快捷方式来执行子程序比输入函数更快..