Excel 宏创建 8 个字符的用户名

Excel 宏创建 8 个字符的用户名

我正在尝试使用 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 也没关系 - 但如果是,请在添加字符时添加一些逻辑。此外,如果这是生成用户名,您可能需要根据现有用户名进行检查并调整重复项。

相关内容