Makro:Inhalte bedingt in anderes Blatt übertragen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Uli2222
Beiträge: 3
Registriert: So, 01.06.2014 15:46

Makro:Inhalte bedingt in anderes Blatt übertragen

Beitrag von Uli2222 »

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.
Uli2222
Beiträge: 3
Registriert: So, 01.06.2014 15:46

Re: Makro:Inhalte bedingt in anderes Blatt übertragen

Beitrag von Uli2222 »

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!



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
tags
Zuletzt geändert von Uli2222 am Mo, 02.06.2014 08:18, insgesamt 1-mal geändert.
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Makro:Inhalte bedingt in anderes Blatt übertragen

Beitrag von Karolus »

Hallo

Wenn du Sourcecode postest setze den wenigstens in

Code: Alles auswählen

[code]
tags[/code] oder in

Code: Alles auswählen

[code=php]
tags[/code]

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
Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Antworten