Übergabeart (ByVal / ByRef) (VBA)

CeeDiii_, Donnerstag, 18.04.2019, 08:18 (vor 240 Tagen)

Hallo zusammen,

ich habe gerade das VBA-Tutorial begonnen und bisher höchstens Einsteigerwissen in Python. Nun bin ich beim Tutorial-Punkt Übergabeart unter Prozeduren angelangt und habe ein Verständnisproblem.

Die Übergabeart ByRef erklärt sich mir von selbst und funktioniert so, wie ich mir das von Variablen in Python gewohnt bin.

Nun verstehe ich aber nicht, welche Funktion ByVal hat / wie es sinnvoll in einem Programm eingesetzt werden könnte. Wenn der Variabel dann immer der Standardwert 0 zugewiesen wird, könnte ich ihr ja auch einfach 0 zuweisen und die Übergabeart ByRef wählen? Warum sollte ich überhaupt bei der Übergabeart ByVal einen Wert für meine Variable definieren, wenn dieser dann nicht übergeben wird?

Verstehe ich da etwas falsch?

Danke für eure Starthilfe und Tipps.

Übergabeart (ByVal / ByRef)

Martin Asal @, Donnerstag, 18.04.2019, 10:26 (vor 240 Tagen) @ CeeDiii_

Hallo,

es geht darum, Variablen möglichst kleinteilig kapseln zu können. Vielleicht wird es so etwas klarer:

Public Sub Start()
Dim Wert1 As Integer, Wert2 As Integer
 
Wert1 = 1
Wert2 = 1
 
Aufruf Wert1, Wert2
 
Debug.Print "Wert1: " & Wert1
Debug.Print "Wert2: " & Wert2
 
End Sub
 
Public Sub Aufruf(ByVal Wert1 As Integer, ByRef Wert2 As Integer)
 
Wert1 = 2
Wert2 = 2
 
End Sub


In der Praxis ist es ja oft sinnvoll, in verschiedenen Prozeduren den gleichen Variablennamen für die gleiche Sache zu verwenden, um besser den Überblick zu behalten. Mit ByVal/byRef kann man dann entscheiden, ob sich Änderungen in der übergeordneten Prozedur auswirken sollen oder eben nicht.

Martin

Übergabeart (ByVal / ByRef)

CeeDiii_, Donnerstag, 18.04.2019, 11:48 (vor 240 Tagen) @ Martin Asal

Hallo Martin,

danke für deine schnelle Antwort.

Ich denke, du hast meinen Knoten gelöst. Wenn ich das richtig verstehe, heisst das, dass ich die Variabel in anderen Zusammenhängen verwenden kann, wo übersichtshalber die gleiche Variablenbezeichnung benötigt wird, ohne dann die Muttervariabel zu verändern.

Wünsche dir schöne Ostern.

Cedi

Übergabeart (ByVal / ByRef)

Martin Asal @, Donnerstag, 18.04.2019, 18:10 (vor 240 Tagen) @ CeeDiii_

Ich denke, du hast meinen Knoten gelöst

Immerhin führen solche Fragen auch zu einer steten Verbesserung des Tutorials ;-)

Martin

Übergabeart (ByVal / ByRef)

PhilS ⌂, Samstag, 20.04.2019, 13:14 (vor 238 Tagen) @ CeeDiii_

Wenn ich das richtig verstehe, heisst das, dass ich die Variabel in anderen Zusammenhängen verwenden kann, wo übersichtshalber die gleiche Variablenbezeichnung benötigt wird, ohne dann die Muttervariabel zu verändern.

Die Bezeichnung (der Name) einer Variable ist irrelevant. In dieser Hinsicht war Martin's Beispiel für Anfänger etwas irreführend.

ByRef übergibt die Adresse der ursprünglichen Variable. ByVal übergibt eine Kopie der Variable.

RSS-Feed dieser Diskussion
powered by my little forum