pfad im anderen makro setzen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

pfad im anderen makro setzen

Beitrag von kannenklaus »

hallo

mit der folgenden inputbox wird in der variablen sPfad ein pfad gespeichert.

Code: Alles auswählen

Sub PfadSetzen

sPfad =inputbox("Pfad für den Import setzen","B+P Import von Dateien","x:\446\GIS\pfa21\gauss\konflikte")
End Sub
nun möchte ich das die variable sPfad in einem anderen makro für folgende anweisung zur verfügung steht:

sPfadNeu = ConvertToUrl(sPfad)

geht das? freue mich auf eine antwort.

grüße klaus
pmoegenb
********
Beiträge: 4330
Registriert: Di, 22.06.2004 12:02
Wohnort: 71134 Aidlingen
Kontaktdaten:

Beitrag von pmoegenb »

Hallo Klaus,

ich zitiere aus dem StarBasic-Handbuch:
Öffentliche Variablen
Öffentliche Variablen werden im Kopfbereich eines Modules definiert. Sie stehen allen Modulen der betreffenden Bibliothek zur Verfügung;
Modul A:

Code: Alles auswählen

Dim A As Integer
Sub Test
Flip
Flop
End Sub
Sub Flip
A = A + 1
End Sub
Modul B:

Code: Alles auswählen

Sub Flop
A = A - 1
End Sub
Globale Variablen
Globale Variablen entsprechen von Ihrer Funktionsweise her weitgehend den öffentlichen Variablen. Ihre Werte bleiben jedoch auch dann erhalten, wenn das zugehörige Makro bereits beendet wurde. Die Deklaration von globalen Variablen erfolgt im Kopfbereich eines Moduls über das
Schlüsselwort Global:

Code: Alles auswählen

Global A As Integer
Gruß

Peter
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hallo peter

mein fehler war die variable oben nur mit dim und nicht global zu deklarieren.

danke für deine unterstützung.

grüße

klaus
FeuerDaemon
Beiträge: 8
Registriert: Mi, 01.11.2006 22:33

Was ist ein Modul?

Beitrag von FeuerDaemon »

Was ist an dieser Stelle ein Modul?

Beispielmakro
-------------------------------
Global a As Integer
Global b As Integer
Global c As Integer
a=1
b=3
c=0


sub eins
c=a+b
end sub

sub zwei
MsgBox "Ergebins ist " & c
end sub
----------------------------------------

Hierbei nörgelt der Interpreter bei der ersten Zeile "Sub erwartet."

Wo ist mein Denkfehler? Ich dache das Modul ist das Makro an sich? *grübel*


Gruß Benjamin
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Hierbei nörgelt der Interpreter bei der ersten Zeile "Sub erwartet."
Bei mir nicht, da tut er das in der dritten Zeile, naja und das sollte ja wohl klar sein warum.
Du kannst nicht einfach beliebige Befehle außerhalb eines Makros in ein Modul schreiben:
a=1
b=3
c=0
Ich dache das Modul ist das Makro an sich?
Warum sollte es dann Modul heißen?

Die Makros sind in Modulen enthalten, diese Module befinden sich in Bibliotheken und die Bibliotheken in den Verzeichnis für die globalen OOo-Makros oder im entsprechenden Verzeichnis des Benutzers oder in Dokumenten.


Sorry, aber das sind wirklich elementare Dinge, ich glaube nicht das es gut ist programmieren zu wollen ohne zumindest solche Grundlagen zu kennen.
Hinweise zu Informationsquellen sind hier:
viewtopic.php?t=1553
in ausreichender Menge genannt.



Gruß
Stephan
FeuerDaemon
Beiträge: 8
Registriert: Mi, 01.11.2006 22:33

Beitrag von FeuerDaemon »

Genau darauf bezieht sich meine Frage.
Im Beispiel oben ging es um folgenden Code

Dim A As Integer
Sub Test
Flip
Flop
End Sub
Sub Flip
A = A + 1
End Sub

Ich versuche das mal nachzusetellen.

Ich rufe über Extras -Makros - Makros verwalten - OpenOffice.org Basic das Verwaltungsfenster auf. Jetzt kann ich entscheiden wo ich mein Makro zuordnen möchte. Ich nehme einfach mal das (unterste) aktuelle Dokument. Jetzt klicke ich auf neu und geben dem Kind ein Namen.

Fakt bisher:
Ich habe mich für ein BASIC Makro entschieden
Ich habe es im aktuellen Dokument erstellt.

Ein klick auf bearbeiten öffnet dem Makroeditor.

Frage 1:
Finde ich hier den Code?
----------
Dim A As Integer
Sub Test
Flip
Flop
End Sub
Sub Flip
A = A + 1
End Sub
-----------

Frage 2: Was ist jetzt ein Makro und was ein Modul?
Bisher konnte ich nur ein Makro erstellen in dem ich Subs anlege. Aber Subs sind keine Makros und was anderes wie Makros habe ich noch nicht gefunden...


Zitat aus dem SB Hanbuch

-----------------------------------
Öffentliche Variablen

Öffentliche Variablen werden im Kopfbereich eines Moduls mit dem Schlüsselwort Dim definiert. Sie stehen allen Modulen in ihrer Bibliothek zur Verfügung:

Modul A:

Dim A As Integer

Sub Test Flip Flop End Sub

Sub Flip A = A + 1 End Sub

Modul B:

Sub Flop A = A - 1 End Sub

Der Wert der Variablen A wird von der Funktion Test nicht geändert, aber in der Funktion Flip um eins erhöht sowie in der Funktion Flop um eins verringert. Beide dieser Änderungen an der Variable sind global.

Sie können auch mit dem Schlüsselwort Public statt Dim eine öffentliche Variable deklarieren:


Public A As Integer

Eine öffentliche Variable steht nur so lange zur Verfügung, wie das verknüpfte Makro ausgeführt wird; danach wird die Variable zurückgesetzt.
------------------------

Demnach sind die Mudule in einem Makro eingegliedert. Und die Module sind die Subs und Funktions. Was stimmt den nun?
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Ich rufe über Extras -Makros - Makros verwalten - OpenOffice.org Basic das Verwaltungsfenster auf. Jetzt kann ich entscheiden wo ich mein Makro zuordnen möchte. Ich nehme einfach mal das (unterste) aktuelle Dokument. Jetzt klicke ich auf neu und geben dem Kind ein Namen.
und hast damit ein Modul, in der Bibliothek Standard des Dokuments, mit dem Namen Module1 erstellt.
Kannst Du auch deutlich sehen, im linken Fensterbereich stehen die Bibliotheken, deren Symbole sind Ordner, die Module deren Symbole eine Art Papierblat ist und im rechten Fensterteil stehen die Makros eines Moduls das gerade aktiv ist, hast Du ein ganz neues Modul erstellt wie eben steht dort als einziges "Main" was der Names eines leeren Makros ist das OOo automatisch erstellt hat. Die Überschrift im rechten Fensterteil lautet im Übrigen sogar "Vorhandene Makros in: <Modulname>"
Ich habe mich für ein BASIC Makro entschieden
Ich habe es im aktuellen Dokument erstellt.


Ja und es ist im Module1.
Finde ich hier den Code?


Ja, oder findest Du ihn nicht?
Geöffnet sein müßte nach Deiner Beschreibung Module1 der Bibliothek Standard des Dokuments und Du müßtest Dein Makro sehen. (*) Am unteren Bildschirmrand müßte ein Reiter sein der den modulnamen angibt "Module1" und wenn Du darauf das Kontextmenü erzeugst kannst du weitere Module oder Dialoge zur Bibliothek Standard des Dokuments hinzufügen.

(*)
Es sei denn da wäre dEin makro noch garnicht, wenn Du ein Modul neu anlegst ist da nur ein leeres Makro namens Main(), konkret also eine Kommentarzeile und ein leeres Makro:

Code: Alles auswählen

REM  *****  BASIC  *****

Sub Main

End Sub

Was ist jetzt ein Makro und was ein Modul?
hatte ich bereits erläutert.
Bisher konnte ich nur ein Makro erstellen in dem ich Subs anlege.


Hast Du doch nirgens getan, Du hast wie oben beschrieben mittels Klick auf "Neu" ein neues Modul erstellt und Dein Makro darin gespeichert. Weil das Makro (=Sub) nun im Modul gespeichert ist ist doch das Modul selbst deshalb nicht das Makro, denn das Modul kann beliebig viele Makros enthalten (der Umfang aller Makros in einem Modul darf nicht 64k überschreiten).
Öffentliche Variablen werden im Kopfbereich eines Moduls mit dem Schlüsselwort Dim definiert. Sie stehen allen Modulen in ihrer Bibliothek zur Verfügung:

Modul A:

Dim A As Integer

Sub Test Flip Flop End Sub

Sub Flip A = A + 1 End Sub
Ja. Wobei hier das Modul A eine Deklaration:

Code: Alles auswählen

Dim A As Integer 
und 2 Makros enthält:

Code: Alles auswählen

Sub Test Flip Flop End Sub 

Sub Flip A = A + 1 End Sub
Demnach sind die Mudule in einem Makro eingegliedert.


das "Demnach" erkläre mal... :wink:
Was stimmt den nun?
was ich bereits sagte:
Die Makros sind in Modulen enthalten, diese Module befinden sich in Bibliotheken und die Bibliotheken in den Verzeichnis für die globalen OOo-Makros oder im entsprechenden Verzeichnis des Benutzers oder in Dokumenten.

Sorry, weil ich hier ein paar mehr posts habe als Du habe ich nicht automatisch recht, bloß die Lage bezüglich des hier diskutierten Problems ist so eindeutig das ich mehr dazu eigentlich nicht sagen kann.



Gruß
Stephan
FeuerDaemon
Beiträge: 8
Registriert: Mi, 01.11.2006 22:33

Beitrag von FeuerDaemon »

Das habe ich verstanden. In obigem Link wird es ja beschrieben.

Ich hatte ein Verständnisproblem.
Ich dachte das Modul ist das Makro. (Verwirrung durch das Menü "Makro" - Was, wie ich meine, "Module" heissen sollte).

Ich bin da von Microsoft etwas vergewaltigt. Die nehmen nämlich einfach irgenwelche Befriffe für ähnlich, aber andere, Abläufe.
Ich dachte OO hat hier die Begriffe auch gemischt.

-------------------------

Somit gehe ich recht in der Annahmen, dass Variablen ausserhalb von Subs (Makros) mit

"global variable As Typ"

global definiert werden?
Dann stellt sich nir nur noch die Frage kann ich auch Konstanten global definieren und wenn ja wie?
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Was, wie ich meine, "Module" heissen sollte
Eigentlich nicht. Mir persönlich ist es egal, nur etwas unlogisch zu benennen finde ich falsch.
Die Hirarchie ist nun mal:

Code: Alles auswählen

Bibliothek
  -->Modul
       -->Makro
Wenn es also nicht Makros heißen soll, dann Bibliotheken, aber nicht Module.
Verwirrung durch das Menü "Makro"
[...]
Ich bin da von Microsoft etwas vergewaltigt. Die nehmen nämlich einfach irgenwelche Befriffe für ähnlich, aber andere, Abläufe.
Ich dachte OO hat hier die Begriffe auch gemischt.
Keine Ahnung wie Du das meinst, OOo verwendet die gleichen Bezeichnungen wie MS Office im Menü, nämlich Makros. Im Übrigen sind auch in MS Office Makros in Modulen organisiert und nicht Module in Makros.

Dann stellt sich nir nur noch die Frage kann ich auch Konstanten global definieren und wenn ja wie?
Ich würde sagen:

Code: Alles auswählen

Global Const a = 123


Gruß
Stephan
FeuerDaemon
Beiträge: 8
Registriert: Mi, 01.11.2006 22:33

Beitrag von FeuerDaemon »

Keine Ahnung wie Du das meinst, OOo verwendet die gleichen Bezeichnungen wie MS Office im Menü, nämlich Makros. Im Übrigen sind auch in MS Office Makros in Modulen organisiert und nicht Module in Makros.
Bei den Makros, ja. Wer aber schon mal mit SQL und MsSQL zu tun hatte oder versucht ne Domain zu administrieren (DNS, AD) der kenn das leidige Thema.

Vielen Danke für Deine Hilfe, Stephan - und vor allem für die Geduld. Deine Erklärung haben mich ein großes Stück näher an mein Ziel gebracht.

Gruß
Benjamin
Antworten