[GELÖST] Cursormanipulation per Basic

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: [GELÖST] Cursormanipulation per Basic

Re: [GELÖST] Cursormanipulation per Basic

von balu » Mi, 13.07.2016 18:27

Hallo StePfl,

danke für die Info wegen der CSV. Und das ist schon verdammt ärgerlich, denn ansonsten wäre das ja wohl alles kein Problem.


Gruß
balu

Re: [GELÖST] Cursormanipulation per Basic

von StePfl » Di, 12.07.2016 15:42

Balu hat geschrieben:Wie wurden die falschen Daten festgestellt, bei dir beim Import, oder wurden die nach dem Export aus dem Programm von dem Ersteller an Ort und Stelle überprüft bevor Du sie bekommen hast?
Ganz zu Anfang - nachdem in den Auswertungen nach dem Import der CSV-Dateien unerklärliche Fehler (im Vergleich zur SusaListe) auftauchten - habe ich die CSV mit einem Text-Editor Wert für Wert überprüft und feststellen müssen, dass nach einem nicht nachvollziehbaren Muster Beträge und/oder FibuKonten falsch und/oder vertauscht waren. Das habe ich in den folgenden Jahren immer wieder getestet, es blieb bei diesen unerklärlichen verhalten. Der SW-Hersteller hat auf Anfrage erklärt, dass diese Funktion "von niemand" genutzt und deshalb nicht gepflegt würde

Und - danke für die Erklärung, was der Fehlerinterpreter macht. Das wird bei VBA auch nicht wesentlich anders sein - wie sonst sollte er sonst Unstimmigkeiten/Unvollständigkeiten im Progammablauf finden können.


Gruß, StePfl

Re: [GELÖST] Cursormanipulation per Basic

von balu » Di, 12.07.2016 14:51

Hallo StePfl,

Verzeih mir das ich mich noch mal einklinke, aber ich verstehe da noch etwas nicht.
Es gäbe zwar auch einen "CSV-Export" - nur liefert der nachweißlich SO falsche Daten, dass damit nicht zu arbeiten ist.
Wie wurden die falschen Daten festgestellt, bei dir beim Import, oder wurden die nach dem Export aus dem Programm von dem Ersteller an Ort und Stelle überprüft bevor Du sie bekommen hast?

balu hat geschrieben: ... auch scheinbar "unwichtige" Fehler oder Probleme können sich an anderer Stelle negativ bemerkbar machen und sehr oft dort wo man nicht mit rechnet.
Und genau das ist ja bei dir eingetroffen
Das Problem ist, dass scheinbar eine "Dim-Anweisung" auch dann ausgeführt wird, wenn sie innerhalb eines "if-Bereichs" steht, der aufgrund der Bedingung nicht ausgeführt wird.
Ich weiß nicht wie ich es am besten sagen soll, und hoffe das Du das nachfolgende richtig verstehen wirst.

Keine Ahnung wie das bei VBA ist, aber in StarBasic ist das so, sobald ein Programm gestartet wird, wird erstmal der Fehlerinterpreter (oder wie man ihn auch nennen soll) gestartet der die gesamte "Haupt-Sub" Programmzeile für Programmzeile überprüft. Und der Fehlerinterpreter überprüft nicht nur ob alles so weit korrekt ist, sondern er "übergibt" auch gleichzeitig gewisse Parameter direkt an OO. Und das bedeutet, das auch scheinbar nicht ausgeführte Schleifen oder ähnliches sehr wohl ausgeführt werden, auch wenn man meint das sie vom eigentlichem Programmablauf nicht ausgeführt werden. Denn wie sonst soll der Fehlerinterpreter feststellen ob eine Schleife korrekt programmiert wurde, wenn er sie nicht überprüft. Oder ist dir das noch nie aufgefallen das es eine Fehlermeldung hagelt das z.B. ELSE/ENDIF ohne IF nicht erlaubt ist, aber das eigentliche Programm noch gar nicht "richtig" gestartet ist?

Erst wenn der Fehlerinterpreter keine "offensichtliche" Fehler gefunden hat, und jede Zeile so weit korrekt ist, wird das eigentliche Makro gestartet. Und das ist auch ein Grund dafür das das eigentliche ausführen des Programms, nach dem man es gestartet hat, nicht immer scheinbar sofort startet, sondern erst nach einer gewissen Zeitlichen Verzögerung. Und je länger der Code, desto länger kann die Überprüfung dauern.

Wie gesagt, hab keine Ahnung ob dies auch bei VBA so ist.



Gruß
balu

Re: [GELÖST] Cursormanipulation per Basic

von StePfl » Di, 12.07.2016 13:12

Hallo Stephan,
Stephan hat geschrieben: Bin ich hier im falschen Film? ...
Zum letzten Male:
Es gibt (bisher) keine klare ERklärung dafür warum die Einträge in B46 und B47 ff in TEilen unterschiedlich sind,
sorry - ich kann dir das auch nicht erklären... (meine Vermutung kennst du ja inzwischen)
Ich muß die Daten so nehmen wie sie kommen und meine Auswertung um die vorliegende(n) Form(en) stricken ...

Gruß
StePfl

Re: [GELÖST] Cursormanipulation per Basic

von Stephan » Di, 12.07.2016 12:49

Schau mal in "B23", da steht (Spaltenzuordnung- auch gekürzte Darstellung):
Muss ich nicht, kenne ich! Bin ich hier im falschen Film?

Zum letzten Male:

Es gibt (bisher) keine klare ERklärung dafür warum die Einträge in B46 und B47 ff in TEilen unterschiedlich sind, AUCH B23 klärt das nicht auf, sondern fügt nun noch eine dritte Position für "Konto" hinzu, denn "Konto" steht nicht in gleicher Position wie 2798.

Code: Alles auswählen

        Konto         Gegenkonto        BS BA Mwst%% We-Dat   Beleg   
~C        2798                            1  50       04.01.01 1 
~C                      6151              1  50 19.00 04.01.01 1
Aus diesem Grund funktioniert dein Vorschlag ...
Was nun wieder ein Missverständnis ist, denn es handelt sich um keinerlei Vorschlag.



Gruß
Stephan

Re: [GELÖST] Cursormanipulation per Basic

von StePfl » Di, 12.07.2016 12:25

Hallo Stephan,

Schau mal in "B23", da steht (Spaltenzuordnung- auch gekürzte Darstellung):

Code: Alles auswählen

        Konto         Gegenkonto        BS BA Mwst%% We-Dat   Beleg ...
und dann in "B46ff" (WerteZeilen - gekürzte Darstellung)

Code: Alles auswählen

~C        2798                            1  50       04.01.01 1
~C                      6151              1  50 19.00 04.01.01 1
die Spalten(Datenfelder) haben ihre Überschriften. und es werden die FiBu-Konten-Nummern für "Soll" und "Haben in getrennten Spalten aufgeführt... analog zu den Spalten "Soll" und "Haben"

Wie du richtig beschrieben hast, ist es (immer wieder) schwierig, die Einträge SAUBER den Datenfeldern zuzuordnen. Noch dazu, da sich dieses Bild bei jeden SW-Update nicht/wenig/grundsätzlich ändert. Ich versuche mich gerade daran eine (Teil-)Automatik für die Erkennungslogik zu gestalten, denn die Aufgabe der SW-Erweiterung ist nun, diese Auswertungen z.B. über die monatlichen Dateien von 5 Jahren durchzuführen (mit all den immer wieder auftauchenden Strukturänderungen).
(Manchmal werden auch zufällig immer wieder mal Leerzeichen verschluckt oder zusätzlich eingefügt.
Erklären kann mir das keiner (von wegen: SW sollte doch konsistente Ergebnisse liefern)

Aus diesem Grund funktioniert dein Vorschlag ...
-nimm das 11. bis 14. Zeichen
-nimm die erste vierstellige Zahl nach "~C"
-nimm die ersten vier Zeichen nach dem 8. Leerzeichen
usw.
leider nicht bzw. macht häufig Probleme und erfordert häufige Anpassungsarbeiten.
(SO hatte ich es früher programmiert und nach der x-ten Änderung aufgegeben.)

DAMIT habe ich mich schon viel beschäftigt und meine(hoffe - bin zuversichtlich) das in der aktuellen Version realisieren zu können.

Gruß Stefan

PS: war dir das Verhalten der DIM-Anweisung in dieser Form bekannt? mir nicht! ... man lernt nie aus :-)!

Re: [GELÖST] Cursormanipulation per Basic

von Stephan » Di, 12.07.2016 09:01

War keine Verteidigung, sondern der Hinweis auf "viel Text".
Das ist aber nicht das was ich meinte, sondern ich meinte das Du inhaltlich schriebst, also im Wesentlichen das Du Dein VBA Programm für bewährt hälst, es deshalb nur auf StarBasic übersetzen willst und Du eigentlich keine neuen Lösungsweg beschreiten.

Das halte ich nämlich selbst für hoch vernünftig, weshalb Du es nicht vor mir verteidigen musst.

Mein Vorschlag eines anderen LÖsungswegs verstand sich deshalb gerade nicht als bessere Alternative, sondern nur als Alternative weil Deine Rohdaten für mich Unklarheiten enthalten.
Sorry, du kennst vmtl. die "doppelte Buchhaltung" nicht - B46 beschreibt den Vorgang im buchhalterischen HabenKto, B47..B52 die Gegenbuchungen im SollKonto.
Doch, ich bin studierter Chemiker und Betriebswirt, allerdings erklärt die doppelte Buchführung nicht die unterschiedlichen Einträge von B46 und B47 ff. was ich eigentlich glaubte verständlich erklärt zu haben.
Die Einträge sehen nämlich so aus (gekürzte Darstellung):

Code: Alles auswählen

~C        2798                            1  50       04.01.01 1 
~C                      6151              1  50 19.00 04.01.01 1


und die Frage dabei ist (vereinfacht gesagt):

Warum stehen 2798 und 6151 nicht genau übereinander?

Das kann nämlich nur eine Ungenauigkeit des Programms sein (ich nannte das "Schreibfehler") oder Ausdruck davon das die Datenfelder im Datensatz ganz anders abgegrenzt sind als es die rein menschliche Intuition auf den ersten Blick nahelegt.
_z.B._ weiß ich auch nicht ob diese Zahlen IMMER 4-stellig sein werden, obwohl das in den Beispielwerte so ist kann es in anderen Daten anders sein ... und so gibt es noch einige Möglichkeiten die einfach kurz geklärt werden müssen ehe man zum Programmieren schreitet.
Probleme macht aber z.B. dass in der "BS-Spalte" mal eine Zahl steht, dann wieder Text und dann wiederum überhaupt nichts (nur Leerzeichen).
Ja, eben und das mach deshalb Schwierigkeiten weil die Art wie die Datenfelder in einem Datensatz getrennt sind nicht klar benannt ist. Das ist keine große Sache muss aber der Klarheit wegen getan werden, denn z.B. die Logik/Kodierung nach der ich in obigen Beispielwerten die 2798 und die 6151 abtrennen muss kann ziemlich verschieden sein, beispielweise:

-nimm das 11. bis 14. Zeichen
-nimm die erste vierstellige Zahl nach "~C"
-nimm die ersten vier Zeichen nach dem 8. Leerzeichen
usw.




Gruß
Stephan

Re: [GELÖST] Cursormanipulation per Basic

von StePfl » Di, 12.07.2016 08:27

Balu hat geschrieben: Ich meinerseits hätte ja schon interessa daran gehabt die .lis zu knacken .... bis das sie vielleicht doch noch kommt.
Nein - sie kommt nicht mehr: EINE Lis zu knacken ist einfach .... VIELE (unterschiedliche) Lis deutlich schwieriger.
Stephan hat geschrieben:Deine Verteidigung ist ganz unnötig, ....
War keine Verteidigung, sondern der Hinweis auf "viel Text". Das mag ich (beim Querlesen) oft selber nicht - dafür der Hinweis.
Stephan hat geschrieben:

Code: Alles auswählen

k = oCell
und k in Folge statt oCell zu benutzen. Das ist aber eine Lösung auf die Du selbst auch gekommen wärst (und zwart mutmaßlich schneller als ich) ... jedoch keine LÖsung die Klarheit über die eigentliche Ursache des Problems gibt, ich weiß also weiterhin auch nicht zu sagen was da schiefläuft bzw. lief.
STIMMT - diesen Ansatz hatte ich auch (eher zufällig) gefunden (siehe in "locStrgRight": "hlp2 = oCell" : Anhang in Post viewtopic.php?f=18&t=67253&start=45#p264281)

"Mikeleb" hat mich durch seinen Hinweis auf eine Idee der vermutlichen Ursache gebracht, die ich durch folgenden Code versucht habe nachzubilden:

Code: Alles auswählen

Sub TestDim(optional hlp1)
	dim hlp, hlp2
	hlp = 5
	hlp1 = 6

	if hlp > 5 then
		redim hlp1
	endif
	hlp2 = hlp1 	' nach "Beobachter" erhält "hlp2" den Wert von "hlp1"

	if hlp > 5 then
		dim Hlp1
	endif
	hlp2 = hlp1	' Fehlermeldung: "Variable nicht definiert"
end sub
Ursache war ein Denkfehler von mir: Ich dachte, dass - falls hlp1 NICHT übergeben wird - hlp1 nicht dimensioniert wäre und somit von mir definiert werden müsse - deshalb die DIM-Anweisung innerhalb von "isMissing".

Das Problem ist, dass scheinbar eine "Dim-Anweisung" auch dann ausgeführt wird, wenn sie innerhalb eines "if-Bereichs" steht, der aufgrund der Bedingung nicht ausgeführt wird. Eine "redim-Anweisung" dagegen hat keine Auswirkung. Vielleicht ist das für Andere hilfreich.
Stephan hat geschrieben:auch ich würde einen bewährten VBA-Code nicht grundlos ändern ...aber kommt man schneller zum Ziel wenn man VBA Code nicht 1:1 nach StarBasic umschreibt sondern eher nur 'sinngemäß'...
Genau auf diese Weise bin ich vorgegangen: ich hatte den "Lösungsweg" im Rahmen meines vorhandenen Wissens in StarBasic neu geschrieben - und das selbe tue ich gerade auch wieder .... sozusagen jeweils ein Upgrade.
Da die Ausgangsdaten per Programm erzeugt werden ist nämlich sowas wie ich es bezüglich der Zellen B46 bis B52 beschrieben hatte ganz untypisch...
Sorry, du kennst vmtl. die "doppelte Buchhaltung" nicht - B46 beschreibt den Vorgang im buchhalterischen HabenKto, B47..B52 die Gegenbuchungen im SollKonto. Nach jeder "Buchungszeile" müssen die "Soll-" und "Haben"Seite ausgeglichen sein. Probleme macht aber z.B. dass in der "BS-Spalte" mal eine Zahl steht, dann wieder Text und dann wiederum überhaupt nichts (nur Leerzeichen).

ABER - auch Das habe ich inzwischen ganz gut im Griff.

Gruß
StePfl

Re: [GELÖST] Cursormanipulation per Basic

von Stephan » Mo, 11.07.2016 09:34

==== schon wieder ein langer Exkurs zur Situation ;-) ======= [...]
Deine Verteidigung ist ganz unnötig, denn ich habe überhaupt nichts an Deiner Programmierlösung im Grundsätzlichen zu kritisieren.

Da ich beruflich den überwiegenden Teil meines Geldes damit verdiene VBA nach StarBasic umzuschreiben, ist mein allgemeiner Rat:
ja, auch ich würde einen bewährten VBA-Code nicht grundlos ändern (insofern handelst Du völlig richtig) manchmal aber kommt man schneller zum Ziel wenn man VBA Code nicht 1:1 nach StarBasic umschreibt sondern eher nur 'sinngemäß', weil bestimmte Dinge in VBA und StarBasic zwar prinzipiell gleich zu lösen sind, aber das häufig nicht der optimale Weg ist, weil die Erfahrung lehrt das bestimmte WEge zu bevorzugen sind (ich nannte das an anderer Stelle 'best practice' und die können im Detail in VBA und StarBasic unterschiedlich sein.

Bitte versuche doch aber zielgerichtet zu diskutieren, denn sonst kommen wir nicht voran.
Das ich überhaupt einen neuen Weg vorgeschlagen hatte hatte z.B. maßgeblich den Grund das mir nicht klar ist warum manche Daten in der geposteten Beispieltabelle 'anders' strukturiert sind als Andere. Da die Ausgangsdaten per Programm erzeugt werden ist nämlich sowas wie ich es bezüglich der Zellen B46 bis B52 beschrieben hatte ganz untypisch, denn ein Programm wir solche Ausgaben per Schleife machen, also immer denselben Code durchlaufen, und im Ergebnis ist dann entweder alles 'falsch' oder alles 'richtig'.

Versuche auch die 'Grenzen' eines Forums zu sehen, denn eine Frage wie:
... bin aber gleich auf ein neues Problem bei der Verwendung von "isMissing" gestoßen:
Ich möchte meine Routinen so aufbauen, dass ich wahlweise eine BezugsZelle übergeben kann, oder - falls nicht - die "aktuelle Zelle" verwendet wird. Wenn ich das ÜbergabeArgument als "optional" deklariere verliert komischer Weise das übergebene Object seine Deklaration nach der Verwendung von "isMissing" (Vor "isMissing" ist das nicht so .... ). Bei jeder Verwendung von dem Object taucht die Fehlermeldung "BASIC-Laufzeitfehler. Variable nicht definiert" auf. Kennt jemand dieses Verhalten?
ist zwar natürlich nicht falsch, motiviert doch aber niemand zum antworten weil jeder sieht das ist quasi 'klassisches' Debugging, ist Arbeit die Du selbst tun musst, weil Du sie besser tun kannst als wir, denn Du kennst Dein Programm, bist eingearbeitet. Ja, Debugging ist langweilig, aber das ist es auch für uns.

Eine Frage wie "Kennt jemand dieses Verhalten?" ist dann prima wenn Du wirklich nur die Antwort von demjenigen erwartest der genau das gleiche Problem hatte, nicht jedoch solltest Du systematische Antworten erwarten.

Ich habe jetzt mal den Code debugt und komme darauf das es hilft an den Anfang der Funktion "locStrgRigth" zu schreiben:

Code: Alles auswählen

k = oCell
und k in Folge statt oCell zu benutzen. Das ist aber eine Lösung auf die Du selbst auch gekommen wärst (und zwart mutmaßlich schneller als ich) und es ist nur eine Lösung die funktioniert, jedoch keine LÖsung die Klarheit über die eigentliche Ursache des Problems gibt, ich weiß also weiterhin auch nicht zu sagen was da schiefläuft bzw. lief.



Gruß
Stephan

Re: [GELÖST] Cursormanipulation per Basic

von balu » So, 10.07.2016 20:23

Hallo StePfl,
die diversen hlp-Variablen dienen mir hauptsächlich dazu, im im Einzelschrittmodus im Beobachtungsfenster die jeweiligen Werte ansehen zu können
Ja okay. Jetzt habe ich es auch kapiert.

ich bin sicherlich kein so guter Programmierer wie du und sicherlich bei weitem nicht so methodisch und ...
Ich und guter Programmierer? Da muss ich lachen. :lol:
Die richtgig guten sind z.B. Stephan und Karolus.

Aber Methode kann man lernen, auch wenn es anfangs etwas dauert und disziplin fordert.


Leider bekomme ich aber von dir fast nur Rückmeldungen, wie unmöglich/unlogisch/unsauber meine Programme sind.
Stimmt wohl, aber auch scheinbar "unwichtige" Fehler oder Probleme können sich an anderer Stelle negativ bemerkbar machen und sehr oft dort wo man nicht mit rechnet. Und davon kann ich so manches Lied singen. Und ohne die Hilfe des Forums wäre ich nie und nimmer von alleine darauf gekommen. Nur weil ich relativ viele Beiträge geschrieben habe, heißt das nicht das ich alles kann.

Ich meinerseits hätte ja schon interessa daran gehabt die .lis zu knacken, da sie aber nicht separat kam, hatte ich zumindest versucht Fehler oder dergleichen aufzuzeigen und anzusprechen um so die Zeit "einigermaßen" auszunutzen bis das sie vielleicht doch noch kommt.

Übrigens: ich habe schon einige deiner Beiträge sehr geschätz und daran viel gelernt - Danke dafür
Freut mich zu hören. Danke :)



Gruß
balu

Re: [GELÖST] Cursormanipulation per Basic

von StePfl » So, 10.07.2016 19:44

mikeleb hat geschrieben:Hallo,

vielleicht habe ich es nur überlesen: Welches Programm liefert dir eigentlich diese .lis-Dateien?
Ist es richtig, dass diese Dateien die Informationen per Zeichenzahl gruppieren, also eine Buchungszeile (außen den Steuerzeichen ~C ~E usw.)
- ab dem 9. Zeichen das Konto
- ab dem 23. Zeichen das Gegenkonto ...
Es handelt sich um Ausgaben eines Hausverwaltungsprogramm (Nemetschek: Buchungsjournal, SummenSaldenListe, KontenListen) (für mehrere Anwesen, über mehrere Abrechnungszeiträume). Die beauftragte Hausverwaltung führt die Buchhaltung; ich "darf" für die Eigentümergemeinschaften zusätzlich Auswertungen/Berichte durchführen (z.B. Kostenzuordnungen der einzelnen Einnahmen/Ausgaben zu den Eigentümern) - Auswertungen, die in dem GrundProgramm nicht möglich sind. Außerdem soll es eine Rückwärtskontrolle zu den Buchungen liefern.

Nemetschek liefert regelmäßig WartungsUpdates, in denen leider häufig auch die Druckmasken verändert werden - was meine Nachbearbeitung erheblich erschwert. (neue Spaltenbezeichnungen, Austausch der Spalten, Verschiebungen der Kopfdaten zu den Spaltenwerten, veränderte Zahlenformaten uvm.) Es gäbe zwar auch einen "CSV-Export" - nur liefert der nachweißlich SO falsche Daten, dass damit nicht zu arbeiten ist.

@Balu:
die diversen hlp-Variablen dienen mir hauptsächlich dazu, im im Einzelschrittmodus im Beobachtungsfenster die jeweiligen Werte ansehen zu können, oder um einzelne Berechnungen so zu zerlegen, dass ich die einzelnen Parameter nachvollziehen kann.

Stimmt - ich habe die DimZeilen einfach als Grundsammlung von Variablen nur kopiert und - wenn alles läuft - dann werden die nicht benutzen Variablen wieder gelöscht. Bis jetzt bin ich aber noch nicht so weit.

Grundsätzlich: ich bin sicherlich kein so guter Programmierer wie du und sicherlich bei weitem nicht so methodisch und ...
Leider bekomme ich aber von dir fast nur Rückmeldungen, wie unmöglich/unlogisch/unsauber meine Programme sind. Das mag aus deiner (und vll auch der Anderen) so sein. Für mich geht es aber primär darum, meine Aufgabe damit zu erledigen ... Dafür hatte ich hier meine Frage gestellt - und inzwischen auch (m)eine Lösung gefunden..

Vielleicht ist es wirklich besser, wenn wir diesen Diskurs beenden - deine Botschaft ist angekommen - ich mache DAS daraus, was mir möglich ist... Ich habe ehrlich gesagt auch keine Lust mehr, mich ständig so zurechtweisen zu lassen - selbst wenn deine Anregungen an vielen Stellen berechtig sind.

Gruß StePfl

Re: [GELÖST] Cursormanipulation per Basic

von balu » So, 10.07.2016 19:03

Oh man ohhh, StePfl!

Ich hatte dich darauf angesprochen ob die ganzen hlpx vom Typ Variant sein sollen oder was?
Und was machst Du?
Du deklarierst sie alle ausführlich als Variant.

Code: Alles auswählen

function locStrgRight(optional byval oCell as object) as object
    dim oDoc as object, oSheet as object, oRange as object, oCurs as object
    dim hlp as Variant, hlp1 as Variant, hlp2 as Variant, hlp3 as Variant, hlp4 as Variant, hlp5 as Variant
Das ist, um sehr deutlich zu sein, so ein absoluter Schwachsinn. Aber nicht nur das! Du deklarierst mehr als Du wirklich anwendest. Die deklaration geht von hlp bis hlp5, und das macht insgesamt 6 mal 'hlp'.
Anwenden tust Du aber nur hlp und hlp2.
Was soll das?
Du bist doch kein Eichhörnchen! Besser gesagt, StarBasic ist kein Eichhörnchen.

Wenn sie wirklich vom Typ Variant sein sollen, dann brauchst Du das nicht extra zu schreiben, denn das macht StarBasic automatisch von alleine.


Das ist aber nicht das einzige was mich da so aufregt. Da gibt es noch etwas was auch mit dem hlp zu tun hat.

Was für einen Sinn soll das ergeben, eine Variable vom Typ Object in eine Variable vom Typ Variant reinzupacken?

Code: Alles auswählen

    hlp2 = oCell
        hlp = TypeName(oCell)
        hlp = TypeName(hlp2)
 
Das war noch immer nicht die Spitze des Eisberges. Denn die kommt jetzt.

Code: Alles auswählen

    if hlp = "Error" then         
        oDoc = thisComponent
            hlp = oDoc.Title    ' Ergebnis anzeigen'
        oSheet=oDoc.CurrentController.ActiveSheet
            hlp = oSheet.absoluteName    ' Ergebnis anzeigen'
        oCell = oDoc.CurrentSelection
            hlp = oCell.absoluteName    ' Ergebnis anzeigen'
    elseif hlp <> "Object" then
        ' hier fehlt noch eine FehlerAbfangRoutine'
    else
        oSheet = oCell.getSpreadSheet
            hlp = oSheet.absoluteName    ' Ergebnis anzeigen'
    endif
Da wird ein und dieselbe Variable mit drei unterschiedlichen Dingen (oder wie auch immer) gefüttert.

Code: Alles auswählen

    hlp = oDoc.Title    ' Ergebnis anzeigen'
 
Hier bekommt hlp den String von oDoc.Title zugewiesen.

Code: Alles auswählen

    hlp = oSheet.absoluteName    ' Ergebnis anzeigen'
 
Und hier bekommt hlp den String von oSheet.absoluteName zugewiesen.
usw.
etc. ....

Und spätestens hier muss ich mal ernsthaft nachfragen. Für was steht hlp und Verwante?
Ich sehe nirgends in deinen Dateien das hlp ein Ausgabefenster oder ähnliches ist. Du Komentierst aber das etwas angezeigt werden soll.

Code: Alles auswählen

    hlp = oDoc.Title    ' Ergebnis anzeigen
Und wo bitte schön wird das angezeigt?


Aber warum hlp als Variant deklarieren, wenn doch wie zu sehen hlp einen String aufnehmen soll?
Also müsste die deklaration theoretisch beispielsweise wie folgt aussehen

Code: Alles auswählen

function locStrgRight(optional byval oCell as object) as object
    dim oDoc as object, oSheet as object, oRange as object, oCurs as object
    dim hlp as String, hlp2 as Variant

Und ganz ehrlich gesagt, wenn man alles sauber programmiert und alles Stück für Stück sauber aufbaut, dann kann man sehr gut auf option explicit verzichten.


Hab keinen Bock mehr, zumal ich deine Datei von gestern ja nicht mal ausführen kann.



Gruß
balu

Re: [GELÖST] Cursormanipulation per Basic

von mikeleb » So, 10.07.2016 17:58

Hallo,

vielleicht habe ich es nur überlesen: Welches Programm liefert dir eigentlich diese .lis-Dateien?
Ist es richtig, dass diese Dateien die Informationen per Zeichenzahl gruppieren, also eine Buchungszeile (außen den Steuerzeichen ~C ~E usw.)
- ab dem 9. Zeichen das Konto
- ab dem 23. Zeichen das Gegenkonto
- ab/bis dem 42. Zeichen BS
- ab dem 44. Zeichen oder bis zum 45. Zeichen BA
- ab dem 47. Zeichen den MwSt.-Satz
- ab dem 53. Zeichen das We-Dat (6-stellig)
- ab dem 62. Zeichen den Beleg
- ab dem 73. Zeichen den Buchungstext
- bis zum 115. Zeichen den Soll-Betrag ("bis" da rechtbündig)
- bis zum 132. Zeichen den Haben-Betrag
enthält?

Re: [GELÖST] Cursormanipulation per Basic

von StePfl » So, 10.07.2016 17:00

Hallo Mikeleb,

Warum ich dieseDim-Anweisung eingeführt hatte, weiß ich nicht mehr genau. Ich vermute, dass ich eine Fehlermeldung "Variable nicht definiert" fälschlicher Weise "oCell" zugeordnet hatte. In sofern hat Balu Recht mit seinen Forderungen: Wenn man weiß (sich sauber/detailliert informiert), was man tut und dies auch ordentlich/sauber ausführt (und dokumentiert), ist das Sehr von Vorteil :-)

Mich überrascht, dass die Dim-Anweisung innerhalb des "if isMissing"-Bereichs auch wirkt, obwohl dieser gar nicht ausgeführt (übersprungen) wird...
da hab ich wieder etwas dazugelernt ...

SO - mit "isMissing" - gefällt mir die Routine deutlich besser ...

Nochmal Danke und Gruß,
StePfl

Re: [GELÖST] Cursormanipulation per Basic

von mikeleb » So, 10.07.2016 16:33

Hallo,

ismissing() funktioniert korrekt. Der Fehler war die zusätzliche Dim-Anweisung für oCell.
So läuft die function mit und ohne Parameter:

Code: Alles auswählen

function locStrgRight(optional byval oCell as object) as object
	dim oDoc as object, oSheet as object, oRange as object, oCurs as object
	dim hlp as Variant
	
	if isMissing(oCell) then 
		oDoc = thisComponent
		oSheet=oDoc.CurrentController.ActiveSheet
		oCell = oDoc.CurrentSelection
	else 
		oSheet = oCell.getSpreadSheet
	
	endif

	oCurs = oSheet.createCursorByRange(oCell)
	oCurs.collapseToCurrentRegion()		' Ausweiten des "oCurs" auf den gesamten DatenBlock, in dem "oCell" liegt.
												
	' der ganz rechte ZellBereich ist die gesuchte Position
	locStrgRight = oSheet.getCellRangeByPosition(oCurs.RangeAddress.EndColumn,oCell.RangeAddress.StartRow,oCurs.RangeAddress.EndColumn,oCell.RangeAddress.EndRow)
	hlp = locStrgRight.AbsoluteName		'Kontrolle
	msgbox hlp
	
end function

Nach oben