Seite 1 von 1

Datenübergabe an und -empfang von VBS Datei

Verfasst: 12.01.2015 15:41
von Pelagio
Hallo Leute,

lang ist es her aber Fragen holen einen immer wieder ein.
Meine Problem ist, das ich von einer Exceldatei den Namen der ersten Tabelle brauche.
Ich möchte gleich dazu sagen, ich wollte keine zusätzliche pbi-Datei includen.
Um dies mit eigenen Mitteln zu bewerkstellingen habe ich mir ein VBScript geschrieben
'*****************
' DEKLARATIONEN
'*****************
DIM WSHShell

'*****************
' MAIN
'*****************
SET WSHShell = WScript.CreateObject("WScript.Shell")
CALL MAIN(WScript.Arguments(0))
WSCRIPT.QUIT

'*****************
' PROZEDUREN
'*****************
SUB MAIN(vFile)
DIM pXL, pWB, pSheet

SET pXL = CreateObject("Excel.Application")
SET pWB = pXL.Workbooks.Open(vFile)
pSheet = pWB.Worksheets(1 ).Name
pWB.Close(False)
SET pWB = Nothing
pXL.Quit()
Set pXL = Nothing
WSHShell.PopUp pSheet, , "InfoBox", vbExclamation
END SUB
und kann dieser auch über PB eine Exceldatei übergeben

Code: Alles auswählen

Global DBFile.s = GetPathPart(ProgramFilename()) + "Test Manor.xlsx"

Debug RunProgram("Material_Zugang.vbs", Chr(34) + DBFile + Chr(34), GetPathPart(ProgramFilename()))
Was mir jetzt noch fehlt, und leider habe ich dies auch über das Internet nicht rausbekommen (wahrscheinlich die falschen Fragen gestellt).
Wie kann ich den Tabellennamen, statt in einem Fenster anzuzeigen, dem PB-Programm übergeben?

Re: Datenübergabe an und -empfang von VBS Datei

Verfasst: 12.01.2015 16:33
von Kiffi
Du schreibst in Deinem VBS einfach in stdout:

Code: Alles auswählen

wscript.stdout.writeline "Hallo!"
und liest stdout mit ReadProgramString() aus:

Code: Alles auswählen

VBS = RunProgram("wscript", "dein.vbs", "", #PB_Program_Open | #PB_Program_Read)

If VBS
	Debug ReadProgramString(VBS)
	CloseProgram(VBS)
Else
	Debug "!RunProgram"
EndIf
Grüße ... Peter

Re: Datenübergabe an und -empfang von VBS Datei

Verfasst: 13.01.2015 10:43
von Pelagio
Danke Kiffi für die Antwort,

leider funktioniert es nicht so wie es sollte.

Code: Alles auswählen

DIM WSHShell
DIM gSheet
SET WSHShell = WScript.CreateObject("WScript.Shell")
gSheet = WScript.Arguments(0)
wscript.echo gSheet
WScript.StdOut.Writeline "Hallo!"
WScript.QUIT
ergibt den Fehler: Das handle ist ungültig!
Insofern ist es mir leider nicht möglich die Daten mit PB

Code: Alles auswählen

Global DBFile.s = GetPathPart(ProgramFilename()) + "20140915 input Dun Arklow Manor.xlsx"
Global VBS.i
VBS = RunProgram("Material_Zugang.vbs", Chr(34) + DBFile + Chr(34), GetPathPart(ProgramFilename()), #PB_Program_Open|#PB_Program_Wait)
If VBS
   Debug "= " + ReadProgramString(VBS)
   CloseProgram(VBS)
EndIf
zu empfangen. Die Datenübergabe funktioniert einwandfrei.
Auf VBS bekommt einen Wert zurück, so dass '=' im Debugfenster angezeigt wird.

Re: Datenübergabe an und -empfang von VBS Datei

Verfasst: 13.01.2015 11:09
von Kiffi
Du musst WScript mit RunProgram() starten; nicht Dein VBS (siehe mein Codeschnippsel).

Grüße ... Peter

Re: Datenübergabe an und -empfang von VBS Datei

Verfasst: 13.01.2015 11:23
von Pelagio
DANKE! Kiffi
:bounce:

das mit dem WScript Programm hatte ich nicht sogleich verstanden (schwer von Begriff),
jedenfalls funktioniert es jetzt.
:allright:

Re: Datenübergabe an und -empfang von VBS Datei

Verfasst: 13.01.2015 17:26
von Josh
Ist das Programm nur für dich gedacht oder willst du es weiter geben? In zweiteren Fall könnte es Probleme geben, da, soweit ich weiß, die Scripts vom Systemadministrator deaktiviert werden können.

Re: Datenübergabe an und -empfang von VBS Datei

Verfasst: 13.01.2015 22:09
von Pelagio
Danke Josh,

für die Information, aber das Programm welches auf den Script zugreifen soll ist nur für meine Arbeitsumgebung und natürlich damit auch für mich zum Üben.
Immer mal was Neues ausprobieren, was ein in den Sinn kommt. Wer weiß wozu dies noch Gut ist.
Sollte ich es doch einmal in einem Programm weitergeben, wo die Scripts deaktiviert sind, werde ich mir was Neues einfallen lassen und wenn es nicht anderes geht mit etwas aus dem Pool zum Bsp. ExDatabase.
Auch wenn ich ungern etwas Vollwertiges übernehme, so will ich mich doch hier einmal bei allen Progern für Ihre, zur freien Verfügung stehenden, Arbeiten bedanken.
:praise: