VBA - удалить дубликаты (случай НЕ чувствительный), разделенные запятой внутри ячеек в excel? [Дубликат]

Сила пароля должна быть проверена от имени нескольких параметров, таких как наличие специальных символов и чисел, длина пароля и т. д.

Я нашел ниже учебник с приятной демонстрацией:

http://tinytute.com/2014/06/03/animated-password-strength-checker-quick-easy/

Кодовый блок jQuery:

$(document).ready(function(){

    $("#textBox").keyup(function(){

        var passWord = $("#textBox").val();
        var passLength = passWord.length;
        var specialFlag = 0;
        var numberFlag = 0;
        var numberGenerator = 0;
        var total = 0;

        if(/^[a-zA-Z0-9- ]*$/.test(passWord) == false) {

            specialFlag =20;
        }


        if(passWord.match(/[0-9]/)) {

            numberFlag = 25;
        }

        if(passLength>4&&passLength<=6){
            numberGenerator =25;
        }else if(passLength>=7&&passLength<=9){
            numberGenerator =35;
        }else if(passLength>9){
            numberGenerator =55;
        }else if(passLength>0&&passLength<=4){
            numberGenerator =15;
        }else{
            numberGenerator =0;
        }

        total = numberGenerator + specialFlag + numberFlag;
        if(total<30){
            $('#progressBar').css('background-color','#CCC');
        }else if(total<60&&total>=30){

            $('#progressBar').css('background-color','#FF6600');

        }else if(total>=60&&total<90){

            $('#progressBar').css('background-color','#FFCC00');

        }else if(total>=90){

            $('#progressBar').css('background-color','#0f0');

        }
        $('#progressBar').css('width',total+'%');

    });

});

Надеюсь, что эти логические решения помогут решить проблему

4
задан Tony 24 July 2015 в 08:55
поделиться

1 ответ

Мне всегда нравилось задавать все для моего кодирования. Таким образом, все модули и код, лежащие на моих листах или в формах, начинаются со следующих трех строк, прежде чем писать какой-либо дополнительный код.

Option Base 0
Option Explicit
Option Compare Text

Если я хочу, чтобы что-то обрабатывалось по-разному в определенном Sub для по какой-то причине, тогда я делаю это только в этом конкретном sub и делаю так, как было предложено в комментарии выше (пример):

dict.CompareMode = BinaryCompare 'if I need a case-sensitive compare in this sub

Поскольку VBE знает, что dict является Словарем, он может предоставить предложения для автозаполнения. Это возможно только при раннем связывании. При позднем связывании VBE не будет предоставлять никаких автозаполненных предложений.

4
ответ дан Ralph 16 August 2018 в 05:02
поделиться
  • 1
    Option Compare Text не влияет на объекты Dictionary. По умолчанию они всегда будут выполнять сравнения по двоичным / случайным критериям. – Bond 25 July 2015 в 03:29
  • 2
    @ Бонд: Я этого не знал. Спасибо, что поделился. Хорошо знать. – Ralph 27 July 2015 в 10:27
  • 3
    Я только что проверил и нет такой вещи, как vbTextCompare. Откуда это? Это должно быть dict.CompareMode = TextCompare. – Ralph 25 July 2018 в 07:38
  • 4
    Ах, я только что увидел, что пользователь @ Marcucciboy2 обновил ваш ответ с неправильным кодом и вернул его обратно. Теперь это снова правильно. – Ralph 25 July 2018 в 07:50
  • 5
    @Ralph vbTextCompare - заданная константа для этой операции. Это может быть вопрос о том, какую версию excel вы используете, но если вы не верите, что я проверяю документацию microsoft для себя msdn.microsoft.com/en-us/vba/language-reference-vba/ статьи / & hellip; – Marcucciboy2 26 July 2018 в 23:48
  • 6
    @Ralph моя машина не будет обновлять режим сравнения dict, пока я не добавлю префикс vb – Marcucciboy2 26 July 2018 в 23:48
  • 7
    @ Marcucciboy2 Это потому, что вы используете ленивую позднюю привязку и не правильно dim используете переменные в качестве словаря, а скорее как Objects, а затем (далее в коде) сообщают VBA в вашем коде (во время выполнения), что это Object на самом деле является словарем, использующим CreateObject("Scripting.Dictionary"). Так как ваша переменная в это время Object, вы можете использовать vbTextCompare или 1 (потому что ваша переменная по существу является объектом). Или вы даже можете установить CompareMode = 1 напрямую. Тем не менее, если вы используете раннее связывание, тогда vbTextCompare будет отказано, и будет работать только TextCompare. – Ralph 27 July 2018 в 10:41
  • 8
    Очень интересно. Когда я использую правильные ссылки и раннюю привязку, он принимает только TextCompare. Если я сниму эту ссылку и использую позднюю привязку, только vbTextCompare изменит значение dict.CompareMode – Marcucciboy2 30 July 2018 в 13:47