我正在使用 LibreOffice-Calc,我想“读取”Windows 登录用户名。如果用户打开电子表格,则应将特定的单元格背景颜色更改为黄色。
在电子表格中,我有 12 个表格(一月...十二月或“0-11”)。在每个表中,“A”列中都有许多名称(不是 Windows 用户名),例如单元格 A2 = John Paulson。
如果(Windows-)用户“johnp”打开电子表格,则 A2 到 Z2 行的背景颜色应为黄色。
这是我想要实现的一个非常基本的开始:
Sub selectUserrow
Dim oUser As String
Dim oTable As String '??
Dim oColor As String '??
oUser = Environ("USERNAME")
oTable = 0-11 '??
oColor = '?? .fillcolor=rgb(255,255,0)
If oUser = "johnp" Then
[...change cell-bg-color to yellow (in all tables 0-11) from A2 till Z2...] '??
ElseIf oUser = "susanm" Then
[...change cell-bg-color to yellow (in all tables 0-11) from A3 till Z3...] '??
Else
[...do nothing...] '??
EndIF
End Sub
谢谢!
一个可能的解决方案是通过宏提供环境变量的值。这使得电子表格的公式可以访问该值。
Function Env(Name as String)
Env = Environ(Name)
End Function
然后向每个表添加一列包含用户名的列。您可能想隐藏它以避免刺激。
这可能看起来像这样(由于我的懒惰,我使用了A列,你可以使用任何你想要的):
然后为您的范围添加条件格式,在我的示例中:
条件一:
$A1=ENV("USERNAME")
范围:
注意:为了保护我的隐私,我使用了
ENV("SESSIONNAME")
。因此,黄色背景位于“Console”所在行...
正如@JohnSUN 在评论中发表的:
...将姓名对应表移动到额外的第十三页并将其隐藏会更容易吗?在这种情况下,您只需要简单 UDF 中的 Environ("USERNAME") 行和使用 VLOOKUP() 公式的条件格式
我创建了一个新工作表,其中包含
A
列中的所有 Windows 登录名。另外,在B
栏中我写下了用户的全名。
在“主”表中,我使用
VLOOKUP()
函数获取所有名称。 此处描述了此功能的工作原理。
我将包含所有胜利名称的列A
隐藏在主表中以避免刺激。所以全名显示在B
栏中。
所以,我在文档的宏编辑器中添加了以下功能:
Function USERNAME()
USERNAME = Environ("USERNAME")
End Function
通过该功能,我可以使用
=USERNAME()
调用 Windows 登录名称。
最后一步是为每一行添加条件格式。我通过
Formula is
条件实现了这一目标。在右侧字段中写下$A1=USERNAME()
。第二行是$A2=USERNAME()
,依此类推。
我选择所需的样式,并在字段 Range
中选择了应具有背景颜色的行(例如 A1:Z1)。