einzelne Zellen in Liste schreiben
Moderator: Moderatoren
einzelne Zellen in Liste schreiben
Hallo zusammen,
brauche nochmal Eure Unterstützung bei meinem Projekt
habe im Tabellenkopf "Eingabezellen" und möchte diese auf Schaltflächendruck in die darunter befindliche Liste eintragen ( Beispieldatei anbei )
Mein Problem: Es kommen ja immer mehr Zellinhalte dazu, daher kann ich ja nicht sagen, Zelle u6 soll p14 werden - einmal würds ja stimmen, beim zweiten Mal müßte es dann ja p15 werden.
Bin mir sicher, so etwas ähnliches schon hier oder woanders in Open Office gesehen zu haben, find es leider nicht wieder
Danke für die Hilfe
Gruss Dirk
brauche nochmal Eure Unterstützung bei meinem Projekt
habe im Tabellenkopf "Eingabezellen" und möchte diese auf Schaltflächendruck in die darunter befindliche Liste eintragen ( Beispieldatei anbei )
Mein Problem: Es kommen ja immer mehr Zellinhalte dazu, daher kann ich ja nicht sagen, Zelle u6 soll p14 werden - einmal würds ja stimmen, beim zweiten Mal müßte es dann ja p15 werden.
Bin mir sicher, so etwas ähnliches schon hier oder woanders in Open Office gesehen zu haben, find es leider nicht wieder
Danke für die Hilfe
Gruss Dirk
Re: einzelne Zellen in Liste schreiben
Hi,
natürlich geht das, man muss per Makro leere Zellen suchen. Dazu kann man gut die Zelleneigenschaftverwenden.
Hier ein Beispiel, auf deine Datei gemünzt:
HTH R
natürlich geht das, man muss per Makro leere Zellen suchen. Dazu kann man gut die Zelleneigenschaft
Code: Alles auswählen
.Type = com.sun.star.table.CellContentType.EMPTY
Hier ein Beispiel, auf deine Datei gemünzt:
Code: Alles auswählen
Sub S_Find_next_empty_Row
oSheet = thisComponent.Sheets.getbyname("Tabelle1")
ocursor = oSheet.createCursor
oCursor.gotoendofusedArea(false)
nEndrow = oCursor.Rangeaddress.Endrow + 1
oRange = oSheet.getcellrangebyposition(5,12,5,nEndrow)'5 = Spalte F, 12 = beginnt in Zeile 13
for i = 0 to oRange.rows.count
oCell = oRange.getcellbyposition(0,i)
if oCell.Type = com.sun.star.table.CellContentType.EMPTY then
nRow = oCell.Celladdress.row
exit for
endif
next i
msgbox "Die nächste leere Zeile ist Zeile "+(nrow+1)
End Sub
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO
Re: einzelne Zellen in Liste schreiben
Hallo,
unser Stephan hatte mal eine kürzere Version zur Ermittelung der letzten benutzten Zeile innerhalb einer bestimmten Spalte veröffentlicht. Zu finden hier.
Der Vorteil dabei ist, das nur in der angegebenen Spalte gesucht wird. Was links oder rechts daneben ist, spielt keine Rolle.
Nachteil ist, man muss in diesem vorliegenden Fall darauf achten, dass die zu durchsuchende Spalte auch immer nahtlos mit Daten befüllt ist. Wenn beispielsweise nicht immer bei "Name I" ein Eintrag vorhanden ist, also vielleicht nur jedes dritte oder vierte mal einer ist, dann kann es zu komplikationen kommen.
Die Metode mit gotoendofusedArea ist vom gleichen Nachteil betroffen. Sie hat aber auch noch den Nachteil das sie länger ist, was manchmal störend wirken kann.
Egal welche Methode man anwendet, es muss, wie schon erwähnt, immer darauf geachtet werden, das die zu durchsuchende Spalte durchgehend immer mit daten befüllt ist. Und deshalb habe ich den Code von Stephan genommen, und auf die Spalte BB (Spaltenindex in Basic = 53) angesetzt.
Das ist der gesamte Code um die nächste freie (leere) Zeile sich anzeigen zu lassen.
Gruß
balu
unser Stephan hatte mal eine kürzere Version zur Ermittelung der letzten benutzten Zeile innerhalb einer bestimmten Spalte veröffentlicht. Zu finden hier.
Der Vorteil dabei ist, das nur in der angegebenen Spalte gesucht wird. Was links oder rechts daneben ist, spielt keine Rolle.
Nachteil ist, man muss in diesem vorliegenden Fall darauf achten, dass die zu durchsuchende Spalte auch immer nahtlos mit Daten befüllt ist. Wenn beispielsweise nicht immer bei "Name I" ein Eintrag vorhanden ist, also vielleicht nur jedes dritte oder vierte mal einer ist, dann kann es zu komplikationen kommen.
Die Metode mit gotoendofusedArea ist vom gleichen Nachteil betroffen. Sie hat aber auch noch den Nachteil das sie länger ist, was manchmal störend wirken kann.
Egal welche Methode man anwendet, es muss, wie schon erwähnt, immer darauf geachtet werden, das die zu durchsuchende Spalte durchgehend immer mit daten befüllt ist. Und deshalb habe ich den Code von Stephan genommen, und auf die Spalte BB (Spaltenindex in Basic = 53) angesetzt.
Code: Alles auswählen
Sub Naechste_Leere_Zeile_in_Spalte_BB
oSheet = thisComponent.Sheets.getbyname("Tabelle1")
With oSheet ' Letzte Zeile der Spalte BB ermitteln
x = .Columns(53).queryEmptyCells()
iLetzte = x(x.Count-1).RangeAddress.StartRow + 1
End With
print "Die nächste leere Zeile ist die " & iLetzte
End Sub
Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.
wehr rächtschraipfähler findet khan si behalden
wehr rächtschraipfähler findet khan si behalden
Re: einzelne Zellen in Liste schreiben
Hallo,
Ich danke Euch beiden,- auch die einzelnen Erklärungen helfen sehr weiter
Hätte aber noch eine Frage, kann ich denn nicht "sicherheitshalber" zwei Spalten abfragen, und wenn in einer von beiden etwas steht, nimm die nächste Zeile????
Danke erst einmal, denke das ich erstmal Spalte 54 (BB) abfrage, werde mich mal mit allen Codes beschäftigen (Erfahrungen machen).
Danke
Gruss Dirk
Ich danke Euch beiden,- auch die einzelnen Erklärungen helfen sehr weiter
Hätte aber noch eine Frage, kann ich denn nicht "sicherheitshalber" zwei Spalten abfragen, und wenn in einer von beiden etwas steht, nimm die nächste Zeile????
Danke erst einmal, denke das ich erstmal Spalte 54 (BB) abfrage, werde mich mal mit allen Codes beschäftigen (Erfahrungen machen).
Danke
Gruss Dirk
Re: einzelne Zellen in Liste schreiben
Hallo,
Vorteil: Du kannst dir aussuchen in welcher Spalte das Makro suchen soll, die allerdings mit den Pflichtfeld übereinstimmt. Es muss folglich nur eine Suchroutine für nur eine Spalte geschrieben werden.
Das musst Du dir unbedingt ganz dringend merken!
Gruß
balu
Kannst Du machen. Ich würde aber empfehlen, das Du beim ausfüllen der Datenfelder dafür sorgst das es so genannte *Pflichtfelder* gibt. Mit anderen Worten, wenn diese Pflichtfelder nicht ausgefüllt sind, werden erst gar keine Daten in die Liste eingetragen. Und erst wenn die Pflichtfelder ausgefüllt sind, werden die Daten übernommen.Hätte aber noch eine Frage, kann ich denn nicht "sicherheitshalber" zwei Spalten abfragen, und wenn in einer von beiden etwas steht, nimm die nächste Zeile?
Vorteil: Du kannst dir aussuchen in welcher Spalte das Makro suchen soll, die allerdings mit den Pflichtfeld übereinstimmt. Es muss folglich nur eine Suchroutine für nur eine Spalte geschrieben werden.
Ich hatte nicht umsonst das hier gesagt:denke das ich erstmal Spalte 54 (BB) abfrage
Denn die erste Spalte in Basic (also bei Makro Programmierung) ist nicht die 1, sondern die 0 (Null). Das gleiche gilt auch für die Zeilennummer, 0 ist die erste Zeile, und nicht die 1 denn das wäre schon die zweite Zeile.balu hat geschrieben: Spaltenindex in Basic = 53
Das musst Du dir unbedingt ganz dringend merken!
Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.
wehr rächtschraipfähler findet khan si behalden
wehr rächtschraipfähler findet khan si behalden
Re: einzelne Zellen in Liste schreiben
Hallo Balu,
Pflichtfelder ....., mhmmm, hört sich gut an, nur wie kann ich das realisieren????
per Gültigkeit ??? wie sag ichs bzw. calc dann Basic
Ah, ... Versuch
if variable NameVorname <>""
then durchlaufe makro
else msgbox "Fehler, Name muss unbedingt ausgefüllt werden"
End if
Ist der Ansatz richtig, oder "verrenn" ich mich grad????
Danke
Dirk
Pflichtfelder ....., mhmmm, hört sich gut an, nur wie kann ich das realisieren????
per Gültigkeit ??? wie sag ichs bzw. calc dann Basic
Ah, ... Versuch
if variable NameVorname <>""
then durchlaufe makro
else msgbox "Fehler, Name muss unbedingt ausgefüllt werden"
End if
Ist der Ansatz richtig, oder "verrenn" ich mich grad????
Danke
Dirk
Re: einzelne Zellen in Liste schreiben
Hallo Balu,
gute Sache, das
Anbei eine Variante, bei der die im Array c eingetragenen Spalten untersucht werden.
Gruß R
gute Sache, das
Code: Alles auswählen
.queryEmptyCells()
Code: Alles auswählen
Sub S_Find_next_empty_Row
c = array (5,15,53,91,129)'zu durchsuchende Spalten
oSheet = thisComponent.Sheets.getbyname("Tabelle1")
iLetzte = 1
for i = 0 to ubound(c)
With oSheet ' Letzte Zeile der Spalten 5,15,53,91,129 ermitteln
x = .Columns(c(i)).queryEmptyCells()
n = x(x.Count-1).RangeAddress.StartRow + 1
if n > iLetzte then iLetzte = n
End With
next i
print "Die nächste leere Zeile ist die " & iLetzte
End Sub
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO
Re: einzelne Zellen in Liste schreiben
Hallo R - F3K Total,
wow, so bin ich ja immer auf der sicheren Seite, vielen Dank
Das öffnet ja ungeahnte Möglichkeiten
Werde nun erstmal testen - vielen vielen Dank für Eure Hilfe
Gruss Dirk
wow, so bin ich ja immer auf der sicheren Seite, vielen Dank
Das öffnet ja ungeahnte Möglichkeiten
Werde nun erstmal testen - vielen vielen Dank für Eure Hilfe
Gruss Dirk
Re: einzelne Zellen in Liste schreiben
Hallo Dirk,
In der überarbeiteten Datei habe ich jetzt folgendes Makro reingepackt.
Du kannst dir ja jetzt selber mal Gedanken darum machen wie Du die ganzen eingegebenen Daten schon fein säuberlich eingetragen bekommst. Am besten überarbeitest Du dazu das Layout, denn das ist dir so nämlich hinderlich.
"Vor- und Nachname" sowie "PLZ / Ort" sind als Pflichtfelder Rot umrandet. Der Button ist funktionstüchtig.
Gruß
balu
Halb Richtig. Da ich ja von 2 Pflichtfeldern sprach, muss die IF mit AND erweitert werden, damit zwei Bedingungen zutreffen. Also so in etwa:if variable NameVorname <>""
then durchlaufe makro
else msgbox "Fehler, Name muss unbedingt ausgefüllt werden"
End if
Ist der Ansatz Richtig, oder "verrenn" ich mich grad????
Code: Alles auswählen
If vari1 <>"" AND vari2 <>"" then
tu das Richtige
else
gib fehler aus
end if
Code: Alles auswählen
Sub HauptTeil
Dim oSheet as Object
Dim sPflichtName as String, sPflichtOrt as String
oSheet = thisComponent.Sheets.getbyname("Tabelle1")
sPflichtName = oSheet.getCellRangeByName("U7").String
sPflichtOrt = oSheet.getCellRangeByName("U9").String
if sPflichtName <>"" and sPflichtOrt <>"" then
With oSheet ' Letzte Zeile der Spalte BB ermitteln
x = .Columns(53).queryEmptyCells()
iLetzte = x(x.Count-1).RangeAddress.StartRow + 1
End With
print "Die nächste leere Zeile ist die " & iLetzte
oSheet.getCellRangeByName("BB" & iLetzte).String = sPflichtName
oSheet.getCellRangeByName("DZ" & iLetzte).String = sPflichtOrt
print "Daten sind eingetragen"
else
print "Vor- und Nachname UND Ort müssen ausgefüllt sein. Sie sind Pflichtfelder!"
end if
End Sub
"Vor- und Nachname" sowie "PLZ / Ort" sind als Pflichtfelder Rot umrandet. Der Button ist funktionstüchtig.
Gruß
balu
- Dateianhänge
-
- Adressen-eintragen_balu-0.ods
- (13.39 KiB) 123-mal heruntergeladen
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.
wehr rächtschraipfähler findet khan si behalden
wehr rächtschraipfähler findet khan si behalden
Re: einzelne Zellen in Liste schreiben
Hallo Balu,
ja ist denn heut schon Weihnachten????
ok, mit den 2 Abfragen geb ich Dir natürlich Recht, obwohl, wenn hätte ich, das wär ja falsch gewesen, oder (or) geschrieben, aber mir gings ja um den Weg.
Ja stimmt, ist mir auch aufgefallen, irgendwie ist das noch nicht richtig so mit dem Layout, arbeite aber dran (brauche dazu wahrscheinlich auch noch Hilfe von Euch, werde dazu noch einen extra Threat starten)
Herzlichen Dank für Dein Bemühen, war ein lehrreicher Tag für mich - Danke
Gruss Dirk
ja ist denn heut schon Weihnachten????
ok, mit den 2 Abfragen geb ich Dir natürlich Recht, obwohl, wenn hätte ich, das wär ja falsch gewesen, oder (or) geschrieben, aber mir gings ja um den Weg.
Ja stimmt, ist mir auch aufgefallen, irgendwie ist das noch nicht richtig so mit dem Layout, arbeite aber dran (brauche dazu wahrscheinlich auch noch Hilfe von Euch, werde dazu noch einen extra Threat starten)
Herzlichen Dank für Dein Bemühen, war ein lehrreicher Tag für mich - Danke
Gruss Dirk