Thema Datum  Von Nutzer Rating
Antwort
03.03.2015 15:05:21 Holger
Solved
03.03.2015 15:09:46 Holger
NotSolved
Rot Übergabe an Prozedur und Rückgabe
03.03.2015 15:33:30 Gast2141
NotSolved
03.03.2015 15:35:45 Gast87066
NotSolved
03.03.2015 15:58:18 Holger
NotSolved
03.03.2015 16:03:04 Holger
NotSolved
03.03.2015 16:42:44 Gast27820
NotSolved
03.03.2015 16:07:40 Gast25683
NotSolved
03.03.2015 16:50:22 Gast1976
NotSolved
04.03.2015 07:56:28 Holger
NotSolved

Ansicht des Beitrags:
Von:
Gast2141
Datum:
03.03.2015 15:33:30
Views:
1129
Rating: Antwort:
  Ja
Thema:
Übergabe an Prozedur und Rückgabe
Function Addition(zahl1 As Integer, zahl2 As Integer) As Integer
 
Addition = zahl1 * zahl2
 
End Function
 
'---------------------------
 
Sub Main()
Dim x, y, ergebnis As Integer
x = 12
y = 10
ergebnis = Addition(CInt(x), CInt(y))
Debug.Print (ergebnis)
 
End Sub

Die Fehlermeldung kommt bei dir dadurch das die Argumente bei der Funktion Addition ByRef übergeben werden, d.h. du könntest innerhalb dieser Funktion den Inhalt der Variable ändern und dieser ist dann auch außerhalb geändert. Da jedoch die Argumente von außen kein Integer vom Datentyp her sind, wie sie im Funktionskopf deklariert sind, meckert der Compiler.

 

Beispiel, was das noch mal verdeutlichen soll:

Function Addition(zahl1 As Integer, zahl2 As Integer) As Integer
  zahl1 = 1
  Addition = zahl1 * zahl2
End Function
 
'---------------------------
 
Sub Main()
  Dim x As Integer, y As Integer, ergebnis As Integer
  x = 12
  y = 10
  ergebnis = Addition(x, y)
  Debug.Print "x{" & x & "} + y{" & y & "} = " & ergebnis
End Sub

und das gleiche mit zuerstgenannten Code:

Function Addition(zahl1 As Integer, zahl2 As Integer) As Integer
  zahl1 = 1
  Addition = zahl1 * zahl2
End Function
 
'---------------------------
 
Sub Main()
  Dim x, y, ergebnis As Integer
  x = 12
  y = 10
  ergebnis = Addition(CInt(x), CInt(y))
  Debug.Print "x{" & x & "} + y{" & y & "} = " & ergebnis
End Sub

Hier bleibt zahl1 unverändert. Das liegt daran das CInt eine neue temporäre Variable erstellt, die zwar geändert wird, aber halt eben nicht Variable x.

 

Zuletzt noch ohne CInt:

Function Addition(ByVal zahl1 As Integer, ByVal zahl2 As Integer) As Integer
  Addition = zahl1 * zahl2
End Function
 
'---------------------------
 
Sub Main()
  Dim x, y, ergebnis As Integer
  x = 12
  y = 10
  ergebnis = Addition(x, y)
  Debug.Print "x{" & x & "} + y{" & y & "} = " & ergebnis
End Sub

 

PS: Da du deine Prozedur Main genannt hast, nehme ich mal an du kommst von C/C++ ? Dann müsstest du unter dem Begriff Zeiger etwas verstehen, denn genau darum geht es hier... nur verbirgt VB/VBA den Umgang mit Zeigern vor dem Nutzer.

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
03.03.2015 15:05:21 Holger
Solved
03.03.2015 15:09:46 Holger
NotSolved
Rot Übergabe an Prozedur und Rückgabe
03.03.2015 15:33:30 Gast2141
NotSolved
03.03.2015 15:35:45 Gast87066
NotSolved
03.03.2015 15:58:18 Holger
NotSolved
03.03.2015 16:03:04 Holger
NotSolved
03.03.2015 16:42:44 Gast27820
NotSolved
03.03.2015 16:07:40 Gast25683
NotSolved
03.03.2015 16:50:22 Gast1976
NotSolved
04.03.2015 07:56:28 Holger
NotSolved