Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

VBS: Mehrere Rückgabewerte einer Funktion -. Wie geht das?

Frage Entwicklung JavaScript

Mitglied: thl1966

thl1966 (Level 1) - Jetzt verbinden

10.06.2013 um 14:54 Uhr, 9046 Aufrufe, 16 Kommentare, 1 Danke

Hallo an alle Forenteilnehmer,

wie kann ich einer VBS-Funktion mehrere Rückgabeparameter liefern lassen.

Hinergrund:

Habe eine VBS-Funktion geschrieben, die den Standort, die Stadt etc. aus den OUs liest.

Übergabeparameter sind keine

Rückgabeparameter sind vier String-Variablen.

Bei einer einzelnen Variable weiß ich das?

Muss ich das evtl. über ein Rückgabe-Array lösen?

Wenn ja, was muss ich in meiner Funktion wie schreiben und was in meinem Hauptprogramm?

Vielen Dank im Voraus!

Thomas
Mitglied: SlainteMhath
10.06.2013 um 15:11 Uhr
Moin,

Ja, das geht über Array - in etwa so:

01.
dim y(4) 
02.
y=blubb() 
03.
 
04.
function blubb()  
05.
   dim x(4) 
06.
   blubb=x 
07.
end function
lg,
Slainte
Bitte warten ..
Mitglied: thl1966
10.06.2013 um 15:30 Uhr
Hallo Slainte,

danke für die Info.

Wie kann ich die 4 Variablen mit Werte zurückgeben.

Beispiel

In Funktion:

Var1 = "Wert1"
Var2 = "Wert2"
Var3 = "Wert3"
Var4 = "Wert5"

Wie sieht der Aufruf außerhalb der Funktion aus und in der letzten Zeile der Funktion?

lg
Thomas
Bitte warten ..
Mitglied: SlainteMhath
10.06.2013 um 15:35 Uhr
Hier wird der Umgang mit Arrays in VBScript ausführlich erklärt.
Bitte warten ..
Mitglied: thl1966
10.06.2013 um 15:40 Uhr
Danke dir für den Link.

Das schau ich mir mal an.

Der Umgang mit Array ist mir im Allgemeinen klar, nur bei der Rückgabe von einer Funktion aus.

Mein erster Test war wie folgt:

Funktion Test1()
..Code..
..Code..

DIM ArrayRueckgabeWerte(4)
Test1 = join(ArrayRueckgabeWerte(Var1,Var2,Var3, Var4)
End Function


Aufruf:

DIM ArrayWerte(4)
ArrayWerte(0) = Test1

Wenn ich von 0-3 die Werte auslesen lasse, komme ich nicht an die einzelnen Werte.

Habe ich da einen Denkfehler?
Bitte warten ..
Mitglied: SlainteMhath
10.06.2013 um 15:45 Uhr
01.
Test1 = join(ArrayRueckgabeWerte(Var1,Var2,Var3, Var4)
geht nicht, Richtig ist:
01.
  ArrayRueckgabeWerte(0)=var1; 
02.
  ArrayRueckgabeWerte(1)=var2; 
03.
.... 
04.
  Test1 = ArrayRueckgabeWerte; 
05.
end function;
Aufruf:
01.
DIM ArrayWerte(4) 
02.
ArrayWerte = Test1
Bitte warten ..
Mitglied: thl1966
10.06.2013 um 15:55 Uhr
Bekomme leider außerhalb der Funktion einen Typenkonflikt-Fehler Code: 800A000D

Hier der Code:

Funktion .....
Code...
Code..
DIM ArrayRueckgabeStandortdaten (4)

ArrayRueckgabeStandortdaten(0) = strStandortStadt
ArrayRueckgabeStandortdaten(1) = strStandortStadtName
ArrayRueckgabeStandortdaten(2) = strStandortLand
ArrayRueckgabeStandortdaten(3) = strStandortLandName

Netzwerk_Standort_ermitteln = ArrayRueckgabeStandortdaten

End Function

Außerhalb der Funktion:

Dim ArrayWerte(4)
ArrayWerte = Netzwerk_Standort_ermitteln ' hier kommt der Fehler!
Bitte warten ..
Mitglied: bastla
10.06.2013, aktualisiert um 16:05 Uhr
Hallo thl1966 und SlainteMhath!

Nur als Anmerkung: Natürlich ist die Verwendung einer Function die elegantere und programmiertechnisch zu bevorzugende Variante - einfacher ginge es aber mit einem Sub: Da in VBS ja alle Variablen global sind, genügt es, die benötigten Variablen vor dem Aufruf des Sub zu deklarieren / initialisieren, und sie dann im Sub mit den Werten zu befüllen ...

Grüße
bastla

P.S.: @ thl1966: Magst Du nicht auch Deine Codeschnipsel passend formatieren (und am besten auch noch hier)?
Bitte warten ..
Mitglied: thl1966
10.06.2013 um 16:12 Uhr
Hallo Bastla,

vielen Dank für die Info.
Das hilft mir sehr.

PS: Mein Codeschnipsel ist ca. 500 Zeilen groß.
Mit ging es eigentlich nur um die Rückgabewerte.

Es sind zu vielen Firmenspezifische Dinge im Code, dass ich das nicht komplett posten kann.

Mich würde aber trotzdem interessieren, warum ich einen Typfehler bekomme?

Hast du das vielleicht eine Idee?

Gruß
Thomas
Bitte warten ..
Mitglied: thl1966
10.06.2013 um 16:19 Uhr
Habs endlich hinbekommen, dank dem Hinweis von Bastla,

Hier der Code:

Function .....

' 4 Variablen als Array zurückgeben!

DIM ArrayRueckgabeStandortdaten (4)

ArrayRueckgabeStandortdaten(0) = strStandortLand
ArrayRueckgabeStandortdaten(1) = strStandortLandName
ArrayRueckgabeStandortdaten(2) = strStandortStadt
ArrayRueckgabeStandortdaten(3) = strStandortStadtName

Netzwerk_Standort_ermitteln = ArrayRueckgabeStandortdaten

End Function

'Dim ArrayWerte(4)

strStandortLand =Netzwerk_Standort_ermitteln

msgbox strStandortLand(0)
msgbox strStandortLand(1)
msgbox strStandortLand(2)
msgbox strStandortLand(3)


Jetzt werden die Werte einzeln außerhalb der Funktion ausgegeben.

Nochmals vielen Dank an alle.

Gruß
Thomas
Bitte warten ..
Mitglied: bastla
10.06.2013, aktualisiert 11.06.2013
Hallo thl1966!

Das Array ist unnötig - Du kannst unmittelbar auf "strStandortLand" etc zugreifen, wenn es die Variable(n) vor dem Aufruf der Function / des Sub im Hauptprogramm bereits gibt ...

Grüße
bastla

P.S.: Ich hoffe, die Tatsache, dass Dein geposteter Code noch immer keine passende Formatierung aufweist, liegt nicht an daran, dass Dich das Verwenden von <code>- / </code>-Tags überfordert ...
Bitte warten ..
Mitglied: 76109
10.06.2013, aktualisiert um 17:28 Uhr
Hallo zusammen!

Der Vollständigkeit halber noch die Luxusvariante
01.
Class StandortDaten 
02.
    Public Land 
03.
    Public LandName 
04.
    Public Stadt 
05.
    Public StadtName 
06.
End Class 
07.
 
08.
Call Test 
09.
 
10.
Sub Test() 
11.
    With GetStandortDaten() 
12.
        MsgBox .Land 
13.
        MsgBox .LandName 
14.
        MsgBox .Stadt 
15.
        MsgBox .StadtName 
16.
    End With 
17.
End Sub 
18.
 
19.
Function GetStandortDaten() 
20.
    Set GetStandortDaten = New StandortDaten 
21.
     
22.
    With GetStandortDaten 
23.
        .Land = "Ein Land" 
24.
        .LandName = "Ein LandName" 
25.
        .Stadt = "Eine Stadt" 
26.
        .StadtName = "Ein StadtName" 
27.
    End With 
28.
End Function
Gruß Dieter
Bitte warten ..
Mitglied: Friemler
10.06.2013 um 21:55 Uhr
...und damit wir wirklich komplett sind: Es gibt auch noch die Möglichkeit, die Parameter einer Function/Sub als ByRef zu deklarieren:

01.
Sub Test(ByRef strStandortStadt, ByRef strStandortStadtName, ByRef strStandortLand, ByRef strStandortLandName) 
02.
  strStandortStadt = "ABC" 
03.
  strStandortStadtName = "DEFG" 
04.
  strStandortLand = "USA" 
05.
  strStandortLandName = "ASU" 
06.
End Sub
Stichwort: Call by Reference

Gruß
Friemler
Bitte warten ..
Mitglied: bastla
10.06.2013, aktualisiert um 22:22 Uhr
... und als Beispiel für die Verwendung:
01.
Test Stadt, StadtName, Land, LandName 
02.
WScript.Echo StadtName & " in " & Land
Grüße
bastla
Bitte warten ..
Mitglied: Biber
10.06.2013, aktualisiert um 22:35 Uhr
.... und damit wir ganz, ganz, ganz komplett sind (um @Friemlers Schlusswort noch zu toppen)...

Wenn du eine Function brauchst mit mehreren Rückgabewerten, dann überprüfe deinen Programmfluss und deine unterstellte Programmlogik.
Da muss ein (Denk-)fehler enthalten sein.

Wenn vermeintlich die Notwendigkeit für "mehrere Rückgabewerte" gegeben zu sein scheint, dann ist es (wenn die jeweilige Programmiersprache es zulässt) über "globale Variablen" lösbar - wa im Falle VBS ja keinen Rückschritt bedeutet (siehe bastlas Kommentar oben).

Friemlers Hinweis auf "ByRef"-Parameter-Übergabe ist auch okay, aber grundsätzlich führt diese Programmierung sehr schnell dazu, dass ganz schnell aus den oben beschriebenen 4 "Rückgabewerten" dann 4 plus ein Returnwert für "erfolgreich/Fehler" plus einen für den Fehlertext und einer für den Schweregrad des Errors...usw werden.

Versuche, dich auf einen Rückgabewert einer Funktion zu beschränken.

Grüße
Biber
Bitte warten ..
Mitglied: Friemler
10.06.2013 um 23:08 Uhr
Zitat von Biber:
...dass ganz schnell aus den oben beschriebenen 4 "Rückgabewerten" dann 4 plus ein Returnwert für
"erfolgreich/Fehler" plus einen für den Fehlertext und einer für den Schweregrad des Errors...usw werden.

Falls aber der erste Parameter NULL ist, wird der zweite Parameter als Pointer auf eine SubSite-Structure interpretiert, über die...

Woher kenne ich das bloß?

Gruß
Friemler
Bitte warten ..
Mitglied: thl1966
11.06.2013 um 06:45 Uhr
Danke euch alle für die wertvollen Tipps.

beschäftige mich erst seit ca. 5 Woche mit VBA. Komme sonst aus der Powershell-Ecke.

Das mit der Codeformatierung habe ich nicht gewusst. Werde es in Zukunft beachten.

Gruß

Thomas
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Datenbanken
gelöst SQL - mehrere UPDATE-Anweisungen in einem String per vbs (4)

Frage von goodbytes zum Thema Datenbanken ...

Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

LAN, WAN, Wireless
Hat On Networks PL500PS WLAN-Funktion? (4)

Frage von Andy1987 zum Thema LAN, WAN, Wireless ...

VB for Applications
VBS Script zum versenden mehrerer Verknüpfungen zu Dateien per Lotus Notes

Frage von Sentinel87 zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...