2

Я пытаюсь использовать макрос VBA Excel для создания имени пользователя из восьми символов, и то, что я придумала, не получается. Если ввести в ячейку, формулы, кажется, работают. В моей таблице у меня есть фамилия в 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 ответ1

3

Лично я бы создал для этого пользовательскую функцию, чтобы вам не требовалось подпрограмма для вывода функции листа

Для этого вы просто должны ввести в 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 переменные и устанавливая их в соответствующие ячейки.

Важное замечание о логике этой функции - в своей попытке вы не учитываете вероятность того, что первый + средний + последний будет меньше 8, поэтому я не знаю, что вы хотели бы с этим сделать. Может быть, ваш максимум равен 8, поэтому не имеет значения, равен ли он 5 - но если это так, добавьте немного логики в добавлении символов. Кроме того, если это генерирует имена пользователей, вы, вероятно, захотите проверить их по существующим именам пользователей и настроить на дубликаты.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .