Übersetzungshilfe gesucht

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

Moderator: Moderatoren

gott50000
Beiträge: 4
Registriert: Mi, 22.09.2004 15:57

Übersetzungshilfe gesucht

Beitrag von gott50000 »

Hi,

ich hab ein Anliegen. Und zwar lerne ich gerade Starbasic und muss Makros aus VBA übersetzen. Vielleicht findet sich hier jemand, der sagen kann wie ich den folgenden Code übersetze:

Code: Alles auswählen

Range("B1").FormulaLocal = "=Tabblatt!" & Spalte & 3

Range("B38").Value

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ??

Range("A1").Select

Selection.ClearContents



Sheets("StammdatAc").Select
:=False, Transpose:=False
Selection.Copy
:=False, Transpose:=False


ActiveCell.FormulaR1C1 = "1"

ActiveWindow.SmallScroll Down:=11



SkipBlanks:=False, Transpose:=False
ActiveCell.Offset(0, 1).Select
ActiveCell.Offset(1, 0).Select
Application.CutCopyMode = False
SkipBlanks:=False, Transpose:=False
Selection.Copy


Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
Application.CutCopyMode = False
:=False, Transpose:=False
Es wäre Prima wenn mir da jemand helfen könnte, in der ewig langen Doku suche ich Stunden bis ich das raus hab.

MfG,


Gott50000
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hallo Gott50000,

bevor du anfängst, ein VBA Makro zu "übersetzen", empfehle ich, sich den Sinn des Makros bewusst zu machen, den Weg beziehujngsweise die Lösung kritisch zu hinterfragen und eine neuen, optimale Lösung direkt mit OOo-Skript zu programmieren.
Das ist meist der bessere Weg, denn wer sagt denn, dass das VBA Makro die beste Lösungsvariante darstellt? Auch VBA hat seine Grenzen. Und bevor man aus einem sub-optimalen Code durch Übersetzung einen noch schlechteren Code produziert, lieber die Aufgabenstellung beschreiben und eine passende, gute Lösung direkt in StarBasic suchen.

Und wenn du selbst nicht weiterkommst, wird dir sicher jemand im forum helfen, bei konkreten Fragen.

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
gott50000
Beiträge: 4
Registriert: Mi, 22.09.2004 15:57

Beitrag von gott50000 »

Hallo.

Ist im Prinzip alles klar. Die Situtation/ die Projektierung sieht das allerdings nicht vor, alleine vom Zeitaufkommen geht das so nicht.
Eine Optimierung des Codes kommt nur dann in Frage, wenn es nicht anders geht. Im Prinzip gibt es auch in den Makros keine heftige Programmierung, es werden meist nur Daten kopiert und Sheets aktiviert.

Deshalb möchte ich euch noch mal bitten, die paar Zeilen so halbwegs zu übersetzen. Ich hatte noch nie viel mit Makros am Hut, und werde es auch so schnell nicht mehr haben. Deshalb möchte ich die Mühe vermeiden, beide Sprachen lernen zu müssen. Wenn noch was über bleibt, dann muss ich sehen wie ich klar komme.

Ich warte noch mal ein paar Tage auf Antworten und danke euch schon jetzt für eure Bemühungen.

MfG

Gott50000
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Beitrag von Charly »

Hallo Gott50000


Man kann VBA nicht wörtlich in Starbasic übersetzen. Wäre es so gäbe es sicherlich eine Menge Übersetzungsprogramme. Daher auch die Ausführungen vom Thomas. Um eine Übersetzung zu machen muss man wissen, was soll das Makro tun und welche Ausgangsdaten stehen mir zur Verfügung. Das ist bei deinen Codeteilen sehr schwer zu ergründen.
Range("B1").FormulaLocal = "=Tabblatt!" & Spalte & 3
Für diesen Befehl muss ich wissen, auf welchen Tabellenblatt die Zelle B1 steht. Ist das das Ausgangstabellenblatt oder muss ich erst darauf zugreifen.
Range("B38").Value
Der Befehl ist unvollständig. Die Frage ist soll ein Wert an die Zelle übergeben werden oder von dort ausgelesen.

Sheets("StammdatAc").Select
:=False, Transpose:=False
Selection.Copy
:=False, Transpose:=False


ActiveCell.FormulaR1C1 = "1"

ActiveWindow.SmallScroll Down:=11



SkipBlanks:=False, Transpose:=False
ActiveCell.Offset(0, 1).Select
ActiveCell.Offset(1, 0).Select
Application.CutCopyMode = False
SkipBlanks:=False, Transpose:=False
Selection.Copy


Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
Application.CutCopyMode = False
:=False, Transpose:=False
Du hast zweimal den Offsetbefehl verwendet, soll nur eine Zelle also die Letzte kopiert werden.
Du hast dreimal den Befehl Selection.Copy und nur einmal den Befehl Selection.PasteSpecial, also Inhalte(hier Werte) einfügen verwendet. Mit jedem Copybefehl geht der vorherige Inhalt verloren.
Für alle Kopierbefehle brauche ich den Ausgangsbereich und den Zielbereich.(Tabellenblatt und Zellen). und muss wissen gilt für alle Kopierbefehle Werte einfügen oder genügt Kopieren-Einfügen.

Gruß
Charly
gott50000
Beiträge: 4
Registriert: Mi, 22.09.2004 15:57

Beitrag von gott50000 »

Hallo.

Der Code ist aus dem Zusammenhang genommen. Da es für viele VBA-Befehle äquivalente in Starbasic gibt, hab ich angenommen das sei meist so.

Code: Alles auswählen

sheet(oSheet).activate -> ThisComponent.CurrentController.setActiveShee(oSheet)
Da dachte ich halt das gäbe es auch für Range("B38").Value usw.

Danke,

Gott50000
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Beitrag von Charly »

Hallo Gott50000

Du bist auf einen wesentlichen Unterschied gestoßen. Bei Starbasic laufen die Makros in der Regel mit einer unsichtbaren Selection. Die sichtbare Selektion wird dabei nicht verändert. Nur der Makrorekorder arbeitet mit der sichtbaren Selektion. Das heißt, wenn man solche Programme einbinden will, müssen Zellen sichtbar selektiert werden. Und vernünftigerweise beendet man sein Programm, mit einer sichtbaren Selektion, wenn sie anders sein soll als die ursprüngliche, um dem Anwender das Weiterarbeiten zu erleichtern.

Ich versuche ein paar deiner Befehle zu übersetzen:

Code: Alles auswählen

Sub VBA_StarBasic

Doc = ThisComponent
Controller = Doc.CurrentController

'Aktives Tabellenblatt wählen
Blatt = Controller.ActiveSheet

'Tabellenblatt nach Index wählen
'Blatt = doc.sheets(0)

'Tabellenblatt nach Namen wählen
'Blatt = Doc.sheets.getByName("Tabelle1")

Zelle = Blatt.getCellRangeByName("B1")
Zelle.formulaLocal = "=Tabelle2." + "C" + "3"


Zelle = Blatt.getCellRangeByName("B38")
Zelle.value = 1

Zelle = Blatt.getCellRangeByName("A1")
Zelle.string = ""

'Der VBA Befehl ActiveCell.FormulaR1C1 = "1" könnte man wie folgt übersetzen:

Zelle = Doc.CurrentSelection()
Zelle.string = "1"

End Sub
Für den Befehl Selection.PasteSpecial gibt meines Wissen keinen StarBasic-Befehl. Ich habe mir hier mit einem Programm des Makrorekorders geholfen. Darüber habe ich schon mal in einem Thread gepostet.
Siehe viewtopic.php?t=1220

Gruß
Charly
Antworten