# Taschenrechner [VBA]



## mcbek (16. Februar 2006)

Hallo an alle,

morgen schreiben wir eine Klausur im Fach Datenprogrammierung, aber ich habe ein Problem .

Seit 2 Tagen versuche ich dieses Problem zu lösen kam auch sehr weit, nur jetzt bekomme ich eine Fehlermeldung.

"Argumenttyp ByRef unverträglich" soweit ich denke müsste alles richtig sein. Ich stelle den Code hier rein.



```
Option Explicit

Public Function multi(z1 As Integer, z2 As Integer) As Integer

multi = z1 * z2

End Function
Public Function ad(z1 As Integer, z2 As Integer) As Integer

ad = z1 + z2

End Function

Public Function minus(z1 As Integer, z2 As Integer) As Integer

minus = z1 - z2

End Function

Public Function divi(z1 As Integer, z2 As Integer) As Integer

divi = z1 / z2

End Function
Public Sub uebung()


Dim a As Integer
Dim b As Integer
Dim i As Integer
Dim z1 As String
Dim z2 As String
Dim eingabe As String
Dim laenge As Integer
Dim zeichen As String
Dim oper As String
Dim erg As Integer




eingabe = InputBox("huso")
laenge = Len(eingabe)

For i = 1 To laenge

    zeichen = Mid(eingabe, i, 1)
    
    If zeichen = "+" Or zeichen = "-" Or zeichen = "*" Or zeichen = "/" Then
     
        oper = zeichen
    
    End If
    
    If oper = "" Then
     
        z1 = z1 + zeichen
    
    Else
    
        If z2 = "+" Or z2 = "-" Or z2 = "*" Or z2 = "/" Then
        
            z2 = ""
        
        End If
     
      If z2 = "" Then
     
         z2 = z2 + zeichen
      
      Else
       
         z2 = z2 + zeichen
      
      End If
     
    End If


Next i

erg = ad(z1, z2)  'zum testen habe ich nur add. fkt reingeschrieben

MsgBox erg

End Sub
```


Bitte hilft mir....

Danke im Voraus


----------



## D@nger (16. Februar 2006)

Hallo,
ich habe jetzt nicht den ganzen Code durchsucht, weil er mir zu lang war,
aber hier gibt's ein Tipp dazu:
http://www.vbarchiv.net/archiv/tipp_1233.html


----------



## Nirraven (16. Februar 2006)

Hallo mcbek,
du hast 2 probleme:
Erstens "Argumenttyp ByRef unverträglich" tritt auf, weil du eine string variable an eine funktion mit integer variablen übergeben willst.

Die Lösung wäre

```
erg = ad(CInt(z1), CInt(z2))
```

Zweites Problem, dein Rechner kann nur addieren... aber das ist ja nur n select case mehr... ;-)


----------



## mcbek (16. Februar 2006)

Das Problem habe ich sogut wie gelöst.

Ich habe einfach in der Funktion nochmal z1 und z2 als Integer deklariert

jetzt weiß ich aber nicht wie ich das machen kann, dass er bei der Ausgabe das richtige Ergebnis ausgibt habe für jeden operant erg_ad, erg_minus deklariert als Integer


----------



## Shakie (16. Februar 2006)

Nebenbei bemerkt, dieser Codeteil ist nicht gerade sehr sinnvoll:

```
If z2 = "" Then
     
         z2 = z2 + zeichen
      
      Else
       
         z2 = z2 + zeichen
      
      End If
```
Wenn z2="" dann mache etwas und andernfalls mache genau das gleiche als wäre z2=""
Einfacher ist doch wohl:

```
z2 = z2 + zeichen
```


----------



## mcbek (16. Februar 2006)

Shakie hat gesagt.:
			
		

> Nebenbei bemerkt, dieser Codeteil ist nicht gerade sehr sinnvoll:
> 
> ```
> If z2 = "" Then
> ...




sonst setzt er die Zahl nach dem Operant nicht in z2 ein.. hab ich schon veruscht


----------



## Nirraven (17. Februar 2006)

Also mcbek, du hast ne pn...  
Ansonsten, generell funktioniert das wohl, 
und für die funktionen wäre z.B.

```
Public Function ergebnis(z1 As Integer, z2 As Integer, oper) As Integer
Select Case oper
 case "+"
  ergebnis = z1 + z2
 case "-"
  ergebnis = z1 - z2
 case "*"
  ergebnis = z1 * z2
 case "/"
  ergebnis = z1 / z2
end select
End Function
```
ne Lösung.


----------

