Re: Cursormanipulation per Basic
Verfasst: Fr, 08.07.2016 17:22
WO IST DAS MAKRO?
WO IST DIE *.Lis?
gruß
balu
WO IST DIE *.Lis?
gruß
balu
deutsches Forum rund um Apache OpenOffice und LibreOffice
http://www.oooforum.de/
prima - kein Problembalu hat geschrieben: ...Workbook, auch wenn Du 10 Jahre oder wie auch immer mit VBA gearbeitet hast. Das führt hier nur zur Verwirrung.
nein - das Einlesen der LisDateien funktioniert inzwischen prima. Mit dem Auswerten hast du zum Teil recht ...Weil Du dir wahrscheinlich einen abquälst Daten aus der *.Lis-Datei einzulesen. Denn so habe ich das aus deinen vorigen Beiträgen herausgelesen. Und nach dem einlesen brichst Du dir dann auch noch einen ab, um die Daten irgendwie sortiert (oder wie auch immer) in eine Calc-Datei einzupflegen.
Nach den Diskussionen hier ... bin ich etwas schüchtern .... und es ist inzwischen eine ganze Menge Code geworden.Ferner wollen wir endlich mal deinen Makrocode sehen um endlich voran zu kommen.
Daran hatte ich auch schon gedacht - nur (auf meine alten Tage) eine für mich völlig neue Programmiersprache zu lernen ....... und Du müsstest vielleicht auf Python umsteigen.
Daran hatte ich auch erst gedacht - Das ginge, wenn in der Sub klar wäre, in welchem TC sich das CellObject befindet - da ist die Übergabe deutlich einfacher. ABER - für die RangeDefinition reicht mir ja das SheetObject - und das bekomme ich per ".getSpredSheet"Schon mal was von der richtigen Variablendeklaration (Öffentlich, Privat) gehört, und wie man sie wo richtig einsetzt?
Nicht mehr nötig: XRAY ist installiert ... MRI hab ich nicht weiter verfolgt, da der InstallationsVersuch ne Fehlermeldung geliefert hat.Das aller letzte mal das Du darauf hingwiesen wirst dir entweder XRAY oder MRI zu installieren, kannst auch beide nehmen.
Sorry, dafür brauch ich einige Zeit ...balu hat geschrieben:WO IST DAS MAKRO?
WO IST DIE *.Lis?
gruß
balu
Bitte denke nach, denn Du kannst ja programmieren. Was wir hier im Moment machen ist eine Riesendiskussion die nur darauf beruht das Du meinst StarBasic-Programmierung müsse sein wie VBA-Programmierung bzw. Dir das wünscht.Daran hatte ich auch erst gedacht - Das ginge, wenn in der Sub klar wäre, in welchem TC sich das CellObject befindet - da ist die Übergabe deutlich einfacher.
Das "Workbook" heisst wahrscheinlich "Dokument-Objekt", ich habe darüber noch nie nachdenken müssen, aber so würde ich es nennen (gleichzeitig würde ich einen Unterschied zwischen "Dokument-Objekt" und einem möglichen "Datei-Objekt" sehen).In der Grundebene sind natürlich die WorkbookObjecte (bei dir TC, Tc2, Tc3) bekannt - nur halt nicht in der Sub verfügbar. Ich werde die Sub so aufbohren, dass sie das betreffende Workbook (wie heißt das eigentlich im StarBasic?)
Dessen war ich mir nicht bewusst denn die Rede war immer nur von STRG+<Pfeiltaste>, nicht das das in einem vorhandenen Bereich stattfinden soll.Gesucht war aber die letzte Zelle in einem geschlossenen DatenBlock - wie ich diese Spalte mit dieser Methode finde ??
Garnichts, denn es geht nicht um das Objekt sondern eine Selektion und die ist deswegen ungünstig weil Du nicht willst das die Bildschirmanzeige flackert wenn mehrfach die Selektion wechselt.Außerdem habe ich leider (noch) nicht verstanden, was an einem CursorObject ungünstiger als an einem Cell-/RangeObject sein soll.
Code: Alles auswählen
ThisComponent.LockControllers
ThisComponent.UnLockControllers
Danke, das ist tatsächlich eine wichtige Feststellung.Das stimmt so nicht, Stephan hat nur geschrieben das du idR. kein Cursorobjekt benötigst.
Mir ist eigentlich VBA ziemlich egal - Mein Bestreben ist, die umfangreichen Auswertungen, die ich früher sehr Zeitaufwendig, manuell mit entsprechenden Formelstrukturen durchgeführt hatte nun zu automatisieren .... also eher mein DenkModel mit Basic nachzubilden....eine Riesendiskussion die nur darauf beruht das Du meinst StarBasic-Programmierung müsse sein wie VBA-Programmierung bzw. Dir das wünscht.
Dann habe ich mich nicht genau genug ausgedrückt.... denn die Rede war immer nur von STRG+<Pfeiltaste>....
...es könnte mehrere Bereiche geben
Ich hatte bisher ein mit "createCursor" erzeugtes Object SO verstanden, dass es sich hierbei um einen virtuellen Cursor handelt, der keine Wirkung auf die sichtbare Oberfläche hat. Anderenfalls macht es wenig Sinn die Dispatcher-Aufzeichnung (die den sichtbaren Cursor manipuliert) durch ein "CreateCursor"-Object zu ersetzen - und ich verstehe jetzt erst meinen Denkfehler und eure Hinweise....sondern eine Selektion und die ist deswegen ungünstig weil Du nicht willst das die Bildschirmanzeige flackert wenn mehrfach die Selektion wechselt...
Wenn ich Dannenhöfer richtig gelesen habe, kann man das mit starBasic schon:...das Kopieren eines Tabellenblattes mit Inhalt...
Erst einmal Danke für die vielen Hinweise/Zurechtrückungen/Erläuterungen. Sie helfen mir dabei mich den Eigenheiten von StarBasic zu nähern.7.3.6 Wie kann man Zellbereiche kopieren?
und
7.4.4 Wie kann man Arbeitsblätter löschen, erzeugen,kopieren und verschieben?
ja, ist mein Fehler es geht richtigerweise um:Wenn ich Dannenhöfer richtig gelesen habe
Ganz ehrlich gesagt, ich habe den Überblick darüber verloren was er früher mit VBA programmiert hat um die *.Lis Dateien einzulesen und was er jetzt mit StarBasic versuchen will um das gleiche zu erreichen oder erst jetzt mit StarBasic das machen will was er sonst nur per Hand mit den *.Lis Dateien gemacht hat und überhaupt nicht mit VBA diesbezüglich gearbeitet hat. Und ferner frage ich mich ob er in Excel nur mit aufgezeichneten Makros gearbeitet hat, oder richtig programmiert hatte?Stephan hat geschrieben: Was wir hier im Moment machen ist eine Riesendiskussion die nur darauf beruht das Du meinst StarBasic-Programmierung müsse sein wie VBA-Programmierung bzw. Dir das wünscht.
Eigentlich wollte ich einen schönen Bildlichen vergleich erzählen, aber mir fällt momentan nix amüsantes und zutreffendes ein. Also lass ich es, und wiederhole mich noch mal aber diesmal etwas deutlicher.StePfl hat geschrieben:Dann habe ich mich nicht genau genug ausgedrückt.... denn die Rede war immer nur von STRG+<Pfeiltaste>....
...es könnte mehrere Bereiche geben
Ich würde gerne mit Basic den Vorgang nachbilden, den ich bisher manuell mit "Strg+>Pfeiltaste> und inzwischen mit angepassten Dispatcher-Routinen ausführe.
...und - JA - es gibt mehrere Bereiche, deren Anzahl und Größe jedesmal variieren. Genau deshalb suche ich ja nach einer Methode, diese a) zu finden, b) deren Umfang zu ermitteln um diesen Bereichen dann c) eineindeutige Namen zuzuweisen um sie in den Auswerteformeln (als Range) addressieren/ ansprechen zu können.
Mit Inhalt und Zellformat Vorlagen und Bedingte Formatierung, aber ohne Spaltenbreite und Zeilenhöhe geht via "Übertragbarer Inhalt", nachzulesen in Andrew Pitonyak. Und ja, zwischen zwei Calc-Dokumenten. Eben in OOo 3.3.0 getestet, nachdem ich den Code von Andrew leicht angepasst hatte (weil oDoc1 und oDoc2 nicht definiert sind).Stephan hat geschrieben: ... es geht richtigerweise um:
'_Ein_ Beispiel für einen solchen Ausnahmefall ist das Kopieren eines Tabellenblattes mit Inhalt zwischen verschiedenen Calc-Dokumenten [...]'
ich bestehe nicht auf dem Wort "Inhalt", ich bestehe nur darauf was ich damit meinte und das ist am Besten [1] damit beschrieben das ich sage will ein Tabellenblatt so kopieren wie das Ergebnis aussähe wenn ich die Kopieraktion per Hand durchführen würde.Mit Inhalt und Zellformat Vorlagen und Bedingte Formatierung, aber ohne Spaltenbreite und Zeilenhöhe geht via "Übertragbarer Inhalt", nachzulesen in Andrew Pitonyak. Und ja, zwischen zwei Calc-Dokumenten. Eben in OOo 3.3.0 getestet, nachdem ich den Code von Andrew leicht angepasst hatte (weil oDoc1 und oDoc2 nicht definiert sind).
Du hast Recht.ich höre das Stöhnen von Balu schon jetzt ...
Code: Alles auswählen
function oStrgDownStarBasic_2(optional oCell as object) as object
dim oDoc, oSheet, oRange, oCurs
dim hlp, hlp1, hlp2, hlp3, hlp4, hlp5
oDoc = thisComponent
if isMissing(oCell) then
dim oCell
oSheet=ThisComponent.CurrentController.ActiveSheet
oCell = ThisComponent.CurrentSelection
else
redim preserve oCell
oSheet = oCell.getSpreadSheet ' FEHLERMELDUNG: BASIC-Laufzeitfehler. Variable nicht definiert.
[...]
Code: Alles auswählen
dim oDoc, oSheet, oRange, oCurs
dim hlp, hlp1, hlp2, hlp3, hlp4, hlp5
Code: Alles auswählen
dim oDoc, oSheet, oRange, oCurs
Code: Alles auswählen
dim oDoc as Object, oSheet as Object, oRange as Object, oCurs as Object
Code: Alles auswählen
dim hlp, hlp1, hlp2, hlp3, hlp4, hlp5
Tja, was machst Du denn auch hier, weißt Du das ganz genau?Ich habe nur Probleme, wenn das übergebene Object "optional" übergeben wird - da bekomme ich Fehlermeldungen, die ich nicht verstehe.
z.B. in "oStrgDownStarBasic_2(optional oCell as Object)" stört sich das Prg an "oSheet = oCell.getSpreadSheet"
und meldet:BASIC-Laufzeitfehler. Variable nicht definiert, obwohl die Datei "oCell" im Beobachter vorhanden und mit Inhalten eingesehen werden kann.
Code: Alles auswählen
function oStrgDownStarBasic_2(optional oCell as object) as object
[...]
if isMissing(oCell) then
dim oCell
else
redim preserve oCell
[...]
Code: Alles auswählen
oDoc = thisComponent
if isMissing(oCell) then
dim oCell
oSheet=ThisComponent.CurrentController.ActiveSheet
oCell = ThisComponent.CurrentSelection
Nimm ne andere Dateiendung, wie z.B. .txt oder .zip (aber mit dem Vermerk nur die Endung zu tauschen).in "Dateianhänge" wird die Datei "Muster.lis" mit dem Hinweis auf "Ungültige Dateierweiterung: Muster.LIS" verweigert.
NEIN - ich habe beide (sehr umfangreichen) Werke nicht von Anfang bis Ende durchgelesen - sondern dort immer wieder Hilfe gesucht.... Wie war das noch mal? Du kennst Dannenhöfer und Pitonyak, deine Aussage. ...
... Ja - durch das Nicht-Explizit-Definieren sind sie Variant. ... die bei jeder Wertzuweisung den Typ des Zuweisungswertes annehmen .... (Dannenhöfer S. 79) - ABER STIMMT, dort steht auch: "Tipp: Alle Variablen ordentlich deklarieren und auf den Typ Variant möglichst verzichten."Aus diesem Codeausschnitt interessiert uns jetzt erstmal nur folgender Teil.Frage: wieviele Variablen sind dort richtig deklariert? .... KEINE...Code: Alles auswählen
dim oDoc, oSheet, oRange, oCurs dim hlp, hlp1, hlp2, hlp3, hlp4, hlp5
das dachte ich bisher eigentlich schon... (man lernt aber nie aus)Tja, was machst Du denn auch hier, weißt Du das ganz genau?Code: Alles auswählen
function oStrgDownStarBasic_2(optional oCell as object) as object [...] if isMissing(oCell) then dim oCell else redim preserve oCell [...]
... mit txt ging es auch nicht, mit ZIP würde es klappen,Nimm ne andere Dateiendung, wie z.B. .txt oder .zip (aber mit dem Vermerk nur die Endung zu tauschen).
Code: Alles auswählen
iNumber = Freefile
Open aFile For Input As iNumber
While not eof(iNumber)
Line Input #iNumber, sZeile
If sZeile <>"" then
sMsg = sMsg & sZeile & chr(13)
end if
wend
Close #iNumber
Code: Alles auswählen
if sZeile ... Then
ElseIf sZeile ... Then
...
'oder auch z.B.
ElseIf Left(sZeile, 12) = "abc" Then
...
ElseIf sZeile " ~1B─────────────────────────────────── ~0B" Then
'erkannt wurde die Zeile auf die in der nächsten Zeile
'ein Datensatz folgt, hier muss entsprechender Code stehen der darauf reagiert
...
End If
Code: Alles auswählen
~C 2798 1