BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das OpenOffice Forum zu erhalten!

DANKE >><< DANKE

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des OpenOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als OO-SUPPORTER gekennzeichnet. 🤗

Variable nicht definiert

Alles zur Programmierung im OpenOffice.org
craig
Beiträge: 318
Registriert: Sa 14. Mai 2016, 12:36

Re: Variable nicht definiert

Beitrag von craig » Mi 7. Dez 2016, 18:42

Hallo ulko,

ersteinmal folgendes und ich habe noch ein paar Verständnisprobleme.
ulko hat geschrieben: Aus "hh:mm:ss"
wird dabei leider "hhmmss" als zusammengesetzte hexagesimalzahl. Aus 59 +01 wird 0100.

Wenn 59+1 dezimal ist, ergibt dies dezimal 60. 59+1=60
60 dezimal ist in hexdezimal 3C
0100 wird hier vermutlich als Uhrzeit/ Zeit gerechnet, allerdings kann ich aus Deiner vorherigen Aussage nicht entnehmen, wie die Ergebnisse, bzw. Umwandlungen aussehen.
LO Hex Dez.JPG
LO Hex Dez.JPG (24.99 KiB) 5611 mal betrachtet
Beispiel:
10:15:59

Wenn plus eine Sekunde, dann:
10:16:00

Ein falsches Ergebnis würde jedoch vorliegen, wenn
folgendes Resultat angezeigt würde:
10:15:00

Es fehlt hier der Übertrag der überlaufenden 1, bzw. die Umstellung von 15 Minuten auf 16 Minuten.

Was passiert nun in der CSV-Datei, bzw. bei der Konvertierung?

GMX-Datei = 09:10:59
CSV-Datei = 91059 = Inhalt in Spalte D
Habe ich dies richtig verstanden?
════════════════════════════════════════════════════════════════
ulko hat geschrieben:Die Spalten E - H habe ich eingefügt um TIME mit der Funktion RECTS(), bzw LINKS() aufzuspalten.

Anstelle der Textfunktionen (Rechts, Links, etc), kannst Du aber auch das eingebauten Tool „Text in Spalten…“ verwenden.
Dieses kannst Du ggf. auch beim Import der CSV-Datei verwenden!
  1. Kopiere die Daten aus Spalte D in ein leeres Blatt.
  2. Markiere die Daten, bzw. die gesamte Spalte.
  3. Wähle Menü Daten → Text in Spalten…
  4. Wähle die Option „feste Breite“
  5. Im selben Fenster ganz unten findest Du eine Tabelle mit Deinen Daten.
  6. Hier kannst Du an den Stellen wo der Text/ die Zahlen getrennt werden sollen, mit der Maus Tabulatoren einfügen.
Siehe Abbildung:
LO Text in Spalten_03.JPG
LO Text in Spalten_03.JPG (34.14 KiB) 5611 mal betrachtet
ulko hat geschrieben:Die Zeitlüccken fangen aus welchen Gründen auch immer irgendwo an und sind unterschiedlich groß.

  1. Welche Zeitlücken?
  2. Wie sollen die Lücken gefüllt werden?
  3. Ist eine Berechnung erforderlich?
[/b]
ulko hat geschrieben: weil es kaum noch deutschsprachige Erlklärungen gab. Englisch habe ich leider nicht gelernt

Ich habe volles Verständnis dafür, dass nicht jeder der englischen Sprache mächtig ist.
Aber in unserer Zeit ist dieses mehr und mehr eine Grundvoraussetzung sich zu verständigen.
Anfängliche Versuche Anfang bis Mitte 1990, Basic in deutsch/ denglisch, bzw. der
Landessprache zu programmieren sind alle fehlgeschlagen.

═════════════════════════════════════════════════════════
In den Zelle E30 bis H30 stehen diese Werte:
09 39 48 939

Die Extrahierung der Stunden/ Minuten und Sekunden ist mir klar, aber
warum steht in Zelle H30 die ZUsammensetzung Stunde und Minute?


Gruß

Craig
Gruß

Craig

Nie die Sicherungskopie vergessen!

═══════════════════════════════════════
WIN 10 Pro 64-Bit • AOO 4.1.8 • LO 7.4.5.1 (x64)

Ulko38
Beiträge: 13
Registriert: Do 26. Nov 2015, 09:03

Re: Variable nicht definiert

Beitrag von Ulko38 » Fr 9. Dez 2016, 10:12

Guten Morgen Craig,

Genau das -->

Was passiert nun in der CSV-Datei, bzw. bei der Konvertierung?
GMX-Datei = 09:10:59
CSV-Datei = 91059 = Inhalt in Spalte D

passiert. Oo behandelt dies aber als Dez.- Zahl. Um heagesimal zurechnen hab ich bisher nichts gefunden
In der Dokumentation " Startseite | Inhalt
StarBasic / OpenOffice.org Basic FAQ" von Dannenhöfer" habe ich zwischenzeitlich eine gute
Aufgliederung mit Beispielen (die ich nachvollziehen kann) gefunden. will mal sehen ob die für mich brauchbar ist.
________________________________________
Welche Zeitlücken?

gelegendlich wird die Zeit "einfach" nicht eingetragen. Mal 3-10 Zeilen. Manchmal auch über 100.
HOLUX, mein Geo-Tacker ist in die "Tage" gekommen. Die Koomot-App ist zwar als Fahrradnavi super, hat aber auch Macken.
________________________________________

Wie sollen die Lücken gefüllt werden?
und Ist eine Berechnung erforderlich?
_______________________________________
Kleine Lücken ? -da ist es egal - Große Lücken bemerke ich nur, wenn die Foto's nicht zugeaordnet werden.
Berechnung: Ja ! Zeitdifferenz / Anzahl der fehlenden Zeilen.
Seit dem ich gemerkt hatte, das Komoot des öffteren spinnt,
habe och mir die Tour sofort angesehen und markante Bilder von Hand kodiert.
Die Zeit der Aufnahme habe ich dann schon mal an der "Stelle" in die Tour eingetragen.
In der Hoffnung ich schaffe die Nachbearbeitung. Auf Koomot.de oder meinwomo.net kannst du solche Touren sehen.
_______________________________________
Tool „Text in Spalten…“ verwenden.

super. Werde ich probieren. Dienstag fliegen wir zur Tochter, Da hab ich ja Zeit genug.
_______________________________________
Die Extrahierung der Stunden/ Minuten und Sekunden ist mir klar, aber
warum steht in Zelle H30 die ZUsammensetzung Stunde und Minute?
_______________________________________
Die Spalte ist nur ein "Krückstock" für mich, damit ich weiß wo die Stunde herkommt.

Danke und Grüße ulko
PS.: bin 10.01. kann ich nur lesen nichts probieren.
Wie ich gerade shen gibt es noch mehr Intterresierte: 3x D. runtergeladen.

Ulko38
Beiträge: 13
Registriert: Do 26. Nov 2015, 09:03

Re: Variable nicht definiert

Beitrag von Ulko38 » Fr 9. Dez 2016, 16:46

Hi Craig

Text in Spalt ist ja ne feine Sache. Beim zweiten Anlauf hatte ich dass, was ich vorher umStändlich ermittelt hatte.
Wegen Zeiten vor 10 musste ich Die Spalte mit führenden Nullen formatieren.
Grüße ulko

craig
Beiträge: 318
Registriert: Sa 14. Mai 2016, 12:36

Re: Variable nicht definiert

Beitrag von craig » Fr 9. Dez 2016, 21:35

Hallo ulko,

es freut mich, dass Du mit dem Tipp „Text in Spalten“, zumindest eine Teilerfolg erzielt hast.
Meinst Du hexadezimal oder Hexagesimal?
Im Fall des Letzteren, geht es doch schlicht um die Zeitberechnung.
https://de.wikipedia.org/wiki/Sexagesimalsystem

Ich habe dir einiges mitzuteilen, Du musst aber kein schlechtes Gewissen haben,
dass ich soviel Zeit darauf verwendet habe. :D
Das Thema interessiert mich sehr und ich glaube die Wurzel Deines Problems erkannt zu haben.
ulko hat geschrieben:Was passiert nun in der CSV-Datei, bzw. bei der Konvertierung?
GMX-Datei = 09:10:59
CSV-Datei = 91059 = Inhalt in Spalte D
passiert. Oo behandelt dies aber als Dez.- Zahl
Nachfolgend beschreibt ich meine Experimente und ich denke nicht das OO
die Ursache für die Konvertierungs-Probleme ist :!:

Im eigentlichen Sinn ist es auch kein Fehler, denn es gibt verschiedene CSV-Dateiformate,
bzw. bei der Konvertierung von einer GPX-Datei in eine CSV-Datei muss der richtige
Dateifilter eingestellt werden.

Allerdings bietet nicht jedes Programm eine größere Auswahl an Dateifiltern an.
Schaue mal in Deinem Programm unter "Datei → Speicher unter...",
welche Filter Dir dort angeboten werden.
Weiteres in meiner Writer-Datei weiter unten.

Um dies Thema abzurunden, noch dieses:
Nachfolgende Datei enthält eine Umrechnungstabelle von Zahlensystemen, mit Erläuterungen zu den einzelnen Funktionen.
Auf dem zweiten Tabellenblatt ist eine Anleitung, wie man unter Windows den Taschenrechner aufruft und mit diesem Zahlensysteme umrechnen kann.
Umrechnung des Zahlensystems.ods
(67.78 KiB) 232-mal heruntergeladen
═════════════════════════════════════════════════════════════════════
Jetzt wird es ein wenig spannend.
In der Writer-Datei habe ich ein Experiment zu GPX und CSV beschrieben.
Zu diesem Experiment gehört auch die nachfolgenden ZIP-Datei,
in der sich eine GPX- und eine CSV-Datei befindet.
Ich habe die Datei gezippt, weil sich hier im Forum nicht alle Dateitypen hochladen lassen.
ulko.zip
Die Datei in einen Ordner kopieren
und entpacken
(2.59 KiB) 216-mal heruntergeladen
Wie Du in der Writer-Datei gelesen hast, habe ich auch beschrieben, wie
Du die CSV-Datei am besten mit Calc öffnen kannst.

Nun habe ich schon ein wenig Vorarbeit geleistet und Dir die CSV-Datei in eine CALC-Tabellen eingefügt.
Diese CALC-Datei ist das Ergebnis des Experiments:
Resultat Bruderholz.ods
(53.52 KiB) 227-mal heruntergeladen
Das erste Blatt enthält die Daten, so wie sie aus der CSV-Datei importiert wurden.
Beachte hierbei die Spalte D mit den Zeiten.
Hier besteht ein Problem, denn die Zeiten werden nicht als Zeit dargestellt,
sondern als reiner Text. Hier muss eine Umwandlung erfolgen!

Jetzt könnte man meinen, es reicht aus, einfach unter
Menü Format → Zellen, im Register Zahlen, die scheinbaren Zeitwerte ins Zeitformat zu konvertieren.
Dieses geht nicht, weil sich in jeder „Zeitzelle“ vor den Ziffern ein Hochkomma befindet, dass
CALC nicht automatisch entfernen kann. Es bedarf hier eines Tricks.
Beispiel (beachte das Hochkomma vor 07):
Statt: 08:32:40
steht dort: '07:32:40

Beschreibung zum Entfernen des Hochkommas siehe hier:
http://www.ooowiki.de/ZahlenFormatieren ... uerzeichen

Die Lösung ist nach der Beschreibung das Suchen&Ersetzen mittels regulärem Ausdruck
Dazu am Besten die betroffene Spalte markieren und im „Suchen&Ersetzen Fenster“ einen
Haken bei nur in Selektion setzen. Sonst alles wie in der Beschreibung.

Das Ergebnis einer solchen Suche ist auf dem zweiten Tabellenblatt zu sehen.
Nach dem Suchen&Ersetzen werden die Ziffern automatisch rechtsbündig gesetzt.
Unterschiede sind auch in der Zellformatierung zu sehen.
Dazu im ersten Tabellenblatt eine Zelle in Spalte D, z.B. D2 markieren, dann
Tastenkombination STRG+1
Im Fenster das Register Zahlen auswählen.
Es wird das Format ZAHLEN markiert

Das Gleiche im zweiten Tabellenblatt wiederholen.
Es wird das Format ZEIT markiert
Informationen zur Zeitberechnung in einer Tabellenkalkulation.
http://www.ooowiki.de/CalcFunktionenDat ... dZeit.html
ulko hat geschrieben: gelegendlich wird die Zeit "einfach" nicht eingetragen. Mal 3-10 Zeilen. Manchmal auch über 100.

Dieses muss nicht zwingend an den Geräten liegen! Das kann ebenfalls ein Konvertierungsfehler sein. Man müsste eine Sicherungskopie der dazugehörigen GPX-Datei mit einem Texteditor öffnen und gezielt nach den Stellen suchen, ob dort der TIME-Tag fehlt, oder leer ist.

TIME-Tag?
Der sieht in der Datei so aus:

<trkpt lat="47.547855" lon="7.589664">
<ele>0.000000</ele>
<name>p #1</name>
<time>60056-05-28T03:36:54Z</time>
<speed>0.000000</speed>
<course>0.000000</course>
</trkpt>

Ich würde in der Textdatei nach dem Wert der betreffenden Longitude oder Latitude suchen, besser nach beidem, um herauszufinden, ob <time>...</time> leer ist oder nicht vorhanden ist.
Wenn Time Daten enthält, dann liegt ein Konvertierungsfehler des Programms vor oder Du musst einen anderen CVS-Dateifilter ausprobieren.
ulko hat geschrieben: Seit dem ich gemerkt hatte, das Komoot des öfteren spinnt,
habe och mir die Tour sofort angesehen und markante Bilder von Hand kodiert.

Wenn die Daten auf eine Speicherkarte geschrieben werden, dann prüfe mal die Einsteckbuchse/ den Slot, ob sich dort ggf. Staub angesammelt hat.
ulko hat geschrieben: Auf Koomot.de oder meinwomo.net kannst du solche Touren sehen.

Habe dort nichts gefunden oder man muss sich er registrieren.
ulko hat geschrieben: Dienstag fliegen wir zur Tochter, Da hab ich ja Zeit genug.
bin 10.01. kann ich nur lesen nichts probieren.

Ich wünsche ich Dir viel Urlaubsvergnügen.
Dir und den Deinen ein frohes Fest und eine gute Rutsch ins neue Jahr.


Viel Erfolg und hoffentlich habe ich alles verständlich beschrieben.

Gruß

Craig
Gruß

Craig

Nie die Sicherungskopie vergessen!

═══════════════════════════════════════
WIN 10 Pro 64-Bit • AOO 4.1.8 • LO 7.4.5.1 (x64)

Ulko38
Beiträge: 13
Registriert: Do 26. Nov 2015, 09:03

Re: Variable nicht definiert

Beitrag von Ulko38 » Sa 10. Dez 2016, 11:16

Hi Craig,
Danke für die Grüße zum Fest und zum Neuen Jahr. Mit der kopieren Datei werde ich diese mit nach Italien nehmen.
___________________________________
Meinst Du hexadezimal oder Hexagesimal?
Im Fall des Letzteren, geht es doch schlicht um die Zeitberechnung.
Ich meine natürlich hexagesimal. Vertue mich da schon mal.
__________________________________
Deine umfangreiche Recherche und Gedanken zu dem Thema habe ich schon abgespeichert und werde
mir diese nächste Woche zu Gemüte führen.

Möchte aber mein Problem noch einmal aus Sicht meines Bedarf's beschreiben.
1. Ich konfertiere mit dem "Routerconverter.exe (64) von .gpx ( hh:mm:ss) nach .csv (hhmmss). --------> gelöst
2. hhmmss-Spalte aufteilen in hh mm ss. ---------> gelöst, dank deines Hinweises.
3. die fehlenden oder fehlerhaften TIME-Zeiten von ss bginnend durch ss + X verändern. Dabei wird eine Schleife benutzt.
If ss > 59 then ........
Gleiches mit mm. ----------> teilweise gelöst.
4. ss mm hh wieder in eine Spalte als hhmmss zusammen führen und diese Spalte nach .csv zurückkopieren.
5. .csv mit Routekonverter zur Kontrolle öffnen. Dieser zeigt hh:mm:ss auch hier an. Ist alles Ok, als .gps Speichern.

ich kann hier ja leider keinen Link zu z.B. Koomot reinsetzen. Wußte nicht, das dort nichts zu sehen ist.
Wir "lesen + schreiben" dann im Januar weiter.
Danke für die Wünsche und Grüße zum Fest und Jahreswechsel. Werde diese weitergeben.
Gleiches von mir für dich und die Deinen.

Grüße ulko
PS.: (53.52 KiB) 3-mal heruntergeladen ??

craig
Beiträge: 318
Registriert: Sa 14. Mai 2016, 12:36

Re: Variable nicht definiert

Beitrag von craig » Mo 12. Dez 2016, 19:45

Hallo ulko,

wollte mich kurz vor Deinem Urlaub nochmal melden.

Habe Deine Testdatei umgearbeitet.
Auf dem ersten Tabellenblatt "Tabelle1" sind nur Formeln eingearbeitet. Beschreibung in der Datei.

Auf dem zweiten Tabellenblatt "Tabelle1_2" sind Formeln und Dein Makro enthalten.
Die Stunden/ Minute und Sekunden in den Spalte E/F und G werden per Formel aus der Spalte D extrahiert.
Jetzt fehlt noch die Differenzberechnung, bzw. die Interpolation der fehlenden Daten auf Basis der Angaben in Spalte D.
20161212_Testdatei_Datum Umrechnung Text Zeit.ods
(29.34 KiB) 229-mal heruntergeladen
Habe Dein Makro mal über diese Datei laufen lassen, verstehe hier aber einiges nicht.

Es wird in der Spalte G für die Sekunden in jede zweite Zelle eine 8 geschrieben,
wenn sich in Spalte D kein Wert befindet.
a) Warum eine Addition mit 8?
b) Warum nur in jede zweite Zelle?

Ich würde die Berechnung wie folgt durchführen.
Nehmen wir an in in Zelle D3 steht das letzte Datum.
Dann folgen 3 leere Zellen, in D7 steht das nächste Datum
D3 = 10
D4 = 0
D5 = 0
D6 = 0
D7= 20

Dann:
D7-D3=10
10/(3+1)=2,5

Dieses ergibt die Datenreihe:
D3 = 10,0
D4 = 12,5
D5 = 15,0
D6 = 17,5
D7 = 20,0

Es stellt sich mir hier eine weitere Frage.
Nehmen wir an das letzte Datum/ die letzte Zeit steht in Zelle D50, aber es folgen weitere Längen- und
Breitengrade bis zum Bereich, sagen D60. In diesem Fall kann keine Differenzberechnung durchgeführt werden,
nach welchem Muster sollen die Zeiten dann berechnet/aufgefüllt werden?
z.B.
D51 = D50 + 1 Sekunde
D52 = D51 + 1 Sekunde
D53 = D52 + 1 Sekunde
usw.

Wäre all dies in Deinem Sinn, oder habe ich hier etwas falsch verstanden,
besonders auch in Bezug auf Deine Addition mit 8?
Gruß

Craig

Nie die Sicherungskopie vergessen!

═══════════════════════════════════════
WIN 10 Pro 64-Bit • AOO 4.1.8 • LO 7.4.5.1 (x64)

Ulko38
Beiträge: 13
Registriert: Do 26. Nov 2015, 09:03

Re: Variable nicht definiert

Beitrag von Ulko38 » Fr 23. Dez 2016, 15:54

Hi Craig,
Versuche mal aus dem Gedächtsnis heraus, was meine Versuche betreffen, zu antworten.
Die uminöse Sekundenangabe "8" ist eine im Entstadium der Routine einzugebende Zahl. Diese wird genau so ermittelt wie du in deinem Ansatz vorgeschlagen hast. Die 8 habe ich gewählt um in wenigen Rücksprüngen über die 59 zu kommen. Z.B. : Beginn 29, dann 37, 45, 53, 61. Jetzt muss if greifen: 61-60 = 1. Mit 1 geht wieder los mit +8. Die mm-spalte wird um 1 erhöht.
Die "feste Zahl" für Sek. hängt von der Zeitdiff. / Anzahl der Spalten ab, das Ergebnis wird aufgerundet.
Heute, am 23.12. Nochmals schöne gerusame Weihnachten und komm vgut ins neue Jahr.
Grüße ulko

craig
Beiträge: 318
Registriert: Sa 14. Mai 2016, 12:36

Re: Variable nicht definiert

Beitrag von craig » Mi 4. Jan 2017, 22:51

Hallo ulko,

ein frohes neues Jahr.

Ich habe da mal was programmiert. :D

Im Prinzip läuft das Programm rund, allerdings mit einem kleinen Wermutstropfen. :roll:
Wobei ich denke, dass dieser vernachlässigbar ist.
In der Testdatei habe ich alles beschrieben, sowohl auf den Tabellenblättern
als auch im Makro mit ausreichend Kommentaren zur Funktionsweise.

Das Problem, den Wermutstropfen habe ich auf dem zweiten Tabellenblatt
beschrieben und durch gelbe Zellen in Spalte D kenntlich gemacht.
Die Frage ist, ob ein solcher Fall überhaupt vorkommt? :?
Wenn nein, dann ist fast alles so wie Du es Dir vorgestellt hast.
Es fehlt nur noch eine kleine Routine, um das Blatt als CSV-Datei abzuspeichern.

Bin gespannt auf die Rückmeldung.
Testdatei_2017.ods
(41.07 KiB) 232-mal heruntergeladen
Gruß

Craig

Nie die Sicherungskopie vergessen!

═══════════════════════════════════════
WIN 10 Pro 64-Bit • AOO 4.1.8 • LO 7.4.5.1 (x64)

Ulko38
Beiträge: 13
Registriert: Do 26. Nov 2015, 09:03

Re: Variable nicht definiert

Beitrag von Ulko38 » Mo 16. Jan 2017, 16:19

Hi Craig
Ich melde mich zurück, versuche weiterzukommen, habe aber vor dem 2.Test den Fehler : Unerwartetes Symbol: Endsub
Wenn du da mal drüber schauen könntest. Ich bin scheinbar auf einem Auge blind.

Code: Alles auswählen

sub ZeitAendern

rem ----------------------------------------------------------------------
rem Variable deklarieren

dim oCalkDokument    as object
'dim oDispatcher 	 as object

dim oDoc, oTabBlatt, oRange, oCellCursor, oZelle, oView	as	object

REM Anfang der zu bearbeitenden Zeilen
Dim nZei		As	Integer

REM	Ende der Zeilenbearbeitung
Dim nLetzteZ	As	Integer
Dim nTo			As	Integer
REM	Dim nLetzteSp	As	Long
Dim c			As	Long
Dim	i			as	integer
Dim	x			as	integer
REM Dim	nAr			As	Long
Dim	nSek		As	Integer
Dim	nMinu		As	Integer
Dim nStun		As	Integer
	
Dim y			As	Integer
Dim nZellW		As	Integer
Dim nZellWsek	As	Integer
Dim nZellWminu	As	Integer
Dim nZellWStun	As	Integer

oCalkDokument   = ThisComponent.CurrentController.Frame
'odispatcher		= createUnoService("com.sun.star.frame.DispatchHelper"
i = 0
oCalkDokument = ThisComponent	
oTabBlatt = oCalkDokument.Sheets().getByindex(i)
' Name anzeigen
'MsgBox oTabBlatt.Name 
' in Anspruch genommene Zeilen u. Spalten anzeigen


oCellCursor = oTabBlatt.createCursor
oCellCursor.GotoEndOfUsedArea(False)

	
'	Den aktiven Cursor bekommt man mit

   
oView = oCalkDokument.CurrentController
oTabBlatt = oCalkDokument.Sheets().GetByindex(i)
nZei = 4
     
oZelle = oTabBlatt.getCellByPosition(0,nZei)
oView.Select(oZelle)
'	Diesem muß man dann die gewünschte Zelle zuweisen

nLetzteZ = 1180
nTo 	 = 1180
nStun = 0
nMinu = 0
nSek = 0

REM	nZe = 1

x = 4
y = 4
nZellW = 0
nZellWsek  = 0
nZellWminu = 0
nZellWStun = 0
' for nLetsteZ = 1 To ActiveSheet.UsedRange.Rows.Count
do until x = nLetzteZ
	for y = 4 to nTo
'		oZelle = oTabBlatt.GetCellbyPosition(x, i)
		oZelle = oTabBlatt.getCellByPosition(7,x)
		nsek = oZelle.Value
		oZelle = oTabBlatt.getCellByPosition(6,x)
		nZellWsek = oZelle.Value
		
		oZelle = oTabBlatt.getCellByPosition(5,x)
		nZellWminu = oZelle.Value
		nMinu = oZelle.Value
		oZelle = oTabBlatt.getCellByPosition(4,x)
		nStun = oZelle.Value
		nZellWStun = oZelle.Value
		
		if nZellWsek +nSek > 59 Then
			oZelle = oTabBlatt.getCellByPosition(6,x)
			nZellWsek = nZellWsek - 60
			nMinu = nMinu +1
			
			if nMinu +1  > 59 Then
				oZelle = oTabBlatt.getCellByPosition(4,x)
				oZelle.Value = nStun
				nMinu = nMinu - 60
				nZellWminu = nZellWminu -60
				nStun = nStun +1
				oZelle.Value = nZellWStun + nStun	
REM				nZellWminu = oZelle.Value
			Endif
			oZelle = oTabBlatt.getCellByPosition(5,x)					
			oZelle.Value = nZellWminu + nMinu
		endif
		x = x +1
'		msgbox nZellW
		oZelle = oTabBlatt.getCellByPosition(6,x)
    	oZelle.Value = nZellWsek + nSek
    
		nZei = nZei +1
		y = y +1
 		next y

  End Sub
_____________________________________________
Und dann noch die Frage, komme ich so mit meinen Grenzwerten aus dieser Schleife raus ?
Grüße ulko

craig
Beiträge: 318
Registriert: Sa 14. Mai 2016, 12:36

Re: Variable nicht definiert

Beitrag von craig » Mo 16. Jan 2017, 17:58

Hallo ulko,

hast Du eine schönen Urlaub gehabt?

------------------------------------------------------------------
Zu Deinem Code:

Den Code habe ich, bis auf die Integervariablen ausgebessert und Kommentare hinzugefügt.
Schalte zur Orientierung in der Basic-IDE die Zeilennumerierung ein:
Menü Ansicht → Zeilennummern

Code: Alles auswählen

sub ZeitAendern

rem ----------------------------------------------------------------------
rem Variable deklarieren

dim oCalkDokument    as object
'dim oDispatcher     as object
REM ═══════════════════════════════════════════════════════════════════════════════════
REM Deklaration-Fehler
' --->	dim oDoc, oTabBlatt, oRange, oCellCursor, oZelle, oView   as   object
REM NUR 	oView   as   object IST EIN OBJEKT
REM ALLES ANDEREN VARIABLEN SIND VOM DATENTYP: VARIANT
REM RICHTIGE DEKLARATION IST:
DIM oDoc, oTabBlatt as object, oRange as object, oCellCursor as object, oZelle as object, oView as object

REM Anfang der zu bearbeitenden Zeilen
Dim nZei As Integer

REM   Ende der Zeilenbearbeitung
REM SIEHE:
REM https://wiki.openoffice.org/wiki/DE/Makro_Basic_Tutorial
REM GRENZEN DES DATENTYPS INTEGER = Ganzzahlen BEACHTEN
REM Integer = -32768 bis 32767 					<-- maximal adressierbare Zeilen = 32768
REM Long = -2147483648 bis 2147483647			<-- maximal adressierbare Zeilen = 2147483647
REM Ein Tabellenblatt enthält 1048576 Zeilen, damit ist bei voller Ausschöpfung INTEGER zu klein!
REM Per Definition werden heute Spalten- und Zeilenzähler immer als LONG deklariert,
REM obwohl es nur 1024 Spalten in einem Tabelleblatt gibt.
Dim nLetzteZ As Integer
Dim nTo         As   Integer
REM   Dim nLetzteSp   As   Long
Dim c         As   Long
Dim   i         as   integer
Dim   x         as   integer
REM Dim   nAr         As   Long
Dim   nSek      As   Integer
Dim   nMinu      As   Integer
Dim nStun      As   Integer
   
Dim y         As   Integer
Dim nZellW      As   Integer
Dim nZellWsek   As   Integer
Dim nZellWminu   As   Integer
Dim nZellWStun   As   Integer

REM ═══════════════════════════════════════════════════════════════════════════════════
REM DIESE ZEILE IST ÜBERFLÜSSIG, WEIL oCalkDokument NACHFOLGEND 
REM ÜBERSCHRIEBEN WIRD MIT  -->		oCalkDokument = ThisComponent
oCalkDokument   = ThisComponent.CurrentController.Frame
REM ═══════════════════════════════════════════════════════════════════════════════════

'odispatcher      = createUnoService("com.sun.star.frame.DispatchHelper"
	oCalkDokument = ThisComponent   
		oTabBlatt = oCalkDokument.Sheets().getByindex(i)
i = 0
' Name anzeigen
'MsgBox oTabBlatt.Name
' in Anspruch genommene Zeilen u. Spalten anzeigen


oCellCursor = oTabBlatt.createCursor
oCellCursor.GotoEndOfUsedArea(False)
   
	' Den aktiven Cursor bekommt man mit  
	oView = oCalkDokument.CurrentController
	oTabBlatt = oCalkDokument.Sheets().GetByindex(i)

nZei = 4
     
	oZelle = oTabBlatt.getCellByPosition(0,nZei)

REM selektieren ist nicht notwendig
'oView.Select(oZelle)

'   Diesem muß man dann die gewünschte Zelle zuweisen
nLetzteZ = 1180
nTo     = 1180
nStun = 0
nMinu = 0
nSek = 0

REM   nZe = 1

x = 4
y = 4
nZellW = 0
nZellWsek  = 0
nZellWminu = 0
nZellWStun = 0
' for nLetzteZ = 1 To ActiveSheet.UsedRange.Rows.Count
do until x = nLetzteZ
   for y = 4 to nTo
'      oZelle = oTabBlatt.GetCellbyPosition(x, i)
      oZelle = oTabBlatt.getCellByPosition(7,x)
      nsek = oZelle.Value
      oZelle = oTabBlatt.getCellByPosition(6,x)
      nZellWsek = oZelle.Value
      
      oZelle = oTabBlatt.getCellByPosition(5,x)
      nZellWminu = oZelle.Value
      nMinu = oZelle.Value
      oZelle = oTabBlatt.getCellByPosition(4,x)
      nStun = oZelle.Value
      nZellWStun = oZelle.Value
      
      if nZellWsek +nSek > 59 Then
         oZelle = oTabBlatt.getCellByPosition(6,x)
         nZellWsek = nZellWsek - 60
         nMinu = nMinu +1
         
         if nMinu +1  > 59 Then
            oZelle = oTabBlatt.getCellByPosition(4,x)
            oZelle.Value = nStun
            nMinu = nMinu - 60
            nZellWminu = nZellWminu -60
            nStun = nStun +1
            oZelle.Value = nZellWStun + nStun   
REM            nZellWminu = oZelle.Value
         End If
         oZelle = oTabBlatt.getCellByPosition(5,x)               
         oZelle.Value = nZellWminu + nMinu
      End If
      x = x +1
'      msgbox nZellW
      oZelle = oTabBlatt.getCellByPosition(6,x)
       oZelle.Value = nZellWsek + nSek
   
      nZei = nZei +1
      y = y +1

REM ══════════════════════════════════════════════════════════
REM WENN XXX>=nLetzteZ, dann Programm beenden.
REM Vermeidet Endlosschleife      	
       XXX=XXX+1
       if XXX>nLetzteZ then exit sub
REM ══════════════════════════════════════════════════════════       
       next y

loop

End Sub
  1. Betrifft: Zeile 8-14
    Die Deklaration der Objektvariablen war falsch
  2. Betrifft: Zeile 19-43(?)
    Habe Kommentare zu den Integer-Variablen hinzugefügt.
    Die Datentypen müssen noch angepasst werden. (Long statt Integer)
  3. Betrifft: Zeile 45-52
    Folgende Codezeile ist überflüssig, siehe Kommentar:

    Code: Alles auswählen

     oCalkDokument   = ThisComponent.CurrentController.Frame
  4. Betrifft: Zeile 71-72
    Selektion ist überflüssig:

    Code: Alles auswählen

     oView.Select(oZelle)
  5. Betrifft: Zeile 118 und 121
    End If sind zwei Worte. Habe es an zwei Stellen ausgebessert.
  6. Betrifft: Zeile 90 und 138
    Es fehlte das LOOP für die DO-Anweisung
  7. Betrifft: Zeile 130 und 135
    Habe dort einen Zähler hinzugefügt, der bis nLetzteZ zählt.
    Sobald der Zählerstand größer ist, wird das Programm beendet und somit auch eine Endlosschleife vermieden.
War meine Datei, bzw. mein Code nicht das Richtige? :cry:
Gruß

Craig

Nie die Sicherungskopie vergessen!

═══════════════════════════════════════
WIN 10 Pro 64-Bit • AOO 4.1.8 • LO 7.4.5.1 (x64)

Antworten