Tabellen zusammenführen

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: Tabellen zusammenführen

Re: Tabellen zusammenführen

von joemouth » Sa, 10.07.2010 17:52

komma4 hat geschrieben: setze mal die Zeile

Code: Alles auswählen

Private oDok
oben zu den anderen Private Zeilen.

Klappt es dann?
Ja, Bestens, nun funktioniert es, herzlichen Dank und ein schönes Wochenende!

Re: Tabellen zusammenführen

von clag » Sa, 10.07.2010 15:24

Hi

so jetzt läuft das Makro prima :D

Danke........

Re: Tabellen zusammenführen

von komma4 » Sa, 10.07.2010 14:49

Bei der Setzung von aQuellDatenBereich, StartRow +1,an den zwei Stellen im Code, wo verwendet

Re: Tabellen zusammenführen

von clag » Sa, 10.07.2010 14:42

komma4 hat geschrieben:Klappt es dann?
jetzt ja :)

nun möchte ich aber verhindern, das von allen QuellTabellen die Spaltenköpfe mit kopiert werden
weil die Tabellen alle gleich aufgebaut sind und die ZielTabelle bereits Spaltenköpfe hat

da müsste ein "-1" oder so etwas an der richtigen Stelle diesen Wunsch erfüllen nur wo ?

Re: Tabellen zusammenführen

von komma4 » Sa, 10.07.2010 04:40

mmmh,

setze mal die Zeile

Code: Alles auswählen

Private oDok
oben zu den anderen Private Zeilen.


Klappt es dann?


Du führst das Makro de40039 aus...nicht das Unterprogramm de40039_kopieren?!

Re: Tabellen zusammenführen

von joemouth » Sa, 10.07.2010 03:57

komma4 hat geschrieben: Der Code und Ablauf sollten selbsterklärend sein... wenn Frage bestehen: fragen !
Und schon die erste Frage:

Das Makro stoppt hier mit "Object variable not set"

Code: Alles auswählen

aQuellBlaetter = oDok.Sheets().ElementNames
Da ich noch keine Erfahrung mit OO Makros habe, komme ich nun nicht weiter.

Was ist zu tun?

Vielen Dank

Re: Tabellen zusammenführen

von komma4 » Fr, 09.07.2010 12:58

War in der Zwischenzeit offline und hatte ausnahmsweise etwas Zeit.

Dabei kam folgendes Makro raus...vielleicht hilft es ja jemanden 8)



Den Namen des Zielblattes anpassen (erste Konstante), ggfs. die Blätter in der 2. Konstanten benennen, die nicht bearbeitet werden sollen.
Kopiert keine Formate!

Code: Alles auswählen

' de40039
' Inhalte kopieren auf ein Zielblatt

const cZielBlatt = "summary"
const cNichtbearbeiten = "Steuerung Deckblatt label"

Private sMakroName
Private oZielBlatt
Private oZielBereich
Private oZielCursor
Private lMaxZeilen
Private lErsteSpalte
Private lLetzteZeile

' ------------------------------------------------------------------
Sub de40039
sMakroName = "Makro de40039"
' Kopieren aller Daten von einer Anzahl Tabellenblätter
' auf ein Blatt "Zusammenfassung"


' Objekte der Datei
oDok = ThisComponent
oZielBlatt = oDok.Sheets().getByName( cZielBlatt )

' Cursor für Ziel
oZielCursor = oZielBlatt.createCursor() 


' Zieladresse bestimmen
oZielCursor.gotoStartOfUsedArea( FALSE )
oZielCursor.gotoEndOfUsedArea( TRUE )
lErsteSpalte = oZielCursor.getRangeAddress().StartColumn
lLetzteZeile = oZielCursor.getRangeAddress().EndRow

' max Anzahl Zeilen pro Blatt
lMaxZeilen = oDok.Sheets().getByIndex( 0 ).Rows.getCount() 

de40039_kopieren

End Sub 

' ------------------------------------------------------------------
' Routine zum Kopieren der Daten
Sub de40039_kopieren

' alle Namen
aQuellBlaetter = oDok.Sheets().ElementNames


' für alle Blätter im Quellbereich
For i = LBound( aQuellBlaetter ) To UBound ( aQuellBlaetter )


 oTempBlatt = oDok.Sheets().getByName( aQuellBlaetter(i) )
 oTempBlattName = oTempBlatt.Name
 
 
 If Instr( cNichtbearbeiten, oTempBlattName ) >  0  Then
    oTempBlattname = "nicht bearbeiten"
 End If
 
 
 Select Case oTempBlattName
    
    ' Zielblatt nicht bearbeiten
    Case cZielBlatt
    
    ' sonstige Blätter,die nicht bearbeitet werden sollen
    Case "nicht bearbeiten" 
    
    ' alle anderen kopieren
    Case Else
       oQuellCursor = oTempBlatt.createCursor()
       ' Datenbereich ermitteln
       oQuellCursor.gotoStartOfUsedArea( FALSE )
       oQuellCursor.gotoEndOfUsedArea( TRUE )
       
       ' Bereichsadressen
       aQuellAdresse = oQuellCursor.getRangeAddress()

       aQuellDatenBereich = oTempBlatt.getCellRangeByPosition( _
          aQuellAdresse.StartColumn, aQuellAdresse.StartRow, _
          aQuellAdresse.EndColumn, aQuellAdresse.EndRow )
 
       ' Prüfen, ob ins Ziel passt
        If ( aQuellDatenBereich.Rows.Count + lLetzteZeile > lMaxZeilen ) Then
          MsgBox "Zielbereich zu klein zum Einfügen!" & CHR(10) & _
          "Blatt " & s & " nicht kopiert", 0, sMakroName
          STOP
       End If
       '
       aQuellDaten = aQuellDatenBereich.getDataArray()
       '           
       oZielBlatt.getCellRangeByPosition( _
          aQuellAdresse.StartColumn , _
          aQuellAdresse.StartRow + lLetzteZeile, _
          aQuellAdresse.EndColumn , _
          aQuellAdresse.EndRow + lLetzteZeile ).setDataArray( aQuellDaten ) 
       
       ' letzteZeile neu setzen
       lLetzteZeile = lLetzteZeile + aQuellDatenBereich.Rows.Count 
 
 End Select
 
Next

End Sub
Der Code und Ablauf sollten selbsterklärend sein... wenn Frage bestehen: fragen !

Re: Tabellen zusammenführen

von clag » Fr, 09.07.2010 11:12

Hallo joemouth

das Beispiel zeigt auf wie du es machen kannst,
du kannst das Makro nicht so ohne weiters kopieren und auf ein anderes Cals Dokument anwenden,
weil es auf gezeichnet und nicht geschrieben wurde.

Die im Beispiel beschrieben Vorgehensweise kannst du aber bei
joemouth hat geschrieben:die Struktur bleibt gleich, keine Leerzeilen und Spalten, jedoch ändert sich die Zeilenanzahl.
genauso anwenden, du hast nur etwas mehr Klicks weil mehr Unter-Tabellen. ;)

dann hoffe ich es hilft dir weiter

Re: Tabellen zusammenführen

von joemouth » Fr, 09.07.2010 10:57

Vielen Dank für den super Service!
clag hat geschrieben:so geht es mit 33 Maus/Tastaturklicks bei konsistenten Datenbereichen
die Struktur bleibt gleich, keine Leerzeilen und Spalten, jedoch ändert sich die Zeilenanzahl.

Ich werde mir das Makro am Wochenende anschauen.

Herzlichen Dank

Re: Tabellen zusammenführen

von clag » Fr, 09.07.2010 10:26

Hi

falls noch Interesse besteht
so geht es mit 33 Maus/Tastaturklicks bei konsistenten Datenbereichen
collect_data.ods
(22.42 KiB) 72-mal heruntergeladen
Bitteschöööööön

Re: Tabellen zusammenführen

von clag » Fr, 09.07.2010 09:03

Hallo Gast

Das kann man recht einfach als Makro aufzeichnen und dann auf einen Button legen zum beliebigen wiederholen

im welchem Umfang verändern sich die Unter-Tabellen?
und sind die zu kopierenden Bereiche konsistente Datenbereiche also ein Bereich ohne Leerzeile/Spalten dazwischen?
oder wie wo was ?

Re: Tabellen zusammenführen

von komma4 » Fr, 09.07.2010 04:44

Gast hat geschrieben:Nun möchte ich alle Zeilen dieser Tabellen in der ersten Tabelle "Zusammenfassung" zusammenführen.
Kopierern, Ausschneiden und Einfügen... dürfte die schnellste (und offensichtlichste) Lösung sein.

Nach oben