我们使用电子表格作为时间卡。模板存储在服务器中,并在个人桌面上有指向该模板的链接。
我正在尝试找出有助于实现以下情况的 VB 代码:当用户名单元格 (B5) 为空时,代码将在 (B7) 中填充下周日的日期。用户在 B5 中输入姓名后,B7 的值不应更改。
如果我=IF(B5="",TODAY()+8-WEEKDAY(TODAY()),B7)
在 B7 中使用公式(),则需要启用循环引用,这不遵循电子表格的模板,从而导致每个人都出现错误。
公司表示,由于导入软件的原因,工作表需要放在 Excel 中。否则,我会使用 Word 并使用“CreateDate”函数来实现相同的目的。
我一直在尝试学习 VB 来实现这一点,但我希望一些专家可以在 5 分钟内帮我写出代码,然后让我分析一下。
答案1
您可以使用该程序自动打开,每次打开工作簿时都会自动执行。启动 VBA 编辑器 ( ALT+ F11),插入一个新的 VBA 模块并复制粘贴下面的代码。将其保存,您就可以开始了。
该代码看起来很像您已有的公式:
Sub Auto_Open()
Const Sheetname = "Sheet1"
Const NameCell = "B5"
Const DateCell = "B7"
If IsEmpty(Worksheets(Sheetname).Range(NameCell).Value) Then
Worksheets(Sheetname).Range(DateCell).Value = Date + 8 - Weekday(Date)
End If
End Sub