Sie sind auf Seite 1von 8

Scripts in Lotus 1-2-3

Einleitung

Scripterstellung

Dialogeditor

Script-Befehle

Verschiedene Vorgangsweisen

Komplexes Beispiel

Quellen
Eigner Franz Spezialgebiet: Scripts in Lotus 23.04.2002

Einleitung:
LotusScript ist eine strukturierte Programmiersprache mit der man Aufgaben in 1-2-3 automatisieren kann. Scripts
sind kurze, objekt-orientierte Programme, die in der Kalkulations-Umgebung von Lotus 1-2-3 laufen. Sie sind erst
ab der 97er Version in Lotus 1-2-3 verfügbar.
Da LotusScript dieselbe Entwicklungsumgebung wie andere SmartSuite Anwendungen und Lotus Notes verwendet,
kann man Scripts in 1-2-3 und produktübergreifend in anderen Anwendungen wie Freelance Graphics, Word Pro
und Lotus Notes erstellen, austesten und ausführen. Weiters ist Lotus Script mit Visual Basic kompatibel, und
daher auch relativ einfach zu erlernen.

Scripterstellung:
• Scripterstellung durch Aufzeichnen Abb. 1
Wie bei einem Makro wird hier jeder Tastendruck und jede Aktion mitgeschrieben. (Auf diese Art und Weise
erhält man auch Aufschluß darüber, wie die einzelnen Programmierbefehle lauten, wenn man sich nicht der
Mühe unterziehen will, die Hilfe zu durchsuchen). Nach dem Start muß man einen Namen für das Script
eingeben und das Verzeichnis, in dem das Script gespeichert werden soll. Weiters werden 2 kleine Icons
eingeblendet (=> Abb.1), mit denen man die Aufzeichnung jederzeit pausieren und stoppen kann. Das Script
wird dann als globales Script unter dem angegebenen Namen abgelegt.
• Scripterstellung im Scripteditor
Mit dem Scripteditor (=> Abb.3) lassen sich Scripts direkt schreiben – vorausgesetzt man kennt die diversen
Programierbefehle.
Der Scripteditor („Bearbeiten/LotusScript Makros/ScriptEditor anzeigen“) gliedert sich in mehrere Bereiche.

Bindung von Scripts an Objekte:

Scripts können
a) an das Programm Lotus 123 selbst gebunden und auf bestimmte Aktionen hin gestartet werden
b) an ein bestimmtes Arbeitsblatt gebunden werden. Solche Scripts können dann mit Öffnen des Files
gestartet werden,
z.B.: Sub Opened(Source As Document)
Dialog1.show
End sub

c) an ein bestimmtes Arbeitsblatt als globale Scripts gebunden werden (z.B. Zins.123).
z.B.: Sub Eingabe
Dialog1.show
End Sub

Derartige globale Scripts können dann über (“Bearbeiten/LotusScript


Makros/Ausführen Alt+F3”) gestartet werden oder überhaupt ins Menü integriert
werden und zusätzlich über eine Tastenkombination abrufbar sein. (es gibt dann
den Menüpunkt „Aktionen“). Dazu ist es erforderlich entsprechende Optionen für
globale Scripts zu setzen. Diese sind erreichbar unter „Bearbeiten/LotusScript
Makros/Optionen für globale Scripts“. =>Abb. 2
Beachte: Im Unterschied zu anderen Scripts wird bei globalen Scripts der Name
des Scripts (hier: „Eingabe) durch den Programmierer angegeben Abb. 2

d) an eine bestimmte Zelle bzw. an einen bestimmten Bereich gebunden werden


e) über einen Button gestartet werden

Dialogerstellung
Ähnlich wie in Delphi kann in Lotus „visuell“ programmiert werden. Dabei steht als Grundobjekt eine
Dialogkomponente zur Verfügung in die dann weitere Komponenten eingebettet werden. Alle diese Komponenten
haben diverse Eigenschaften und es können für sie Scripts erstellt werden, die diese Komponenten ausführen,
wenn sie auf ein bestimmtes Ereignis reagieren.

Seite 2
Eigner Franz Spezialgebiet: Scripts in Lotus 23.04.2002

Werkzeugleiste: (Toolbox)

Pointer ........................................ Frame


Label ........................................... Textbox
CommandButton .............…….... Image
Checkbox .................................... OptionButton
ListBox ............………………...... Combobox
Spinbutton ....…................…....... Progressbar
Slider ...........................
Abb. 3
Bei allen Dialogelementen kommt man über die rechte Maustaste zu den Properties
(=>Abb. 5) Dazu gehören Name, Caption, Größe, Schrift, usw. Mit einem Doppelklick auf die Komponente gelangt
man in den Scripteditor, um zum Standardereignis das entsprechende Script zu schreiben.

Wichtige Eigenschaften (Properties) von Dialogelementen


• caption: Inhalt
• name: Name
• visible: Sichtbarkeit
• enabled: zeigt an, ob ein Objekt ansprechbar ist (true/false)

Wichtige Methoden:
• SetFocus: Fenster wird aktiviert

Wichtige Ereignisse (Events):


• Change: löst bei jeder Veränderung Ereignis aus(z.B. beim Slider, Combobox)
• Click: bei Mausklick
• DblClick: bei Doppelklick
• Gotfocus: wenn ein Fenster aktiviert wird
• Keypress: bei Tastendruck
• Initialize: bei Erstellung (Dialog) oder beim Laden (Objekt)

Spezielle Dialogelemente
Dialog: Methoden show: öffnet den Dialog
Methode close: schließt den Dialog
Ereignis load: Ladet (öffnet) den Dialog
Label: Eigenschaft caption: Inhalt des Labels ist vom Typ string
Textbox: Eigenschaft text: Inhalt der Textbox, ist vom Typ string
OptionButton/ Eigenschaft value: gibt an, ob Element ausgewählt ist oder nicht
Checkbox: 0 oder false: nicht ausgewählt
Listbox/ 1 oder true: ausgewählt
Combobox: 2 oder greyed: keine Auswahl möglich
Bei properties können im rechten Ordner die einzelnen Elemente eingegeben werden (zur
Entwurfszeit).
Eigenschaft list: enthält die einzelnen Elemente,
(dialog1.combo1.list(1) liefert das 2. Element)
Methode additem: fügt ein Element hinzu, Standardereignis: Pick!!
Slider: Eingeschaft value: liefert die Position des Schiebereglers als integer

Beispiel: Eingabedialog
Zuerst werden die Dialogkomponente (Dialog 1), die
Labelkomponenten (Label1-3), die Textboxkomponenten (Text1-3) und die Command-Button-Komponenten
(Command1-2) erstellt. (Properties (=>Abb. 4) werden über rechte Maustaste aufgerufen)

Seite 3
Eigner Franz Spezialgebiet: Scripts in Lotus 23.04.2002

Anschließend werden die entsprechenden Scripts geschrieben Der Script-Editor kann über die rechte Maustaste
(View Scripts), durch den Menüpunkt „View/Show Scripts“ oder durch Doppelklick auf eine Komponente gestartet
werden.
Das Script für den OK-Button könnte dann z.B. so wie in der
Abb. 6 aussehen.
Alle Inhalte, die an Zellen zugewiesen werden, sollten vorher
in einen String konvertiert werden (mit dem Befehl Cstr() ). Da
aber Caption ohnehin einen Text beinhaltet, kann diese
Konvertierung hier auch entfallen. Zellinhalte werden mit
[Zelle].Contents oder [Zellname].Contents angesprochen. Um
mit dem Button „Cancel“ den Dialog abzubrechen eignet sich
folgendes Script:

Sub Click (Source Asotuscommandbutton)


Source.Parent.Close (oder dialog1.close)
End Sub
Abb. 4
Beispiel: Checkbox, Slider und Combobox (=> Abb.5)

Sub Click(Source As Lotusoptionbutton)


[B3].contents = "100000"
End Sub (bzw. 250000 und 750000)

Sub Click(Source As Lotusslider)


[B4].contents = Cstr(Dialog2.slider1.value)
End Sub

Sub Pick(Source As Lotuscombobox, Index As Integer)


[B5].contents = Cstr(Dialog2.combo1.text)
End Sub
Abb. 5
Initialisierungsscript:
Sub Load(Source As Lotusdialog)
Dialog2.Slider1.value = Cint([B4].contents)
Dialog2.combo1.caption = Cstr([B5].contents)
End Sub

Scripteditor: Objekt, das an das


Script gebunden ist
Name bzw. Aktion, auf die
hin das Script gestartet wird
(Integrated Development Environment)

Script Editor Window


Ein Fenster, in dem Sie Scripts schreiben und
bearbeiten, die Syntax von Scripts überprüfen und
Breakpoints (Unterbrechungspunkte) für das Austesten
von Scripts setzen können. Im Script-Editor wird
anfänglich ein mit dem ausgewählten Objekt verknüpftes
Script angezeigt.

Editierfeld
Fehler im Script werden hier angezeigt

Script Utilities Window

Besteht aus 4 Registerkarten


Browser:
Gibt Hinweise auf die Scriptsprache. Listet
Variablen, Listen, Prozeduren, Konstanten (z.B.TRUE and
FALSE=-1 bzw. 0) und Classes auf, die dann in das
Editierfeld eingefügt werden können.
Breakpoints:
Listet Breakpoints im Script auf
Output:
Print-Commands(Befehle) werden hier ausgegeben
Variables:
zeigt beim Debugging (austesten) des Scriptes die Abb. 6
Variablen an. Deren Werte können dann verändert werden Seite 4
Eigner Franz Spezialgebiet: Scripts in Lotus 23.04.2002

Die wichtigsten Scriptbefehle und Vorgangsweisen:


Programmierbefehle:
Grundsätzliche Variablenoperationen
Dim Name as Typ Dient der Definition einer Variable
Bsp.: Dim zahl as integer
Set Dient der Belegung einer Variable
Bsp.: set wort = cstr(12)

Variable mit Zelle innerhalb eines Ranges belegen:


Dim zelle as variant
Set zelle= bereich.cell (reihe,spalte)
Beachte: Spalte und Reihe beginnen jeweils bei null. (z.B.:Reihe 3 und Spalte B => bereich.cell(2,1)

Verschiedene Schleifenformen
If ... then Bei einzeiliger Verzweigung kann das End if entfallen
...
else
...
End if

While [condition]
[statements]
W end

Do [While | Until condition]


[statements]
Loop

Do
[statements]
Loop[While | Until condition]

Befehle für den Zugriff auf Zellen


Cellvalue Liefert den Wert einer Zelle, gelieferter Wert kann von verschiedenem Typ sein
[A1].cellvalue
contents Liefert den Inhalt einer Zelle, immer vom Typ string
[A1].contents
Beachte: Wenn in einer Zelle eine Formel steht, liefert der Befehl contents nicht den
Inhalt der Zelle, sondern die Formel. Abhilfe => Befehl cellvalue

select Wählt eine Zelle oder einen Bereich aus


[A1].select
set bereich = bind(bereichsgrenzen) Belegt die Variable bereich (muß vom Typ range sein); bereichsgrenzen ist
vom Typ string, z.B.:“A10..C20“. Es kann auch nur eine Zelle als Bereich
zugewiesen werden!
Set endzelle=bind(endzelladr)

Datentypen in Lotus
Currency Währung
Data Datum, Zeit
Double, single reele Zahlen
Integer, long Integerzahlen (Slider
String Zeichenkette (Textfelder, Labelfelder, Zellen ( =>können aber auch integer sein!!), )
Variant alle einfache Datentypen, array, Objekte

Der Datentyp Variant stellt einen Container für beliebige Daten dar. Lotus legt den Typ bei Zuweisung anhand des
Wertes fest. Da Lotus keinen Datentyp für Datum oder Zeit aufweist, wird hier der Datentyp Variant verwendet.

Seite 5
Eigner Franz Spezialgebiet: Scripts in Lotus 23.04.2002

Vorteil von Variants:


• Dieser Datentyp sollte verwendet werden, wenn die Art der zu bearbeitenden Daten unbekannt ist.
Nachteile von Variants:
• mehr Speicherbedarf, langsamere Verarbeitung , Übersicht über die Art der zu bearbeitenden Werte kann
verloren gehen

Befehle zum Umwandeln von Typen


cdat(expr) Konvertiert expr (numerischer Wert) in Datum/Zeit
creal(expr) Konvertiert expr (numerisch oder string) in eine reele Zahl
Cint(expr) Konvertiert in einen Integerwert
Csng(expr Konvertiert expr (numerisch oder string) in eine reele Zahl
Cstr(expr) Konvertiert in einen Stringwert
Bsp.: dialog1.text1.caption=cstr([zelle].contents)
Cvar(expr) Konvertiert in den Datentyp variant

Parameterabfrage
z.B.: @WENN(E5>$B$9*2/3;$B$8;0)
[E5] ... momentanen Holzbestand
[B9] ... ursprünglicher Holzbestand [Ausgangsgröße]
[B8] ... Schlägerungsrate=1000
Wenn der momentane Holzbestand größer ist als 2/3 des ursprünglichen Holzbestandes, dann dürfen 1000
Einheiten abgeholzt werden. Ist dies nicht der Fall, darf keine Schlägerung erfolgen.

z.B.: @WENN($ZAHLUNGSART=1; B9*$P/100;0)


z.B.: @WENN($ZAHLUNGSART=1; (B10+E9)*$P/100;E9*$P/100)

Diverse Vorgangsweisen

„Schließen eines Dialoges“:


Mit der Click Methode:
Dialog1.close oder source.parent.close

„Übergabe von Textfeld zu Slider mit Ausschluß von Null“:


Mit der Change Methode:
If dialog1.text2.caption <> „“ Then dialog1.slider1.value=Cint(dialog1.text2.caption)
Cint wird benötigt, da der der Slider einen Integerwert liefert und das Textfeld einen String

„Auswählen eines Bereiches“


Der Wert von dialog1.text3.caption gibt die Laufweite an. Tabellenanfang bei D4.
Bsp.: Ist die Laufweite=5, dann soll der Bereich: [D5..H8] markiert werden
Endzelladr ... Adresse, bis zu der markiert werden soll.

• Variablen definieren: Dim endzelladr, bereichsgrenze as string


Dim bereich as range
1. Möglichkeit:
• Bestimmen der Endzelladresse inkl. T.Zeile: endzelladr = “h“+ Cstr(3+Cint(Dialog1.Text3.caption))
• Bereichsgrenze definieren inkl. Kopierzeile: bereichsgrenze = “d5..“+endzelladr
• Bereich als range festsetzen: Set bereich = Bind(bereichsgrenze)
• Bereich auswählen: bereich.select

2. Möglichkeit
• Bereichsgrenze definieren inkl. Kopierzeile: bereichsgrenze ="d5..h"+Cstr(3+Cint(Dialog1.Text3.caption))
• Bereich als range festsetzen: Set bereich = Bind(bereichsgrenze)
• Bereich auswählen: bereich.Select

„Bereich löschen“: [
dialog1.text3.caption gibt hier an, ab welchem Wert die Zellen in der Tabelle gelöscht werden sollen.
Tabellenanfang bei D4. Bsp.: Bei Laufweite=30 wird der Bereich: [d34..h8192] gelöscht

Seite 6
Eigner Franz Spezialgebiet: Scripts in Lotus 23.04.2002

endzelladr="d"+Cstr(4+Cint(Dialog1.Text3.caption))
bereichsgrenze =endzelladr+"..h8192" {h8192 ist die letzte Zeile in der Spalte h}
Set bereich = Bind(bereichsgrenze)
bereich.Select
Selection.Clear Cleardata

„Nach unten kopieren“:


Selection.copyfill $down

„Letzte Zelle markieren“:


Dim endzelle as range
• Endzelle als Range festsetzen: Set endzelle = Bind(endzelladr)
• Endzelle auswählen: endzelle.select

Arbeiten mit Optionsboxen


On load:
z.B.: If[d4].contents = “1“ Then dialog1.option1.value = 1 Else dialog1.option2.value = 1
On click:
z.B.: [d4].contents = ”1”
[d4].contents = “0“

Arbeiten mit Checkboxes:


if (dialog1.check1.value=1) Then [E9].contents=Cstr(2000) Else [E9].contents=Cstr(0)

@FOLGE(x;n) wandelt den Wert x in ein Label um, wobei n die Anzahl der Kommawerte angibt.
Bsp: [d5]=8, @FOLGE(D5;2) liefert das Label 8,00

@KOMPR(Zeichenfolge) löscht führende, abschließende und aufeinanderfolgende Leerzeichen aus Zeichenfolge.


Zeichenfolge kann Text in " " (Anführungszeichen), eine Formel, die eine Zeichenfolge ergibt, bzw. die Adresse
oder der Name einer Zelle sein, die ein Label oder eine Formel enthält, die ein Label ergibt.
Bsp:[C5]=’test’, @KOMPR(C5) liefert das Label test

Verknüpfung von Label-Feldern mit &:


Bsp.: [F5]= @FOLGE(D5;2), [C5]=’test’
@KOMPR(C5)&" "&F5 liefert das Label test 8,00

Bsp.: [E12]= 76396,6673


+"Holzbestand: "&@FOLGE(E12;2)&" fm" liefert das Label: Holzbestand: 76396,67 fm

Bsp.: @KOMPR(" 45 3/8") = 45 3/8, wobei die führende Leerstelle vor 45 und eine der beiden Leerstellen
zwischen 45 und 3/8 gelöscht wird.

@VVERWEIS(Argument;Spaltenbereich;Versatz) ermittelt den Inhalt der Zelle in einer bestimmten Spalte einer
vertikalen Verweistabelle. Ist Argument kleiner als der erste Wert in Spaltenbereich, so ergibt @VVERWEIS
FEHLER. Ist Argument größer als der letzte Wert in der ersten Spalte des Bereichs, so stoppt @VVERWEIS bei der
letzten Zelle in der Spalte, die mit Versatz angegeben wird, und gibt den Inhalt dieser Zelle als Antwort zurück.

Bsp.: Schulnoten:
[F5] .. Punkte bei Schularbeit; „Argument“
[a18]..[b22] Tabelle mit 2 Spalten: Punkte und Notentexte; „Spaltenbereich“, => Versatz=1
@VVERWEIS(F5;$A$18..$b$22;1)
Der jeweilige Notentext wird ausgegeben

Bsp.:
@VVERWEIS(C3;B:A3..B:G6;D4)
Hinweis: Hier wird auf Zellen (A3,G6) eines 2 Dokumentes (B) zugegriffen

Seite 7
Eigner Franz Spezialgebiet: Scripts in Lotus 23.04.2002

Quellen:
Hilfe im Script-Editor: Help, Lotus 1-2—3 Objects
Besonders aufschlußreiche Themen sind hier:
1-2-3 Classes 1-2-3 Events 1-2-3 Methods 1-2-3 Properties

Internet:
http://www.fh-wedel.de/cis/archiv/seminare/ss99/hs/Thema7/s4.htm

Seite 8

Das könnte Ihnen auch gefallen