Seite 1 von 1
Re: Tabellen zusammenführen
Verfasst: Fr, 09.07.2010 04:44
von komma4
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.
Re: Tabellen zusammenführen
Verfasst: Fr, 09.07.2010 09:03
von clag
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
Verfasst: Fr, 09.07.2010 10:26
von clag
Hi
falls noch Interesse besteht
so geht es mit 33 Maus/Tastaturklicks bei konsistenten Datenbereichen
Bitteschöööööön
Re: Tabellen zusammenführen
Verfasst: Fr, 09.07.2010 10:57
von joemouth
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
Verfasst: Fr, 09.07.2010 11:12
von clag
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
Verfasst: Fr, 09.07.2010 12:58
von komma4
War in der Zwischenzeit offline und hatte ausnahmsweise etwas Zeit.
Dabei kam folgendes Makro raus...vielleicht hilft es ja jemanden
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
Verfasst: Sa, 10.07.2010 03:57
von joemouth
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"
Da ich noch keine Erfahrung mit OO Makros habe, komme ich nun nicht weiter.
Was ist zu tun?
Vielen Dank
Re: Tabellen zusammenführen
Verfasst: Sa, 10.07.2010 04:40
von komma4
mmmh,
setze mal die Zeile
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
Verfasst: Sa, 10.07.2010 14:42
von clag
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
Verfasst: Sa, 10.07.2010 14:49
von komma4
Bei der Setzung von aQuellDatenBereich, StartRow +1,an den zwei Stellen im Code, wo verwendet
Re: Tabellen zusammenführen
Verfasst: Sa, 10.07.2010 15:24
von clag
Hi
so jetzt läuft das Makro prima
Danke........
Re: Tabellen zusammenführen
Verfasst: Sa, 10.07.2010 17:52
von joemouth
komma4 hat geschrieben:
setze mal die Zeile
oben zu den anderen
Private Zeilen.
Klappt es dann?
Ja, Bestens, nun funktioniert es, herzlichen Dank und ein schönes Wochenende!