我想通过字段代码插入当前用户名。有一个字段代码 UserName。此字段代码的返回值类似于Application.UserName
VBA 中的“Super User”。我想要返回值类似于Environ("username")
VBA 中的“super.user”。
我如何通过字段代码实现这一点,或者只能通过 VBA 实现?
答案1
帖子
如何根据(登录ID)插入当前用户的姓名
解释说,登录名存储在名为的 Windows 环境变量中USERNAME
,只能通过调用 VBA 函数的宏来检索Environ
。
可以这样将登录名设置到名为 的 Word 变量中
username
。
编写一个名为的宏
AutoNew
和另一个名为的宏,AutoOpen
如下所示:Sub AutoNew() GetUserName End Sub Sub AutoOpen() GetUserName End Sub Sub GetUserName() ActiveDocument.Variables("username").Value = Environ("USERNAME") ActiveDocument.Fields.Update End Sub
(看http://www.gmayor.com/installing_macro.htm如果您需要说明。)
AutoNew
当您从 Normal 模板或任何其他模板创建新文档时,宏将运行;AutoOpen
当您打开现有文档时,宏将运行。它们都调用GetUserName
例程,该例程从环境变量中获取用户名并将其放入当前文档中的变量(名为“用户名”)。然后,在文档中或文档所基于的模板中插入字段
{DocVariable username}
在您希望显示登录名的位置。您必须使用快捷键 Ctrl+F9 插入括号以使其成为字段,或者使用插入 > 快速部件 > 字段对话框插入
DocVariable
字段。按 F9 更新字段。该字段将显示最近放入用户名文档变量的值。
有关使用该变量的更多详细信息:
在快速部分 - 插入字段 - 选择
docvariable
并输入username
,然后单击确定。按 Alt+F9 显示用户登录名。
参见图:
答案2
我认为 harrymc 的原始答案符合您的要求。我投了赞成票,并将其添加到我的有用宏集合中。这是我对宏的修改,您可能会觉得这是一个改进。
- 如果没有 DocVariable 字段,则不会生成错误消息,并且
- 它仅更新 DocVariable 字段,这对您来说可能重要也可能不重要。
请注意,我怀疑它可能需要更长时间才能运行。
我会在这里将其作为评论发表,但它对宏观结构实际上不起作用。
Sub GetUserName()
' https://superuser.com/questions/1818656/how-to-insert-username-in-system-username-format-in-word-using-field-code
' 2023-11-30
' by harrymc modified by Charles Kenyon
' Gets UserName from system, creates variable, and updates Document Variable field
On Error Resume Next
Dim oField As Field
ActiveDocument.Variables("username").Value = Environ("USERNAME")
For Each oField In ActiveDocument.Fields
If oField.Type = wdFieldDocVariable Then oField.Update
Next oField
On Error GoTo -1
Set oField = Nothing
End Sub