.PasswordChar свойство текстового поля пользовательской формы не работает в Mac Excel - PullRequest
0 голосов
/ 24 июня 2018

.PasswordChar свойство маскирует текстовое поле ввода тем символом, который пользователь выбирает правильно в Excel для Windows, но не в Excel для Mac.

Я работал с Textbox1_Change событиями, но он не работает эффективно.

Может кто-нибудь намекнуть мне, что мне делать?

Private Sub TextBox1_Change()

    Dim mystring As Variant
    Dim textlen As Integer
    Dim counter As Integer

    mystring = UserForm1.TextBox1.Value
    textlen = VBA.Len(mystring)

    If VBA.Right(mystring, 1) = "*" Then
        Exit Sub
    ElseIf VBA.Right(mystring, 1) <> "*" Then
    End If

    If shes = vbNullString Then
    Else
    shes = Sheets("Sheet1").Range("A1").Value
    End If

    For counter = 1 To textlen
        If textlen > 0 Then
            If VBA.Mid(mystring, counter, 1) = "*" Then
            Else
                Sheets("Sheet1").Range("A1").Value = Sheets("Sheet1").Range("A1").Value & VBA.Mid(mystring, counter, 1)
            End If
        End If
    Next

    If textlen > 0 Then
        UserForm1.TextBox1.Value = VBA.Replace(mystring, VBA.Mid(mystring, textlen, 1), "*")
    End If

End Sub

Вот код, который работал для меня в Windows и MAC Excel оба.

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

    Private Sub TextBox1_Change()

    Dim mystring As Variant
    Dim textlen As Integer
    Dim counter As Integer
    Dim passlen As Integer

    mystring = UserForm1.TextBox1.Value
    textlen = VBA.Len(mystring)
    passlen = VBA.Len(Sheets("Sheet1").Range("A1").Value)

    If VBA.Right(mystring, 1) = "*" Then
        If passlen <> textlen Then
            MsgBox "You're not allowed to do so"
            UserForm1.TextBox1.Value = ""
            Sheets("Sheet1").Range("A1").Value = ""
            Exit Sub
        End If
    Exit Sub
    End If

    For counter = 1 To textlen
        If textlen > 0 Then
            If VBA.Mid(mystring, counter, 1) = "*" Then
            Else
                Sheets("Sheet1").Range("A1").Value = Sheets("Sheet1").Range("A1").Value & VBA.Mid(mystring, counter, 1)
            End If
        End If
    Next

    If textlen > 0 Then
        UserForm1.TextBox1.Value = VBA.Replace(mystring, VBA.Mid(mystring, textlen, 1), "*")
    End If

End Sub

1 Ответ

0 голосов
/ 26 июня 2018

Это было довольно сложно решить. .PasswordChar Свойство текстового поля Userform недоступно для MAC Excel. Итак, если я хочу сделать приложения Excel более переносимыми и универсальными, я должен написать код, который дал те же результаты.

Так или иначе, я нашел решение через событие Textbox1_Change. Ограничением моей версии является только то, что пользователь хочет отредактировать или удалить какой-либо отдельный текст строки пароля, тогда это не позволит пользователю сделать это. Я не думаю, что это ограничение, оно может усилить маскировку пароля.

Ну вот код:

Private Sub TextBox1_Change()

    Dim mystring As Variant
    Dim textlen As Integer
    Dim counter As Integer
    Dim passlen As Integer

    mystring = UserForm1.TextBox1.Value
    textlen = VBA.Len(mystring)
    passlen = VBA.Len(Sheets("Sheet1").Range("A1").Value)

    If VBA.Right(mystring, 1) = "*" Then
        If passlen <> textlen Then
            MsgBox "You're not allowed to do so"
            UserForm1.TextBox1.Value = ""
            Sheets("Sheet1").Range("A1").Value = ""
            Exit Sub
        End If
    Exit Sub
    End If

    For counter = 1 To textlen
        If textlen > 0 Then
            If VBA.Mid(mystring, counter, 1) = "*" Then
            Else
                Sheets("Sheet1").Range("A1").Value = Sheets("Sheet1").Range("A1").Value & VBA.Mid(mystring, counter, 1)
            End If
        End If
    Next

    If textlen > 0 Then
        UserForm1.TextBox1.Value = VBA.Replace(mystring, VBA.Mid(mystring, textlen, 1), "*")
    End If

End Sub

Я использую ячейку A1 для хранения фактической строки и буду использовать ее для настройки входа в систему.

...