2016-10-27 4 views
0

Der angehängte Code wird auf VBA ausgeführt, aber ich verstehe nicht, warum es einen Fehler gibt, sagt sonst ohne wenn oder wenn ohne Ende wenn. Ich bin mir ziemlich sicher, dass ich jedes Ende erreicht habe, wenn ich mit if aussage.EXCEL VBA benutzerdefinierte Funktion - sonst ohne wenn

Sub teee() dient nur zum Testen der Dezimalisierungsfunktion. Es wäre sehr wichtig, den Code zu überprüfen und mir mitzuteilen, was mit meinem Code nicht stimmt ... Ich bin fast fertig, um ein Projekt abzuschließen, wenn ich diese Funktion beheben kann.

Sub teee() 

sss = "-1-21+" 

MsgBox (decimalize(sss)) 


End Sub 

Function decimalize(s As Variant) As Long 

Dim checkers As Variant 
Dim ab As Long 
Dim leftnum As Long 
Dim rightnum As Long 
Dim poneg As Integer 


checkers = s 
ab = 0 
leftnum = 0 
rigntnum = 0 
poneg = 0 

'Positive payup or negative payup 

If Left(checkers, 1) = "-" Then 
poneg = 1 
lencheckers = Len(checkers) 
checkers = Mid(checkers, 2, lencheckers - 1) 

Else: poneg = 0 
End If 


startp = InStr(checkers, "-") 


If startp = 2 Then leftnum = Left(checkers, 1) 
ElseIf startp = 3 Then leftnum = Left(checkers, 2) 
ElseIf startp = 4 Then leftnum = Left(checkers, 3) 
End If 



rightnum = Mid(checkers, startp + 1, 2) 


If InStr(checkers, "+") > 0 Then 
ab = 0.5 
ElseIf InStr(checkers, "1/4") > 0 Then 
ab = 0.25 
ElseIf InStr(checkers, "1/8") > 0 Then 
ab = 0.125 
End If 

rightnum = rightnum + ab 


If poneg = 0 Then 
decimalize = rightnum + leftnum * 32 
ElseIf poneg = 1 Then 
decimalize = (rightnum + leftnum * 32) * -1 
End If 


End Function 

Vielen Dank im Voraus

Antwort

2

ändern es wie folgt aus:

If startp = 2 Then 
    leftnum = Left(checkers, 1) 
ElseIf startp = 3 Then leftnum = Left(checkers, 2) 
ElseIf startp = 4 Then leftnum = Left(checkers, 3) 
End If 

Info: Wenn Sie das Ergebnis nach dem "dann" auf der gleichen Zeile zu schreiben, sollte nicht enden, wenn. Daher versteht VBA nicht, woher der nächste ElseIf kommt.

Ziemlich viel sind Sie erlaubt die folgenden zwei Beispiele zu verwenden:

'Example 1 (no end if here) 
if startp = 2 then leftnum = Left(checkers,1) 

'Example 2 (you need end if here) 
if startp = 2 then 
    leftnum = Left(checkers,1) 
end if 
+0

Sehr geschätzt, Vityata, Ihre Lösung hat perfekt funktioniert! –

+0

Gut zu wissen, +1 Karma für den heutigen Tag :) Wenn Sie möchten, können Sie die Antwort auswählen, indem Sie auf die linke grüne Markierung wie folgt klicken: http://meta.stackexchange.com/questions/5234/how-does-accepting- an-answer-work – Vityata

2

@Vityata zeigte eine Möglichkeit, dass bestimmte Fehler zu beseitigen. Ein anderer Weg ist, If zusammen zu vermeiden und eine Select Case zu verwenden. Der resultierende Code ist etwas besser lesbar:

Select Case startp 
    Case 2: leftnum = Left(checkers, 1) 
    Case 3: leftnum = Left(checkers, 2) 
    Case 4: leftnum = Left(checkers, 3) 
End Select 

Auch Sie haben ein beliebiges Muster einige Variablen zu erklären, andere aber nicht, und Sie haben mindestens einen variablen Tippfehler: rigntnum = 0 sollte an Sicherheit grenzender Wahrscheinlichkeit rightnum = 0 sein. Sie müssen wirklich Option Explicit an der Spitze aller Ihrer Module verwenden (aktivieren Sie auch Require Variable Declaration in den VBA-Editor-Optionen). Das wird Ihnen helfen, Code zu schreiben, der nicht anfällig für zufällige Fehler ist.

+0

Vielen Dank für den guten Rat John, Will für das nächste Mal tun. Die gleichzeitige Verwendung mehrerer IF-Anweisungen macht mich immer kompliziert. –