Ich bin gerade dabei für unseren Segelflugverein ein Flugverwaltungssystem mit Calc zu erstellen. Das habe ich auch hingekriegt, aber eine Kleinigkeit geht nur mit Makro. Leider funktionnieren aufgezeichnete Makros nicht.
Das Dokument besteht aus einer Tagesdokumentation und einer Dauerdokumentation, man könnte auch Datenbank dazu sagen.
Die Datensätze des aktuellen Tages stehen auf dem Arbeitsblatt "Startdokumentation" im Zellbereich A19:N67. Ein Datensatz ist also z.B. der Zellbereich A22:N22.
In der Spalte N wird ein Primärschlüssel erzeugt (Datumszahl*1000+laufende Nummer am heutigen Tag).
Die Datenbank steht im Tabellenblatt "Rohdatenblatt" im Zellbereich A1:N1000. (Mehr als 1000 Datensätze sollen nicht gespeichert werden). Primärschlüssel wieder in Spalte N.
Jetzt brauche ich einen Makro das folgendes tut:
1) Eine Sicherheitsabfrage, ob die Tagesdaten wirklich in die Datenbank übernommen werden sollen.
2) Jetzt sollen die Zellinhalte (Text, Zahlen, Datum, Zeit+Datum sowie Zellformate, nicht jedoch Formeln) des Bereich A19:N67 des Arbeitsblattes "Startdokumentation" zeilenweise ind das Arbeitsblatt "Rohdatenblatt, Spalten A-N) übernommen werden. Sie sollen immer in die erste Zeile geschrieben werden, die in Spalte N eine leere Zelle hat.
Dabei sollen die Daten nur übernommen werden wenn
- Der Inhalt der Zelle in SpalteN der Startdokumentation (Primärschlüssel) noch nicht in SpalteN des Rohdatenblatt steht (dann wurde er bereits übernommen)
- und wenn Spalte N im Arbeitsblatt "Startdokumentation" nicht leer ist (dann existiert in dieser Zeile kein Datensatz).
Es tut mir leid, aber alleine schaff ich es auf Grund von mangelnden Programmierkenntnissen nicht. Wär super , wenn mir jemand helfen könnte.
Makro:Inhalte bedingt in anderes Blatt übertragen
Moderator: Moderatoren
Re: Makro:Inhalte bedingt in anderes Blatt übertragen
Auf das Post hin hat F3K Total mir das folgende Makro geschrieben, das auch einwandfrei funktionniert (habe es bisher zeitbedingt allerdings nur oberflächlich getestet). Es fügt am Ende sogar noch eine Löschoption der Tagesdokumentation durch.
Vielen lieben Dank!
tags
Vielen lieben Dank!
Code: Alles auswählen
Sub Sichern
if msgbox ("Sollen die Daten der heutigen Startdokumentation wirklich in das Blatt Rohdaten übertragen werden?",36,"Datensicherung") = 6 then
oSourcesheet = Thiscomponent.Sheets.getbyname("Startdokumentation")
oSourceRange = oSourcesheet.getcellrangebyname("A19:N67")
aData = oSourceRange.Dataarray
for i = 0 to uBound(aData)
if aData(i)(13) = "" then
nLastrow = i
exit for
endif
next i
redim preserve aData(nLastrow-1)
oTargetSheet = Thiscomponent.Sheets.getbyname("Rohdatenblatt")
oCountRange = oTargetSheet.getcellrangebyname("N1:N1020")
aNData = oCountRange.Dataarray
for i = 0 to uBound(aNData)
if aNData(i)(0) = "" then
nNewrow = i
exit for
endif
next i
oTargetRange = oTargetSheet.getcellRangeByPosition(0,nNewrow,13,nNewrow + nLastrow - 1)
oTargetRange.setDataArray(aData())
if msgbox ("Sollen die Daten der heutigen Startdokumentation jetzt gelöscht werden?",36,"Daten wurden erfolgreich übertragen") = 6 then
oSourceRange.clearContents(7)
endif
else
msgbox "Gut, dann nicht"
endif
end sub
Zuletzt geändert von Uli2222 am Mo, 02.06.2014 08:18, insgesamt 1-mal geändert.
Re: Makro:Inhalte bedingt in anderes Blatt übertragen
Hallo
Wenn du Sourcecode postest setze den wenigstens intags[/code] oder in tags[/code]
Karolus
Wenn du Sourcecode postest setze den wenigstens in
Code: Alles auswählen
[code]
Code: Alles auswählen
[code=php]
Code: Alles auswählen
Sub Sichern
if msgbox ("Sollen die Daten der heutigen Startdokumentation wirklich in das Blatt Rohdaten übertragen werden?",36,"Datensicherung") = 6 then
oSourcesheet = Thiscomponent.Sheets.getbyname("Startdokumentation")
oSourceRange = oSourcesheet.getcellrangebyname("A19:N67")
aData = oSourceRange.Dataarray
for i = 0 to uBound(aData)
if aData(i)(13) = "" then
nLastrow = i
exit for
endif
next i
redim preserve aData(nLastrow-1)
oTargetSheet = Thiscomponent.Sheets.getbyname("Rohdatenblatt")
oCountRange = oTargetSheet.getcellrangebyname("N1:N1020")
aNData = oCountRange.Dataarray
for i = 0 to uBound(aNData)
if aNData(i)(0) = "" then
nNewrow = i
exit for
endif
next i
oTargetRange = oTargetSheet.getcellRangeByPosition(0,nNewrow,13,nNewrow + nLastrow - 1)
oTargetRange.setDataArray(aData())
if msgbox ("Sollen die Daten der heutigen Startdokumentation jetzt gelöscht werden?",36,"Daten wurden erfolgreich übertragen") = 6 then
oSourceRange.clearContents(7)
endif
else
msgbox "Gut, dann nicht"
endif
end sub
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)