Leere Zeile

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: Leere Zeile

Re: Leere Zeile

von Jörg » Sa, 06.02.2016 14:57

Hallo Leute,
bitte nich aufregen.
Mein fertiger Code sieht so aus:

Code: Alles auswählen

sub Datensatz_azh_Speichern
Dim array_1(10)
   		odoc = ThisComponent
    osheet = ThisComponent.Sheets.GetByName("Tabelle18")
	     myctrl = oDialog8.GetControl("ListBox2")  
      With oSheet 
         x = .Columns(0).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
  array_1(ta-1) = oDialog8.getControl("TextField" & ta).text
  
next ta

array_1 = Array(array_1())
 osheet.getCellRangeByPosition(1, iLetzteZeile-1, 11, iletzteZeile-1).setDataArray(array_1) 


oDialog8.endExecute()

End Sub	
So funktioniert es.

Gruß Jörg

Re: Leere Zeile

von Karolus » Sa, 06.02.2016 14:03

Hallo

Code: Alles auswählen

with sheet
x = .Columns("0:11")
...
wobei diese - extrem kreative - Syntax, noch vom BASIC-interpreter überboten wird, der diesen Quark stillschweigend ohne Fehlermeldung akzeptiert.

Re: Leere Zeile

von balu » Sa, 06.02.2016 13:23

Mahlzeit Jörg!

Oh man oh man! Du änderst an irgendwelchen Stellen etwas nach gut Dünken, aber probierst es nicht aus ob das auch so funktioniert.

Mir geht es jetzt erstmal speziell um das hier.

Code: Alles auswählen

With oSheet
     x = .Columns("0:11").queryEmptyCells()
     iLetzteZeile = x(x.Count-1).RangeAddress.StartRow +1
End With
Wer sagt das dies funktioniert?
Also von mir hast Du das bestimmt nicht!

Ich sage: Das funktioniert absolut nicht!

Du bekommst wohl eine Zahl für die erste freie Zelle nach der letzten benutzen Zeile (iLetzteZeile), aber sie ist NICHT aus dem Spaltenindexbereich 0 bis 11 (A bis L), sondern nur aus der Spalte 0 (A). Denn es wird immer lediglich nur eine Spalte genommen, auch wenn Du einen Bereich angibst. Und bei einem angegebenen Spaltenbereich wird nur die erst genannte genommen. Du kannst dann z.B. in der Spalte B soviel eingeben wie Du willst, sie wird nicht berücksichtigt, da nur die Spalte A ausgewertet wird.

Also ändere das auf nur eine Spalte.
Beispielsweise:

Code: Alles auswählen

     x = .Columns(0).queryEmptyCells()
Oder aber Du legst dir ein ganz dickes fettes Ei. Und wunderst dich hinterher warum auf einmal Daten fehlen.

Falls Du aber meinst das ich mit meiner Aussage falsch liege, dann beweise mir das ich unrecht habe.



Gruß
balu

Re: Leere Zeile

von Jörg » Sa, 06.02.2016 13:03

Hallo,
erst mal vielen Dank, für Eure rege Anteilnahme.
F3K Total hat geschrieben:Irgendwie hatte ich wohl "CopyRange" im Hinterkopf, dabei braucht man ja eine Zielzelle.
Auch wenn es jetzt unwahrscheinlich klingt.
Aber ich glaube das das auch mein Hänger war. Denn dazu braucht man ja eben nur die
Stephan hat geschrieben:Spalte-links-oben
Zeile-links-oben
Von daher kam ich gar nicht auf diese Idee:
Stephan hat geschrieben:osheet.getCellRangeByPosition(1,iLetzteZeile,11,iLetzteZeile).setDataArray(array_1())
Bei mir sieht es jetzt so aus und funktioniert so wie ich es mir vorgestellt habe.

Code: Alles auswählen

osheet.getCellRangeByPosition(1, iLetzteZeile-1, 11, iletzteZeile-1).setDataArray(array_1) 
Ich les mir aber alles noch mal in Ruhe durch.
Also nochmals vielen Dank für Eure Mitwirkung.
Schönes Wochenende!
Gruß Jörg

Re: Leere Zeile

von F3K Total » Sa, 06.02.2016 12:29

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

Re: Leere Zeile

von Stephan » Sa, 06.02.2016 12:24

...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

von Stephan » Sa, 06.02.2016 12:17

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:

Code: Alles auswählen

.getCellRangeByPosition("B" & iLetzteZeile)
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

von Karolus » Sa, 06.02.2016 12:15

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

von Jörg » Sa, 06.02.2016 12:05

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
Unbenannt1.PNG (8.98 KiB) 6110 mal betrachtet
Gruß Jörg

Re: Leere Zeile

von Stephan » Sa, 06.02.2016 12:01

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:

Code: Alles auswählen

.getCellRangeByPosition(1,0,11,0)

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:

Code: Alles auswählen

.getCellRangeByPosition(1,0,11,0)
das Gleiche wie:

Code: Alles auswählen

a = 0
.getCellRangeByPosition(1,a,11,a)
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

von F3K Total » Sa, 06.02.2016 11:01

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

von Jörg » Sa, 06.02.2016 10:42

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

von Karolus » Fr, 05.02.2016 20:40

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

von Jörg » Fr, 05.02.2016 15:02

Hallo,
bei dieser Zeile

Code: Alles auswählen

osheet.getCellRangeByPosition("B" & iLetzteZeile).setDataArray(array_1()
erhalte ich diese Fehlermeldung:
Unbenannt.PNG
Unbenannt.PNG (9.7 KiB) 6193 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

von Jörg » Do, 04.02.2016 13:46

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

Nach oben