In VB.Net läufts. In VBA nicht :-/

Gast #4159067
Lesenswert?

Hallo Leute,

Habe mir aus einem vorhanden Programm eine Funktion rausgeholt, welche 
unter VB.NET ohne Problem läuft.
Unter VBA in Excel funktioniert es nicht :-(

Folgenden Code in ein Modul verfrachet.
Konnte Ihn auch schon ausführen.
Aber: #WERT!
1
Public Function GetLogoAbs(ByVal F As Long, ByVal t As Long) As Double
2
       GetLogoAbs = 0
3
        Dim B070 As Integer
4
        Dim B062 As Integer
5

6
        Dim B071 As Integer
7
        Dim B072 As Integer
8
        Dim B073 As Integer
9
        Dim B074 As Integer
10
        Dim B075 As Integer
11
        Dim B076 As Integer
12
        Dim B077 As Integer
13
        Dim B078 As Integer
14
        Dim B079 As Integer
15
        Dim B080 As Integer
16
        Dim B081 As Integer
17
        Dim B082 As Integer
18
        
19
        B070 = Int(t * 10)
20
        B062 = Int(F * 10)
21

22
        B071 = ((B070 * 32443) / 970) + 4849
23
        B072 = ((B070 * B070) * 3233) / -31970
24
        B073 = B071 - B072
25
        B074 = (B070 * B070) / 10
26
        B075 = (B070 * B070) / 120
27
        B076 = ((B074 * B070) * 45) / 26020
28
        B077 = ((B075 * B075) * 26) / -10090
29
        B078 = B076 - B077
30
        B079 = B073 + B078
31
        B080 = B070 / 20
32
        B081 = B079 + (B080 * (362 / 32000))
33
        B082 = (B081 * B062) / 1000
34

35
        GetLogoAbs = B082 / 1000
36
        GetLogoAbs = FormatNumber(GetLogoAbs, 1)
37
    End Function

Ich weiss, die Funktion ist nicht das gelbe vom Ei.
Aber das wurde mal aus einer SPS Steuerung extrahiert.

Woran könnte es liegen?
Gast #4159079
Lesenswert?

Wie äußert sich das "läuft nicht"? Wird eine Exception geworfen, oder 
liefert sie "nur" nicht erwartungsgemäße Ergebnisse?
In letzterem Fall dürfte es sich wohl entweder um einen Über-/Unterlauf 
oder um einen Rundnungsfehler handeln.
Sind bei VB.Net die Bereichsgrenzen von Integers unterschiedlich? Bzw. 
erweitert VB.Net evtl. automatisch die Bereichsgrenzen entsprechend?
Gast #4159131
Lesenswert?

ein Integer in VBA ist was anderes als ein Integer in VB.NET. Wenn Du 
die Parameter schon als LONG definierst und diese dann mit anderen 
Werten multiplizierst ... warum erwartest Du dann, dass das Ergebnis in 
Integer passt?
Gast #4159146
Lesenswert?

und wenn wir mal nachrechnen und den kleinsten Wert für f = 1 nehmen:

dann wird B070 = 10

und wie groß ist dann ((B070 * B070) * 3233) / -31970? Nach meiner 
Rechnung 291.330 ... und jetzt schau mal in die Definition von Integer 
und frage Dich, was passiert, wenn Du diesen Wert B072 zuweisen willst.
Gast #4159149
Lesenswert?

Peter II schrieb:
> doedel schrieb:
>> ein Integer in VBA ist was anderes als ein Integer in VB.NET.
>
> wo hast du das her?
>
> http://www.dotnetperls.com/integer
> https://msdn.microsoft.com/de-de/library/06bkb8w2.aspx
>
> scheint überall 32bit zu sein.

guckst Du Online-Hilfe von Excel: Integer variables are stored as 16-bit 
(2-byte) numbers ranging in value from -32,768 to 32,767. The 
type-declaration character for Integer is the percent sign (%).
Gast #4159167
Lesenswert?

ein Überlauf ist ein Überlauf in VBA genauso wie in VB.NET. Wenn man die 
Programmierumgebung wechselt, muss man sich aber halt mit den 
Rahmenbedingungen wie z. B. den Datentyp-Definitionen vertraut machen.
#4159174
Lesenswert?

jonasbiensack schrieb:
> VBA kann nur eine Anweisung pro Zeile! Also b = 5+5 aber nicht b =
> (5+5)*a*c;

Aha. Und woher hast Du diese Weisheit ?

Weder VBA noch VB.NET haben was mit Bascom zu tun.

Zum Thema:
Leider hat der TO nicht geschrieben, mit welchen Programmversionen er 
arbeitet. Bei VBA wärs nicht ganz unwahrscheinlich, wenn integers nur 16 
bit haben. Aber das Zitat von doedel kommt mir auch wie aus dem letzten 
Jahrtausend vor.

Gruß,
Michael

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren