albertminrich
Goto Top

Vb Script. Unterschied zwischen public und dim

Hallo,

was ist denn der Unterschied in vbs, ob ich eine Variable mit DIM oder mit PUBLIC deklariere?

Grundsätzlich ist mir schon klar, dass es einen Unterschied macht, wo man eine Variable deklariert.
In diesem Beispiel enthält die Variable myVar nur innerhalb der SUB einen Wert:
MeineSub
WScript.Echo "Variable myVar ausserhalb der SUB: " & myVar  

Sub MeineSub
        DIM myVar
	myVar = "a"  
	WScript.Echo "Variable myVar innerhalb der SUB: " & myVar  
End Sub


In diesem Beispiel enthält die Variable myVar innerhalb und ausserhalb der SUB einen Wert:
DIM myVar

MeineSub
WScript.Echo "Variable myVar ausserhalb der SUB: " & myVar  

Sub MeineSub
	myVar = "a"  
	WScript.Echo "Variable myVar innerhalb der SUB: " & myVar  
End Sub

Aber wenn ich PUBLIC anstatt DIM verwende, erhalte ich das gleiche Ergebnis:
PUBLIC myVar

MeineSub
WScript.Echo "Variable myVar ausserhalb der SUB: " & myVar  

Sub MeineSub
	myVar = "a"  
	WScript.Echo "Variable myVar innerhalb der SUB: " & myVar  
End Sub


Hier wird der Gültigkeitsbereich von DIM und PUBLIC erklärt:
http://gs-electronics.nl/comp-html/vbsdocs/vbs569.htm
http://gs-electronics.nl/comp-html/vbsdocs/vbs589.htm

DIM = Variablen, die mit Dim auf Skriptebene deklariert wurden, stehen allen Prozeduren des Scripts zur Verfügung.
PUBLIC = Variablen, die mit der Public-Anweisung deklariert wurden, sind in allen Prozeduren, Skripten und Projekten

Bei VBA ist das ja ein Unterschied, aber was bedeutet bei einem vb-Script "...Skripten und Projekten..."?

Danke
Gruß
Martin

Content-ID: 619781

Url: https://administrator.de/contentid/619781

Ausgedruckt am: 24.11.2024 um 04:11 Uhr

mbehrens
mbehrens 06.11.2020 um 22:44:53 Uhr
Goto Top
Zitat von @AlbertMinrich:

was ist denn der Unterschied in vbs, ob ich eine Variable mit DIM oder mit PUBLIC deklariere?

Heutzutage noch VBS?

Der Unterschied wird erst bei der Verwendung von Klassen zum Tragen kommen.
lcer00
lcer00 07.11.2020 um 09:07:26 Uhr
Goto Top
Hallo,
Zitat von @mbehrens:
Heutzutage noch VBS?

Leider gibt es das. Ca. 80% der Formulare unserer Verwaltungssoftware sind VBS. Ich habe gerade letzte Woche im hintersten Bücherregal ein VBS-Buch suchen müssen, das ich dort vor 20 Jahren! hingestellt hatte.

Grüße

lcer
mayho33
mayho33 07.11.2020 aktualisiert um 22:31:47 Uhr
Goto Top
Zitat von @AlbertMinrich:

Hallo,

was ist denn der Unterschied in vbs, ob ich eine Variable mit DIM oder mit PUBLIC deklariere?


Hi,

Grundsätzlich sind bei VBS alle Variablen Public, wenn sie außerhalb einer Methode bzw. einer Funktion stehen.

Übrigends ist das auch in PS der Fall.

Grüße!
AlbertMinrich
AlbertMinrich 08.11.2020 um 00:20:18 Uhr
Goto Top
Zitat von @mayho33:

Zitat von @AlbertMinrich:

Hallo,

was ist denn der Unterschied in vbs, ob ich eine Variable mit DIM oder mit PUBLIC deklariere?


Hi,

Grundsätzlich sind bei VBS alle Variablen Public, wenn sie außerhalb einer Methode bzw. einer Funktion stehen.

OK, danke. Das heißt dann, es gibt keinen Unterschied.

Gruß
Martin
mayho33
mayho33 08.11.2020 um 01:02:42 Uhr
Goto Top
Zitat von @AlbertMinrich:

Zitat von @mayho33:

Zitat von @AlbertMinrich:

Hallo,

was ist denn der Unterschied in vbs, ob ich eine Variable mit DIM oder mit PUBLIC deklariere?


Hi,

Grundsätzlich sind bei VBS alle Variablen Public, wenn sie außerhalb einer Methode bzw. einer Funktion stehen.

OK, danke. Das heißt dann, es gibt keinen Unterschied.

Gruß
Martin

Doch! Wenn eine Variable innerhalb einer Funktion deklariert ist, ist sie nur da gültig. Ist eine Variable außerhalb deklariert ist sie global also im ganzen Script gültig.
mayho33
mayho33 08.11.2020 um 12:49:20 Uhr
Goto Top
Doch! Wenn eine Variable innerhalb einer Funktion deklariert ist, ist sie nur da gültig. Ist eine Variable außerhalb deklariert ist sie global also im ganzen Script gültig.

Noch ein kleiner Zusatz:

Mit "Associated script" ist, wie in dem von dir genannten Link wohl gemeint, das eingebundene Scripts ebenfalls diese Variable nutzen können.

Das ist aber eher Nonsence. Besser ist es eine Inc-Datei zu erstellen (normales Vbs aber die Dateiendung auf Inc umbenannt) und diese in dein Main-Script einzubinden.

Das macht man hauptsächlich um die Übersichtlichkeit zu verbessern und um Funktionen wieder verwenden zu können ohne sie erneut im Vbs zu erstellen.
AlbertMinrich
AlbertMinrich 08.11.2020 um 15:42:56 Uhr
Goto Top
Zitat von @mayho33:
Doch! Wenn eine Variable innerhalb einer Funktion deklariert ist, ist sie nur da gültig. Ist eine Variable außerhalb deklariert ist sie global also im ganzen Script gültig.

Ja, schon klar. Die Frage war ja nicht, was ist der Unterschied, ob eine Variable innerhalb oder außerhalb einer Funktion deklariert wird. Der Unterschied ist mir bekannt, wie auch schon im Eingangspost geschrieben.
Die Frage war, was ist der Unterschied zwischen DIM und PUBLIC und hier gibt es offenbar keinen, zumindest bei vbs.

Gruß
Martin
emeriks
emeriks 09.11.2020 um 09:17:34 Uhr
Goto Top
Zitat von @AlbertMinrich:
Die Frage war, was ist der Unterschied zwischen DIM und PUBLIC und hier gibt es offenbar keinen, zumindest bei vbs.
Na doch, Du musst schon alle Zeilen aller Kommentare lesen!

Wenn am in VBS Klassen erstellt und in diesen Klassen auf "Klassen-Ebene" Variablen deklariert, dann machte es sehr wohl einen Unterschied, ob man diese mit Public oder einfach nur mit Dim deklariert. Probiere es einfach aus.
mbehrens
mbehrens 09.11.2020 um 10:51:29 Uhr
Goto Top
Zitat von @AlbertMinrich:

Zitat von @mayho33:

Zitat von @AlbertMinrich:

Hallo,

was ist denn der Unterschied in vbs, ob ich eine Variable mit DIM oder mit PUBLIC deklariere?


Hi,

Grundsätzlich sind bei VBS alle Variablen Public, wenn sie außerhalb einer Methode bzw. einer Funktion stehen.

OK, danke. Das heißt dann, es gibt keinen Unterschied.

Wie ich bereits schrieb, gibt es natürlich einen Unterschied.
AlbertMinrich
AlbertMinrich 09.11.2020 um 11:43:28 Uhr
Goto Top
OK, werde das mit den Klassen mal ausprobieren.

Danke für alle Antworten.
Gruß
martin
rubberman
rubberman 09.11.2020 um 18:08:09 Uhr
Goto Top
Hmpf... Auch für Members von Klassen gilt das "public by default". Das Private Keyword ist da schon interessanter face-wink

Option Explicit

Class Test
  Public a
  Dim b
  Private c
End Class

Dim obj
Set obj = New Test
obj.a = "Hello " ' OK  
obj.b = "World!" ' OK  
' obj.c = "foo" ' Error  
WScript.Echo obj.a & obj.b
Set obj = Nothing
Steffen