2017-01-13 1 views
-2

so bin ich ziemlich neu in der Codierung, vor allem in Vbscript, so habe ich rumgemacht, versucht zu lernen, indem Sie tun. Also habe ich an einem kleinen Programm gearbeitet, das den Benutzernamen (wie den Computernutzernamen) annimmt, die Buchstaben addiert und den Benutzer basierend auf der Summe beleidigt, denn warum nicht. Ich laufe immer noch auf einen Fehler auf Zeile 10, und wegen der Art, wie mein Code eingerichtet ist, bin ich mir ziemlich sicher, dass ich in jeder nachfolgenden Zeile auch darauf stoßen werde. Kannst du mir bitte helfen? Ich bekomme immer Fehlercode 800A01B6 "Objekt unterstützt diese Eigenschaft oder Methode nicht." (Ich löschte die Beleidigungen wegen der verwendeten Sprache, keine Sorge darüber ...)vbscripting-Objekt unterstützt keine Eigenschaft oder Methode Wenn sonst

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 

Wenn auch Sie mir Tipps, wie Sie geben kann dieser Code effizienter oder besser strukturiert zu machen, ich würde das auch schätzen! Danke, dass Sie sich die Zeit genommen haben, diese und jede Hilfe zu lesen, die Sie mir geben können.

+0

Dies ist ein klassischer Fall von erstklassigem Prinzip der Programmierung zu brechen - [DRY] (https://en.wikipedia.org/wiki/Don't_repeat_yourself). Was versuchst du zu tun? Sie können für jeden Wert ein 'Array' verwenden und eine Schleife verwenden, um sie zu durchlaufen und die Überprüfung ohne all diese wiederholten Zeilen durchzuführen, schwer lesbar, ineffizient und mühsam zu verwalten. – Lankymart

+0

Ich glaube nicht, dass Ihr Skript im Moment funktioniert, wie Sie es wollen.Es sieht so aus, als ob Sie nach allen Buchstabenvariationen im Benutzernamen suchen und daraus einen numerischen Wert generieren möchten, aber im Moment wird nur nach der ersten Übereinstimmung gesucht, also zum Beispiel nach 'Elseif nameVal = 420 Then' wird nie die größte Zahl getroffen, die der erste Check erzeugt, ist "26". – Lankymart

Antwort

2

InStr funktioniert nur mit String und in Ihrem Code Sie verwenden es mit Object, damit Fehler. Ersetzen Sie Ihre Linie:

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

mit:

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

Auch Select...Case anstelle von Haufen If and ElseIf.

+0

DANKE SO VIEL! Jetzt funktioniert es perfekt! –

+0

Froh zu helfen :) – ManishChristian

1

@manishchristian hat answered the initial question.

Nach dem Code zu urteilen, versuchen Sie jedoch, einen numerischen Wert basierend auf einem Benutzernamen zu generieren. Im Moment wird der Code, den Sie geschrieben haben, nicht so funktionieren, wie Sie es erwarten, weil Sie keinen Code zum Durchlaufen haben und alle Bedingungen überprüfen.

Der Code ist auch sehr repetitiv und umständlich, was ein Schlüsselprinzip in der Programmierung, DRY (Don't Repeat Yourself) bricht.

Unten ist nur eine von vielen Möglichkeiten, wie Sie dieses Problem angehen können. Die Methode verwendet ein geschachteltes Array, um das zugehörige Zeichen und den numerischen Wert (einfach konfigurierbar durch Ändern der Werte) zu setzen. Es durchläuft dann jedes Zeichen in dem Benutzernamen und wendet die Logik in einer Zeile anstelle der unhandlichen If-Anweisung an.

Side Hinweis: Wenn das letters Array folgt immer das gleiche Muster gibt es nichts, Sie zu stoppen, die dynamisch den Aufbau, die noch weniger Code.

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 

Ausgang:

Joe.Bloggs = 92 
Verwandte Themen