在我的组织中,我们有一个Excel模板,所有员工都必须经常填写。该模板每年生成数百/数千个Excel文件(工作簿)。
为了组织起见,我迫切需要为每个文件都有一个唯一的ID(即该模板生成的每个工作簿的唯一ID)。
目前,我的想法是在工作簿的单元格中生成以下ID:
[用户] - [YYYYMMDD] - [HHMMSS]
其中:
user
是一个字符串,表示将由用户填写的员工的用户名。所以这里没问题。 YYYYMMDD
是年,月,日
连接hhmmss
是小时,分钟和秒连接对于这个效果,我需要我的Excel模板自动填充一个包含YYYYMMDD-hhmmss
信息的单元格以及生成的确切日期和时间。
一旦模板生成工作簿,就应该创建此信息,并且以后不能更改。所以这些应该是(受保护的)单元格中的值而不是公式(我猜)。
在搜索了很长时间后,我无法弄清楚如何做到这一点。我不确定是否需要它,但我不是VBA的主人。
答案 0 :(得分:0)
以下是一些可用于获取身份的功能。如果你把它放在模板上的vba模块中,你就可以从工作表或其他vba代码中调用这些函数(例如在工作簿中输入'= get_id()',在vba中你会做类似'id = get_id'的事情()'称之为:
选项明确
Public Function lpad(string1, padded_length, _
Optional pad_string = " ")
Dim chars
chars = padded_length - Len(string1)
lpad = WorksheetFunction.Rept(pad_string, chars) & string1
End Function
Public Function get_id()
Dim user
Dim YYYYMMDD
Dim hhmmss
user = Environ("username")
YYYYMMDD = Year(Now()) & lpad(Month(Now()), 2, 0) & lpad(Day(Now()), 2, 0)
hhmmss = lpad(Hour(Now()), 2, 0) & lpad(Minute(Now()), 2, 0) & lpad(Second(Now()), 2, 0)
get_id = user & "-" & YYYYMMDD & "-" & hhmmss
End Function
lpad功能仅用于格式化(因此您将获得7月7日而不是7等)。我还在这里添加了一些内容,将用户设置为当前用户名的windows环境变量,但是如果你想提交用户,那么这部分很容易被替换。
如果您有任何问题,请与我们联系。
答案 1 :(得分:0)
拥有日期/时间字段的想法很好....创建一个对此
的工作簿
将以下代码添加到ThisWorkbook模块:
Private Sub Workbook_Open()
If [B2] = "" Then
' timestamp
[B2] = Now()
' suppress warning when saving macro containing workbook in non-macro format
Application.DisplayAlerts = False
' save under calculated name
ActiveWorkbook.SaveAs [B1] & "-" & Format([B2], "YYYYMMDD-hhmmss")
' turn on alerts again
Application.DisplayAlerts = True
End If
End Sub
并另存为启用宏的模板
然后从这个模板创建一个[File - New] ....它将立即以删除了宏的用户名保存,以便代码不能再次点击它。
可以从环境或注册表中重新获取用户名。
或者,您可以检查文件是否具有真实名称,或者(仍然)名为Book nnn ,这意味着它之前尚未保存;这样就无需在工作簿中保留时间戳单元格