2017-01-13 3 views
-2

, поэтому я довольно новичок в кодировании, особенно в Vbscript, поэтому я возился, пытаясь научиться. Поэтому я работал над небольшой программой, которая будет принимать имя пользователя (например, имя пользователя компьютера), добавить буквы и оскорбить пользователя на основе суммы, потому что почему бы и нет. Тем не менее, я все время сталкиваюсь с ошибкой на строке 10, и из-за того, как мой код настроен, я уверен, что столкнусь с ним и на каждой последующей строке. Не могли бы вы мне помочь? Я продолжаю получать код ошибки 800A01B6 «Объект не поддерживает это свойство или метод». (я удалил оскорбления из-за используемым языком, не беспокойтесь о том, что ...)объект vbscripting не поддерживает свойство или метод Если elseif else

Dim networkInfo 
Dim nameVal 
Dim infoStr 
Dim insult 

Set networkInfo = CreateObject("WScript.NetWork") 
nameVal=1 
infoStr = networkInfo.UserName & vbCr & vbLf 

if InStr(1, networkInfo, "a") > 0 Then 
    nameVal = nameVal + 1 
Elseif  InStr(1, networkInfo, "b") > 0 Then 
       nameVal = nameVal + 2 
Elseif  InStr(1, networkInfo, "c") > 0 Then 
       nameVal = nameVal + 3 
Elseif  InStr(1, networkInfo, "d") > 0 Then 
       nameVal = nameVal + 4 
Elseif  InStr(1, networkInfo, "e") > 0 Then 
       nameVal = nameVal + 5 
Elseif  InStr(1, networkInfo, "f") > 0 Then 
       nameVal = nameVal + 6 
Elseif  InStr(1, networkInfo, "g") > 0 Then 
       nameVal = nameVal + 7 
Elseif  InStr(1, networkInfo, "h") > 0 Then 
       nameVal = nameVal + 8 
Elseif  InStr(1, networkInfo, "i") > 0 Then 
       nameVal = nameVal + 9 
Elseif  InStr(1, networkInfo, "j") > 0 Then 
       nameVal = nameVal + 10 
Elseif  InStr(1, networkInfo, "k") > 0 Then 
       nameVal = nameVal + 11 
Elseif  InStr(1, networkInfo, "l") > 0 Then 
       nameVal = nameVal + 12 
Elseif  InStr(1, networkInfo, "m") > 0 Then 
       nameVal = nameVal + 13 
Elseif  InStr(1, networkInfo, "n") > 0 Then 
       nameVal = nameVal + 14 
Elseif  InStr(1, networkInfo, "o") > 0 Then 
       nameVal = nameVal + 15 
Elseif  InStr(1, networkInfo, "p") > 0 Then 
       nameVal = nameVal + 16 
Elseif  InStr(1, networkInfo, "q") > 0 Then 
       nameVal = nameVal + 17 
Elseif  InStr(1, networkInfo, "r") > 0 Then 
       nameVal = nameVal + 18 
Elseif  InStr(1, networkInfo, "s") > 0 Then 
       nameVal = nameVal + 19 
Elseif  InStr(1, networkInfo, "t") > 0 Then 
       nameVal = nameVal + 20 
Elseif  InStr(1, networkInfo, "u") > 0 Then 
       nameVal = nameVal + 21 
Elseif  InStr(1, networkInfo, "v") > 0 Then 
       nameVal = nameVal + 22 
Elseif  InStr(1, networkInfo, "w") > 0 Then 
       nameVal = nameVal + 23 
Elseif  InStr(1, networkInfo, "x") > 0 Then 
       nameVal = nameVal + 24 
Elseif  InStr(1, networkInfo, "y") > 0 Then 
       nameVal = nameVal + 25 
Elseif  InStr(1, networkInfo, "z") > 0 Then 
       nameVal = nameVal + 26 
Else  MsgBox ("") 

End If 

If nameVal < 5 Then 
    insult = ("") 
Elseif nameVal > 5 Then 
    insult = ("") 
Elseif nameVal > 10 Then 
    insult = ("") 
Elseif nameVal > 20 Then 
    insult = ("") 
Elseif nameVal > 30 Then 
    insult = ("") 
Elseif nameVal > 40 Then 
    insult = ("") 
Elseif nameVal > 50 Then 
    insult = ("") 
Elseif nameVal > 60 Then 
    insult = ("") 
Elseif nameVal > 70 Then 
    insult = ("") 
Elseif nameVal > 80 Then 
    insult = ("") 
Elseif nameVal > 90 Then 
    insult = ("") 
Elseif nameVal > 100 Then 
    insult = ("") 
Elseif nameVal > 110 Then 
    insult = ("") 
Elseif nameVal > 120 Then 
    insult = ("") 
Elseif nameVal > 130 Then 
    insult = (".") 
Elseif nameVal > 140 Then 
    insult = ("") 
Elseif nameVal > 150 Then 
    insult = ("") 
Elseif nameVal > 160 Then 
    insult = ("") 
Elseif nameVal > 170 Then 
    insult = ("") 
Elseif nameVal > 180 Then 
    insult = ("") 
Elseif nameVal > 190 Then 
    insult = ("") 
Elseif nameVal > 200 Then 
    insult = ("") 
Elseif nameVal > 210 Then 
    insult = ("") 
Elseif nameVal > 220 Then 
    insult = ("") 
Elseif nameVal > 230 Then 
    insult = ("") 
Elseif nameVal > 240 Then 
    insult = ("") 
Elseif nameVal > 250 Then 
    insult = ("") 
Elseif nameVal > 260 Then 
    insult = ("") 
Elseif nameVal > 270 Then 
    insult = ("") 
Elseif nameVal > 280 Then 
    insult = ("") 
Elseif nameVal > 290 Then 
    insult = ("") 
Elseif nameVal > 300 Then 
    insult = ("") 
Elseif nameVal > 310 Then 
    insult = ("") 
Elseif nameVal > 320 Then 
    insult = ("") 
Elseif nameVal > 330 Then 
    insult = ("") 
Elseif nameVal > 340 Then 
    insult = ("") 
Elseif nameVal > 350 Then 
    insult = (".") 
Elseif nameVal > 360 Then 
    insult = ("") 
Elseif nameVal > 370 Then 
    insult = ("") 
Elseif nameVal > 380 Then 
    insult = ("") 
Elseif nameVal > 390 Then 
    insult = ("") 
Elseif nameVal > 400 Then 
    insult = ("") 
Elseif nameVal > 410 Then 
    insult = ("") 
Elseif nameVal > 420 Then 
    insult = ("") 
Elseif nameVal = 420 Then 
    insult = ("") 
Elseif nameVal > 430 Then 
    insult = ("") 
Elseif nameVal > 440 Then 
    insult = ("") 
Elseif nameVal > 450 Then 
    insult = ("") 
Elseif nameVal > 460 Then 
    insult = ("") 
Elseif nameVal > 470 Then 
    insult = ("") 
Elseif nameVal > 480 Then 
    insult = ("") 
Elseif nameVal > 490 Then 
    insult = ("") 
Elseif nameVal > 500 Then 
    insult = ("") 
Elseif nameVal > 510 Then 
    insult = ("") 
Elseif nameVal > 520 Then 
    insult = ("") 
Elseif nameVal > 530 Then 
    insult = ("") 
End If  
MsgBox infoStr & insult 

Если вы можете дать мне советы о том, как сделать этот код более эффективным или лучше структурирован, я был бы признателен за это! Спасибо, что нашли время, чтобы прочитать это и любую помощь, которую вы можете мне дать.

+0

Это классический случай нарушения премьер принцип программирования - [DRY] (https://en.wikipedia.org/wiki/Don't_repeat_yourself). Что вы пытаетесь сделать? Вы можете использовать «Массив» для каждого значения и использовать цикл для их запуска и выполнять проверку без повторения всех повторяющихся строк, трудночитаемых, неэффективных и боль для управления. – Lankymart

+0

Я не думаю, что ваш скрипт работает так, как вы хотите его на данный момент.Похоже, вы хотите проверить все варианты букв в имени пользователя и сгенерировать из него числовое значение, однако на данный момент он будет проверять только первое совпадение, чтобы ваша следующая проверка, например, для 'Elseif nameVal = 420 Then' никогда не пострадает от наибольшего числа, которое будет выдано первой проверкой, это '26'. – Lankymart

ответ

2

InStr работает только с String и в своем коде вы используете его с Object, следовательно, получать сообщение об ошибке. Заменить строку:

if InStr(1, networkInfo, "a") > 0 Then 

С:

if InStr(1, infoStr, "a") > 0 Then 

также использовать Select...Case вместо кучки If and ElseIf.

+0

СПАСИБО СМОТРЕТЬ! Теперь он отлично работает! –

+0

Рад помочь :) – ManishChristian

1

@manishchristian имеет answered the initial question.

Однако, судя по коду, вы пытаетесь создать числовое значение на основе имени пользователя. На данный момент код, который вы написали, не будет работать так, как вы ожидаете, потому что у вас нет кода для прокрутки и проверки всех условий.

Код также очень повторяющийся и громоздкий, что нарушает принцип ключа в программировании, DRY (Don't Repeat Yourself).

Ниже приводится лишь один из многих способов решения этой проблемы. метод использует вложенный массив для установки связанного с ним символа и числового значения (легко настраивается, изменяя значения). Затем он перебирает каждый символ в имени пользователя и применяет логику в одной строке вместо неуклюжего оператора If.

Side Примечание: Если letters массив всегда по той же схеме нет ничего, чтобы остановить вас здание, которое динамически, которое даже меньше кода.

Option Explicit 
Dim i, nameVal 
Dim netinfo: Set netinfo = CreateObject("WScript.Network") 
Dim username: username = netinfo.UserName 

Dim letter 
Dim letters: letters = Array(_ 
     Array("a", 1), Array("b", 2), Array("c", 3), Array("d", 4), Array("e", 5) _ 
    , Array("f", 6), Array("g", 7), Array("h", 8), Array("i", 9), Array("j", 10) _ 
    , Array("k", 11), Array("l", 12), Array("m", 13), Array("n", 14), Array("o", 15) _ 
    , Array("p", 16), Array("q", 17), Array("r", 18), Array("s", 19), Array("t", 20) _ 
    , Array("u", 21), Array("v", 22), Array("w", 23), Array("x", 24), Array("y", 25) _ 
    , Array("z", 26)) 

For i = 1 To Len(username) 
    For Each letter In letters 
     If LCase(Mid(username, i, 1)) = LCase(letter(0)) Then nameVal = nameVal + letter(1) 
    Next 
Next 

WScript.Echo username & " = " & nameVal 

Выход:

Joe.Bloggs = 92