我正在尝试使用 Excel VBA 宏创建一个八个字符的用户名,但结果失败了。如果输入单元格,公式似乎有效。在我的电子表格中,姓氏在 B6,名字在 C6,中间名首字母在 D6。结果进入 G6。如果姓氏和名字的长度小于 8,则中间名首字母将包含在用户名中。以下是我所得到的:
Sub Macro1()
' Macro1 Macro
Range("G6").Select
If Len(B6) >= 7 Then
ActiveCell.FormulaR1C1 = "=LOWER(CONCATENATE(LEFT(RC[-5],7),LEFT(RC[-4],1))"
Else
' ActiveCell.FormulaR1C1 = "=LOWER((LEFT(RC[-5],7)&LEFT(RC[-4],(8-LEN(RC[-5])))))"
End If
End Sub
我还没有解决在短密码中添加中间名首字母的问题。这是次要的。
答案1
就我个人而言,我会为此创建一个用户定义函数,这样你就不需要子函数来输出工作表函数
为此,您只需输入 G6 =username(C6,D6,G6)
。额外的好处是增加了代码的可读性,便于维护,并可立即将值读入宏中,而无需引用任何单元格。
Public Function UserName(ByVal firstName As String, ByVal lastName As String, ByVal middleInitial As String) As String
Dim result As String
If Len(firstName) + Len(lastName) >= 8 Then
result = firstName & lastName
Else: result = firstName & middleInitial & lastName
End If
If Len(result) > 8 Then result = Left(result, 8)
UserName = result
End Function
由于它易于阅读,因此也可以很容易地重复用于其他类似的功能。
如果您想将其保留为子项,则可以使用相同类型的代码,只需Dim
输入变量并将它们设置为各自的单元格即可。
关于此函数逻辑的重要说明 - 在您的尝试中,您没有考虑到 first + middle + last 小于 8 的可能性,所以我不知道您想用它做什么。也许您的最大值是 8,所以如果它是 5 也没关系 - 但如果是,请在添加字符时添加一些逻辑。此外,如果这是生成用户名,您可能需要根据现有用户名进行检查并调整重复项。