Seite 1 von 2
Leere Zeile
Verfasst: Fr, 29.01.2016 12:23
von Jörg
Hallo Fachleute,
Code: Alles auswählen
With oSheet
x = .Columns("0:11").queryEmptyCells()
iLetzteZeile = x(x.Count-1).RangeAddress.StartRow +1
End With
mycell = oSheet.getCellRangeByName("A" & iLetzteZeile )
ListBox2 = myctrl.selecteditem
mycell.string = ListBox2
for ta = 1 to 11
osheet.getcellByPosition( ta, iLetzteZeile ).formulalocal = oDialog8.getControl("TextField" & ta).text
next ta
Zeile A1:L1 sind Spaltenüberschriften.
Der Wert aus Listbox2 wird wie gewünscht in Zelle A2 eingetragen.
Die Einträge aus den TextFields jedoch werden erst ab B3 erstellt, die Zeile B2:L2 bleibt leer.
Wäre dankbar für eine Idee, wo im Code der Fehler steckt.
Gruß Jörg
Re: Leere Zeile
Verfasst: Fr, 29.01.2016 12:38
von Jörg
Hallo, die nachfolgende Zeile
Code: Alles auswählen
osheet.getcellByPosition( ta, iLetzteZeile ).formulalocal = oDialog8.getControl("TextField" & ta).text
geändert in
Code: Alles auswählen
osheet.getcellByPosition( ta, iLetzteZeile - 1).formulalocal = oDialog8.getControl("TextField" & ta).text
so funktioniert es, aber warum??
Gruß Jörg
Re: Leere Zeile
Verfasst: Fr, 29.01.2016 14:01
von Karolus
Hallo
so funktioniert es, aber warum??
weil `i-1` eins weniger als `i` ist ...
oder anders formuliert:
.getCellRangeByName("A1") entspricht
.getCellByPosition(0,0)
_____
Der Informatiker steht auf dem Bahnsteig und zählt seine Koffer. 0 ... 1 ... 2 ?Scheisse einer zu wenig!
____
(Gelöst) Leere Zeile
Verfasst: Sa, 30.01.2016 10:10
von Jörg
Hallo,
ist ja auch logisch.
Der Groschen is kein Sturzbomber.
Re: Leere Zeile
Verfasst: Do, 04.02.2016 13:46
von Jörg
Hallo Fachleute,
nachfolgendes array möchte ich wie oben beschrieben einfügen.
Wenn ich eine konkrete Position Bsp. (1,4,11,4) angebe, gehts.
Die letzte Zeile wird auch ermittelt, siehe msgbox.
Aber was ich hier(Spalte B, iLetzteZeile) reinpacken soll ??? Hab schon alles mögliche probiert.
Code: Alles auswählen
sub haste
odoc = thiscomponent
osheet = odoc.sheets.getByName ("Tabelle18")
Dim array_1(10)
With oSheet
x = .Columns("0:11").queryEmptyCells()
iLetzteZeile = x(x.Count-1).RangeAddress.StartRow +1
End With
for ta = 1 to 11
array_1(ta-1) = oDialog8.getControl("TextField" & ta).text
next ta
array_1 = Array(array_1())
msgbox iLetzteZeile
osheet.getCellRangeByPosition(Spalte B, iLetzteZeile).setDataArray(array_1())
oDialog8.endexecute
end Sub
Gruß Jörg
Re: Leere Zeile
Verfasst: Fr, 05.02.2016 15:02
von Jörg
Hallo,
bei dieser Zeile
Code: Alles auswählen
osheet.getCellRangeByPosition("B" & iLetzteZeile).setDataArray(array_1()
erhalte ich diese Fehlermeldung:

- Unbenannt.PNG (9.7 KiB) 6332 mal betrachtet
Wenn ich das richtig verstehe, sind die Bereiche falsch.
Aber keine Ahnung, wo ich noch schrauben könnte.
Gruß Jörg
Re: Leere Zeile
Verfasst: Fr, 05.02.2016 20:40
von Karolus
Hallo
Du hattest das doch schonmal kapiert das .geCellRangeByPosition vier ganzzahlige Argumente benötigt, in der Reihenfolge:
index der linken Spalte,
index der oberen Zeile,
index der rechten Spalte,
index der unteren Zeile,
zb ...getCellRangeByPosition( 3 , 5 , 4 , 10 ) ==> Bereich D6:E11
benötigt, wieso zeigst du jetzt penetrant weiterhin Code, indem du
a) nur ein Argument übergibst,
das
b) auch offensichtlich keine Ganzzahl ist sondern Text.
Re: Leere Zeile
Verfasst: Sa, 06.02.2016 10:42
von Jörg
Hallo Karolus,
tut mir leid, wenn ich nerve.
Noch mal auf Anfang.
Dies ist mein ursprünglicher Code.
Code: Alles auswählen
sub Datensatz_azh_Speichern
Dim i as Integer
Dim aData()
Dim array_1(10)
'Listbox Kasse siehe Rechnungsnummer eintragen
odoc = ThisComponent
osheet = ThisComponent.Sheets.GetByName("Tabelle18")
'objZelle = osheet.getCellRangebyName("A2")
myctrl = oDialog8.GetControl("ListBox2")
With oSheet
x = .Columns("0:11").queryEmptyCells()
iLetzteZeile = x(x.Count-1).RangeAddress.StartRow +1
End With
mycell = oSheet.getCellRangeByName("A" & iLetzteZeile )
ListBox2 = myctrl.selecteditem
mycell.string = ListBox2
for ta = 1 to 11
osheet.getcellByPosition( ta, iLetzteZeile -1 ).formulalocal = oDialog8.getControl("TextField" & ta).text
next ta
oDialog8.endExecute()
End Sub
Aber mit
Code: Alles auswählen
for ta = 1 to 11
osheet.getcellByPosition( ta, iLetzteZeile -1 ).formulalocal = oDialog8.getControl("TextField" & ta).text
next ta
ist die Performance schlecht, da jede Zelle einzeln gefüllt wird.
Diese Problem will ich mit setdataarry lösen, was mit einer konkreten Adressierung
z.Bsp.
Code: Alles auswählen
osheet.getCellRangeByPosition(1,0,11,0).setDataArray(array_1())
ja auch klappt.
Aber ich benötige in der Adressierung die erste freie Zeile im Bereich Spalten "A:L"
Daher kann ich keinen festen Bereich mit den von Dir beschriebenen Argumenten angeben.
Hoffe, ich konnte mein Problem verständlicher erläutern.
Gruß Jörg
Re: Leere Zeile
Verfasst: Sa, 06.02.2016 11:01
von F3K Total
Det jeht nisch:
Code: Alles auswählen
osheet.getCellRangeByPosition("B" & iLetzteZeile).setDataArray(array_1()
...ByPosition...
vielleicht det:
Code: Alles auswählen
osheet.getCellRangeByNAME("B" & iLetzteZeile).setDataArray(array_1()
...ByNAME...
Gruß R
Re: Leere Zeile
Verfasst: Sa, 06.02.2016 12:01
von Stephan
tut mir leid, wenn ich nerve.
versuche doch bitte zu verstehen was der Code inhaltlich bedeutet und versuche nicht bestehenden Code aufgrund intuitiven Ratens zu ändern.
Aber ich benötige in der Adressierung die erste freie Zeile im Bereich Spalten "A:L"
dann schreibe das hin:
Code: Alles auswählen
osheet.getCellRangeByPosition(1,iLetzteZeile,11,iLetzteZeile).setDataArray(array_1())
vor allem aber verstehe was Du da tust und schreibe das nicht einfach ab weil ich es sage.
Karulus schrieb das bereits, aber nochmals etwas anders:
ein Ausdruck:
beschreibt einen Zellbereich durch Angabe der linken Oberen und der rechten unteren Ecke, welche jeweils durch ihre Spalten- und Zeilen-Nummer (Index) angegeben werden, also allgemein:
Code: Alles auswählen
.getCellRangeByPosition(Spalte-links-oben,Zeile-links-oben,Spalte-rechts-unten,Zeile-rechts-unten)
dabei müssen die 4 Angaben:
Spalte-links-oben
Zeile-links-oben
Spalte-rechts-unten
Zeile-rechts-unten
positive ganze Zahlen sein UND es ist natürlich völlig egal ob man die Zahlen direkt hinschreibt oder Variablen verwendet die die Zahlen enthalten, z.B. ist das:
das Gleiche wie:
und natürlich (sinngemäß) auch das Gleiche wie:
Code: Alles auswählen
x = .Columns("0:11").queryEmptyCells()
iLetzteZeile = x(x.Count-1).RangeAddress.StartRow +1
.getCellRangeByPosition(1,iLetzteZeile,11,iLetzteZeile)
"sinngemäß" weil hier iLetzteZeile einen variablen positiven, ganzzahligen Wert hat und nicht den festen Wert 0 wie in a=0
Gruß
Stephan
Re: Leere Zeile
Verfasst: Sa, 06.02.2016 12:05
von Jörg
Hallo,
ne das ist es nicht. Das hab ich schon probiert. Der Unterschied zwischen byPosition bzw. byName ist mir klar.
Gleichwohl hab ich es dennoch mal versucht mit folgendem Ergebnis

- Unbenannt1.PNG (8.98 KiB) 6249 mal betrachtet
Gruß Jörg
Re: Leere Zeile
Verfasst: Sa, 06.02.2016 12:15
von Karolus
F3K Total hat geschrieben:
vielleicht det:
Code: Alles auswählen
osheet.getCellRangeByNAME("B" & iLetzteZeile).setDataArray(array_1()
...ByNAME...
Gruß R
...bestimmt nicht, falls meine Annahmen über den konkreten Inhalt von
iLetzteZeile zutreffen.
nach dem bisherigen Informationen hat unser
array_1(--was übrigens ein bescheuerter Name ist--) die Dimension
1Zeile * 11Spalten, daher würde ich spontan plädieren für:
Code: Alles auswählen
osheet.getCellRangeByPosition(1, iLetzteZeile, 11, iletzteZeile).setDataArray(array_1)
Re: Leere Zeile
Verfasst: Sa, 06.02.2016 12:17
von Stephan
ne das ist es nicht
Stimmt.
(Die Aussagen von Rik sind zwar richtig, aber für Dein Problem irrelevant, vielleicht hätte ich das gleich hinschreiben sollen).
Das hab ich schon probiert. Der Unterschied zwischen byPosition bzw. byName ist mir klar.
Sorry, aber genau das kann doch garnicht stimmen, denn wäre Dir der UNterschied klar würdest Du garnicht versucht haben es so zu schreiben:
denn das ist (wegen des "B") unter allen Unständen falsch, worauf auch Karolus schon hinwies:
b) auch offensichtlich keine Ganzzahl ist sondern Text.
Tue doch bitte das was ich im meinem laaaaangen Post geschrieben habe
Gruß
Stephan
Re: Leere Zeile
Verfasst: Sa, 06.02.2016 12:24
von Stephan
...bestimmt nicht, falls meine Annahmen über den konkreten Inhalt von iLetzteZeile zutreffen
OK, OK ... meine Aussage das die Angaben von Rik richtig sind stimmt nicht vollständig (mir war das schon klar, ich war nur nicht aufmerksam genug beim Formulieren)
Gruß
Stephan
Re: Leere Zeile
Verfasst: Sa, 06.02.2016 12:29
von F3K Total
Karolus hat geschrieben:...bestimmt nicht, falls meine Annahmen über den konkreten Inhalt von iLetzteZeile zutreffen.
Karolus, da hast Du natürlich Recht, habe nur auf den Inhalt der Klammer geachtet, nicht drauf, das ein Array gesetzt werden muss, sorry mein Fehler. Irgendwie hatte ich wohl "CopyRange" im Hinterkopf, dabei braucht man ja eine Zielzelle.
Gruß R