• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] VBA zu JavaScript Sub-Funktion

Killua291

New member
Hallo liebe Gemeinde.

Ich hoffe den richtigen Bereich für meine Frage gefunden zu haben.

Ich bin neu im Forum und im Programmieren.
Momentan studiere ich als Fernstudium Medieninformatik. In diesem lerne ich zur Zeit Java.

Auf meiner Arbeit habe ich die Möglichkeit weitere Kenntnisse zu sammeln.
Wir haben einige VBScrips die nun mit Windows 10 zu JavaScript umgestellt werden sollen.

Meine erste Übung von einem Betriebsleiter aus meiner Abteilung ist zwei kleine Scrips umzustellen zu js. Er besitz einen Doktortitel in der Informatik, hilft mir daher beim Studium, und hat aber noch nicht mit Javascript gearbeitet. Deswegen ist dies meine Aufgabe zum üben und lernen.

Nun die eigentliche Frage.

In VBScript deklariert man ja die Variablen mit "Dim".

Bsp.:

Code:
Dim gVMU
Dim gVisApp
Dim gDocs
Dim gPrintManager
Dim gOrientation
Dim gScaleSetting

In JavaScript deklariert man diese mit den Informationen ja mit "var"

HTML:
var gVMU
var gVisApp
var gDocs
var gPrintManager
var gOrientation
var gScaleSetting

Soweit versteh ich alles.

In VbScript gibt es die Möglichkeit eine Sub-Prozedur zu nutzen.

Ich habe folgende:

Code:
Sub attachApplication()
Set gDocs = Nothing
Set gProperties = Nothing
Set gVMU = CreateObject("VFFrame.Application")
Set gVisApp = gVMU.VisAppAutomation
Set gPrintManager = gVisApp.PrintManager
Set gDocs = gVisApp.Documents
gOrientation = 0
gScaleSetting = 0
setInitialUI()
End Sub

Sub detachApplication()
Set gDocs = Nothing
Set gProperties = Nothing
Set gPrintManager = Nothing
Set gVMU = Nothing
Set gVisApp = Nothing
End Sub

...

Wie kann ich dies mit JavaScript realiseieren.
Von diesen Prozeduren habe ich mehrere untereinander aufbauend.
Wie kann ich nun den Variablen unterschiedliche Werte zuweisen bei aufrufen von der Prozedurvariablen?

Werde daraus nicht ganz logisch schlau.
Ist dies mit "var" und "width" zu realiesieren.

Über ein Besipiel der beiden Prozeduren mit einer kurzen Erklärung wäre ich sehr dankbar.

Gruß

Alex ;)
 
Zuletzt bearbeitet von einem Moderator:
Super das hat mir doch schon um einiges weitergeholfen. Ich habe solch eine Seite leider nicht gefunden gehabt.

Nun hab ich mich daran gemacht.

VBScript:

Code:
Sub attachApplication()
Set gDocs = Nothing
Set gProperties = Nothing
Set gVMU = CreateObject("VFFrame.Application")
Set gVisApp = gVMU.VisAppAutomation
Set gPrintManager = gVisApp.PrintManager
Set gDocs = gVisApp.Documents
gOrientation = 0
gScaleSetting = 0
setInitialUI()
End Sub

JavaScript:

HTML:
function attachApplication() {
?? gDocs = Nothing
?? gProperties = Nothing
?? gVMU = CreateObject ("VFFrame.Application")
?? gVisApp = gVMU.VisAppAutomation
?? gPrintManager = gVisApp.PrintManager
gDocs = gVisApp.Documents
gOrientation = 0
gScaleSetting = 0
setInitialUI()
}

Bei den Fragezeichen bin ich mir noch unschlüssig. Also ich beschreibe mit "function" ein Prozedur die in Kraft treten soll, wenn die Bezeichnung aufgerufen wird. "gOrientation = 0" deklariere ich nicht als variable da sie am Beginn ja schon deklariert wurden. Die Funktionsweise ist doch meines Erachtens die selbe wie in VBScript. dort wurde sich ja in der Prozedur auch nicht nochmal eindeutig deklariert. Oder irre ich mich da. Der Aufbau des Programms bleibt ja gleich.

Wie gehe ich jetzt mit "Set" in VBScript vor? "Set" kann ja nur zum zuweisen von Objekten zu Variablen verwendet werden. In JavaScript habe ich bisher keine Funktion gefunden die dies übernimmt.

Ich hoffe meine Fragen sind nicht ganz dumme. Ich versuche das ganze noch zu verstehen.

Danke schonmal für weiter Hilfe :)
 
Zuletzt bearbeitet von einem Moderator:
Das Problem, das ich an dem Programm sehe, ist das die Verwendung der Funktionen so wie du sie in VBScript nutzt, keinen programmablauftechnischen Sinn ergibt.

Beispiel
Code:
Set gVisApp = gVMU.VisAppAutomation
Da wird eine Variable in eine andere kopiert, wozu?

- - - Aktualisiert - - -

PS: Nothing heißt in JS null.

ich bin für undefined.
 
Danke für die antworten.

Für mich ergibt es leider auch nicht viel sinn, da es nicht läuft. Wenn ich es im Browser aufrufe, da es ein .html ist, habe ich keine Funktion an den Buttons.
Daher kann ich leider auch nicht wirklich die Funktion in js testen.
Ich hoffe das ihm das abändern so genügt. Dies ist übrigens ein Sample von Siemens.

Die Aufgabe des Scripts bezieht sich meiner Meinung ja nur um Prozedur Beschreibung. Es findet ja kein Aufruf davon statt :/

Die eigentlichen Aufgaben werden sich anfangs auf VBScripts beziehen die von unserer Abteilung geschrieben wurden, und auch funktionieren. Später geht es weiter in Datenbanken.

Ich häng mal das Original-Script an und mein abgeändertes. Leider kann ich vom Arbeits-pc nichts uploaden.


Original:

HTML:
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
		<meta name="GENERATOR" content="Microsoft FrontPage 6.0">
		<meta name="ProgId" content="FrontPage.Editor.Document">
		<title>Printing Example #2</title>
	</head>
	<body>
		<script language="vbscript">
	Dim gVMU
	Dim gVisApp
	Dim gDocs
	Dim gPrintManager
	Dim gOrientation
	Dim gScaleSetting

	Sub attachApplication()
		Set gDocs = Nothing
		Set gProperties = Nothing
		Set gVMU = CreateObject("VFFrame.Application")
		Set gVisApp = gVMU.VisAppAutomation
		Set gPrintManager = gVisApp.PrintManager
		Set gDocs = gVisApp.Documents
		gOrientation = 0
		gScaleSetting = 0
		setInitialUI()
	End Sub
	
	Sub detachApplication()
		Set gDocs = Nothing
		Set gProperties = Nothing
		Set gPrintManager = Nothing
		Set gVMU = Nothing
		Set gVisApp = Nothing
	End Sub
	
	Sub setInitialUI()
		Dim pPrintProp
		Set pPrintProp = gPrintManager.Properties
		
		document.PrintForm.EnableHeaders.checked = pPrintProp.HeaderEnabled
		document.PrintForm.EnableFooters.checked = pPrintProp.FooterEnabled
		document.PrintForm.LeftHeader.value = pPrintProp.LeftHeader
		document.PrintForm.CenterHeader.value = pPrintProp.CenterHeader
		document.PrintForm.RightHeader.value = pPrintProp.RightHeader
		document.PrintForm.LeftFooter.value = pPrintProp.LeftFooter
		document.PrintForm.RightFooter.value = pPrintProp.RightFooter
	End Sub
	
	Sub openDocument()
      Dim Input
      Input = InputBox("Enter filename", "File Open") 
      If Input <> "" Then
         gDocs.OpenDocument(Input)        
      End If
	End Sub
	
	Sub updateProperties()
		Dim pPrintProp
		Dim pActiveView

		Set pPrintProp = gPrintManager.Properties
		Set pActiveView = gVisApp.ActiveView
		gPrintManager.AddView(pActiveView.ViewHandle)

		pPrintProp.PaperOrientation = gOrientation
		pPrintProp.ScaleSetting = gScaleSetting
		
		if document.PrintForm.ScaleFactor.value <> "" Then
			pPrintProp.ScaleFactor = document.PrintForm.ScaleFactor.value
		End If
		
	End Sub
	
	Sub printToDefault()
		updateProperties()
		gPrintManager.Print()
	End Sub
	
	Sub previewImage()
		updateProperties()
		gPrintManager.PrintPreview()
	End Sub
	
		</script>
		<form name="PrintForm">
        <table border="0" width="100%">
          <tr>
            <td width="50%">
              <h4>Application Startup / Shutdown</h4>
            </td>
            <td width="50%">
              <h4>Print Orientation</h4>
            </td>
          </tr>
          <tr>
            <td width="50%"><input type="button" value="Attach" name="Attach" onClick="attachApplication()"> 
              <input type="button" value="Detach" name="Detach" onClick="detachApplication()"> 
			<input type="button" value="Open Document..." name="Open" onclick="openDocument()"></td>
            <td width="50%"><input type="radio" value="0" checked name="R1" onclick="gOrientation = me.value">Portrait<br>
              <input type="radio" name="R1" value="1" onclick="gOrientation = me.value">Landscape<br>
              <input type="radio" name="R1" value="2" onclick="gOrientation = me.value">Best Fit</td>
          </tr>
          <tr>
            <td width="50%">
              <h4>Printing</h4>
            </td>
            <td width="50%">
              <h4>Print Scale</h4>
            </td>
          </tr>
          <tr>
            <td width="50%"><input type="button" value="Print" name="Print" onClick="printToDefault()"> 
              <input type="button" value="Print Preview..." name="PrintPreview" onclick="previewImage()"></td>
            <td width="50%"><input type="radio" name="R2" value="0" checked onclick="gScaleSetting = me.value">Fit
              To Page<br>
              <input type="radio" name="R2" value="1" onclick="gScaleSetting = me.value">1:1<br>
              <input type="radio" name="R2" value="2" onclick="gScaleSetting = me.value">Variable Scaling: <input type="text" name="ScaleFactor" size="5"></td>
          </tr>
        </table>
        </form>
	</body>
</html>

Abgeändert:

HTML:
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
		<meta name="GENERATOR" content="Microsoft FrontPage 6.0">
		<meta name="ProgId" content="FrontPage.Editor.Document">
		<title>Printing Example #2</title>
	</head>
	<body>
		<script language="javascript">
	
var gVMU;							//Deklariert eine Variable
var gVisApp;						//----"----
var gDocs;							//Deklariert eine Variable
var gPrintManager;					//----"----
var gOrientation;					//Deklariert eine Variable
var gScaleSetting;					//----"----
	
	
function attachApplication() {		 //Funktiondekleration	
	gDocs = undefined;				//oder 0				
	gProperties = undefined;			//oder 0				
	gVMU = CreateObject ("VFFrame.Application");	
	gVisApp = gVMU.VisAppAutomation;				
	gPrintManager = gVisApp.PrintManager;			
	gDocs = gVisApp.Documents;						
	gOrientation = 0;
	gScaleSetting = 0;
	setInitialUI()	
}

function detachApplication() {	
	gDocs = undefined;				//oder 0			
	gProperties = undefined;			//oder 0				
	gPrintManager = undefined;		//oder 0				
	gVMU = undefined;				//oder 0					
	gVisApp = undefined;				//oder 0					
}

function setInitialUI() {	
	var pPrintProp;					//Deklariert eine Variable
		pPrintProp = gPrintManager.Properties;
		
	document.PrintForm.EnableHeaders.checked = pPrintProp.HeaderEnabled;
	document.PrintForm.EnableFooters.checked = pPrintProp.FooterEnabled;
	document.PrintForm.LeftHeader.value = pPrintProp.LeftHeader;
	document.PrintForm.CenterHeader.value = pPrintProp.CenterHeader;
	document.PrintForm.RightHeader.value = pPrintProp.RightHeader;
	document.PrintForm.LeftFooter.value = pPrintProp.LeftFooter;
	document.PrintForm.RightFooter.value = pPrintProp.RightFooter;	
}

function openDocument() {
	var Input;						//Deklariert eine Variable
	Input = InputBox("Enter filename", "File Open")
	if Input == "" Then;
		gDocs.OpenDocument (Input)
}

function updateProperties() {	
	var pPrintProp;					//Deklariert eine Variable
	var pActiveView;				//----"----
	
	pPrintProp = gprintManager.properties	;		
	pActiveView = gVisApp.ActiveView;				
	gPrintManager.AddView(pActiveView.ViewHandle);
	
	pPrintProp.PaperOrientation = gOrientation;
	pPrintProp.ScaleSetting = gScaleSetting;
	
	if document.PrintForm.ScaleFactor.value == "" Then;
		pPrintProp.ScaleFactor = document.PrintForm.ScaleFactor.value;
}

function printToDefault(){	
	updateProperties();
	gPrintManager.Print();
}

function previewImage(){	
	updateProperties();
	gPrintManager.PrintPreview();
}
		</script>
		<form name="PrintForm">
        <table border="0" width="100%">
          <tr>
            <td width="50%">
              <h4>Application Startup / Shutdown</h4>
            </td>
            <td width="50%">
              <h4>Print Orientation</h4>
            </td>
          </tr>
          <tr>
            <td width="50%"><input type="button" value="Attach" name="Attach" onClick="attachApplication()"> 
              <input type="button" value="Detach" name="Detach" onClick="detachApplication()"> 
			<input type="button" value="Open Document..." name="Open" onclick="openDocument()"></td>
            <td width="50%"><input type="radio" value="0" checked name="R1" onclick="gOrientation = me.value">Portrait<br>
              <input type="radio" name="R1" value="1" onclick="gOrientation = me.value">Landscape<br>
              <input type="radio" name="R1" value="2" onclick="gOrientation = me.value">Best Fit</td>
          </tr>
          <tr>
            <td width="50%">
              <h4>Printing</h4>
            </td>
            <td width="50%">
              <h4>Print Scale</h4>
            </td>
          </tr>
          <tr>
            <td width="50%"><input type="button" value="Print" name="Print" onClick="printToDefault()"> 
              <input type="button" value="Print Preview..." name="PrintPreview" onclick="previewImage()"></td>
            <td width="50%"><input type="radio" name="R2" value="0" checked onclick="gScaleSetting = me.value">Fit
              To Page<br>
              <input type="radio" name="R2" value="1" onclick="gScaleSetting = me.value">1:1<br>
              <input type="radio" name="R2" value="2" onclick="gScaleSetting = me.value">Variable Scaling: <input type="text" name="ScaleFactor" size="5"></td>
          </tr>
        </table>
        </form>
	</body>
</html>

Vielleicht kann ja einer nochmal kurz drüber schauen. Ich habe als zweite Arbeit ein kleines Javascript als Dame Spiel geschrieben nach einer Internetanleitung. ich denke das wird ihn eher zufrieden stellen, und ich kann mit den eigentlichen Arbeiten beginnen.

Danke nochmal für die bisherigen Hilfen.

- - - Aktualisiert - - -

Ich muss mich verbessern. Das Dame Spiel war nicht in Javascript sondern Java. Da hab ich mich verschrieben.
 
Zuletzt bearbeitet von einem Moderator:
Du solltest auf jeden Fall etwas in der Fehlerkonsole sehen. Ich sehe auch nicht, wie das mit JS funktionieren soll... wenn das VBScript jemals so im Browser (=IE?)funktioniert hat, dann hat VBScript auf APIs Zugriff, die per JS nicht verfügbar sind.
Warum sollst du das Ganze überhaupt machen?
 
läuft/lief das ganze denn überhaupt im browser oder in einer eigenen anwendung die html anzeigen kann?

Set gVMU = CreateObject("VFFrame.Application") ist in js var gVMU = new ActiveXObject("VFFrame.Application");
natürlich nur in browsern die das unterstützen, also nur ie
 
Zurück
Oben