Aus ca. 100 Tabellenblättern ohne Datenverlust 1 erstellen

  • #1
K

kasim

Neues Mitglied
Themenersteller
Dabei seit
01.03.2005
Beiträge
4
Reaktionspunkte
0
Hallo und guten Tag,

ich versuche gerade gerade aus ca. 100 Tabellenblättern (Arbeitsblättern) den inhalt ohne Daten verlust in ein Tabellenblatt zu überführen.

Hintergrund:
Ich will versuchen aus einer DB die leider keine Export Schnittstelle hat die Daten zu Exportieren. Das ganze sieht so aus, das ich über den Druck befehl in ein PDF übersetzen muß und im zweiten schritt mit dem PDFgrabber (von Pixelplanet) das ganze wieder in ein gut Editierbares Excel Format bringe. Das ganze sieht wirklich sehr gut aus, bis auf den Harken, das der PDF Grabber jeweils einzelne Arbeitsblätter in der Excel Datei erstellt. Dies entspricht den zuvor erstellten PDF seiten. Leider ist das dummer weise auch nicht anders möglich.


Das es nicht bei den ca. 100 Seiten bleiben wird, suche ich eine Lösung die aus 100 oder mehr einzelnen Arbeitsblättern ein Arbeitsblatt erstellt. Ich denke das ich zwar recht gut mit Excel klar komme, doch in diesem Fall schaue ich schwer in die Röhre.


Ein zweites Problem ist das folgende:

Wie gesagt das Ergebnis was ich in den einzelnen Arbeitsblätten bekomme ist recht gut. Es werden 4 Spalten mit den Überschriften Artikel-Nr. , Gruppe, Baureihe, Beschreibung erstellt!

Die ersten 3 Spalten sind ohne Probleme, bei der vierten Spalte jedoch schlägt wieder ein Problem zu. Hier ist wie in der nachfolgenden Tabelle zu sehen ist die Beschreibung mehrzeilig. Das eben diese Ergebnisse später zu letztendlichen Verwendung Kopiert werden müssen und duch die Aufteilung des Textes in mehrere Zeilen Probleme entstehen suche ich hier die Möglichkeit den Inhalte der Beschreibungszeilen in ein Feld zu überführen.

PS: Mir ist klar das es eine manuelle Möglichkeit gibt, jedoch sind es wohl am ende einige Tausend Beschreibungen :--((


Artikel-Nr.GruppeBaureiheBeschreibung
CE 800Elektrische LokomotiveBR E 63 der DBElektrische Lokomotive.
Achsfolge C. Schwarzes Gußfahrgestell, drei Achsen und eine Blindwelle angetrieben.
Kunststoffgehäuse, Dach und erhabene Aufschriften silbern, Fenster mit Cellonscheiben hinterlegt.
Zweilicht-Spitzensignal beidseitig, Lichtwechsel mit Fahrtrichtungsänderung, 1 Stromabnehmer.


Wichtig: Selbstverständlich habe ich schon versucht der Hersteller der Ursprungsdatenbank zu Kontaktieren, dort hat jedoch keiner ein Interesse an einer solchen Schnittstelle. Das hat wohl nichts mit Faulheit zu tun, sondern mit reinem desinteresse, was sehr schade ist. Und nein es gibt leider keinen zweiten Anbieter auf diesem Gebiet, was echt PIIIIEEEEP ist.

Jetzt hoffe ich mal, das es so etwas wie eine Lösung bzw. Arbeits Erleichterung gibt.


Ich freue mich über jeden Sachbezogenen Beitrag.
 
  • #2
Ola,

geht es um eine einmalige Lösung zum Ablösen der Datenbank oder um etwas, was immer wieder passieren soll, weil die Daten in der alten Batenbank verbleiben sollen?

Kannst Du den Umweg über word gehen? Mehrere Seiten in Word lassen sich nahezu problemlos in eien Exceltabelle überführen. Dort hättest du auch schon die Mgöglichkeit, in die Bechreibungsspalte seperatoren einzufügen, die Excel später zur Aufteilung in Splatne nutzen kann (wenn ich diesen Teil richtig verstanden habe ...)
 
  • #3
Hallo Kasim,

das schreit ja förmlich nach einem Makro. Schick mir doch bitte mal einen Auszug deiner Excel-Tabell mit ca 3-5 Tabellenblättern. Bitte füge noch ein Tabellenblatt zusätzlich ein und führe dort die gewollte Zusammenführung manuell aus, so daß ich sehen kann, wie das Ergebnis aussehen soll.

Dann werden wir sehen, ob sich das nicht im Handumdrehen erledigen läßt.

Gruß Matjes  :)
 
  • #4
Hallo Matjes,

ich habe Dir soeben die gewünschte Dateil mit Beschreibung für einen Test zugesendet, vielen Dank für Deine mühe im voraus

Thx Kasim
 
  • #5
Hallo PCDjoe,

das ist gut gemeint aber leider aus meiner Sicht nicht sinnvoll, das der Ursprung (PDF Print) in dem Format zu allem übel auch noch Grafiken wie z.B. Linien und Logos mit in das PDF schreibt was bei einer Konvertierung nach Word zu weiteren Bearbeitungsschritten führt. Eine Konvertierung mit dem PDF Grabber nach Excel in einem bestimmten Modus Killt diesen ganzen Müll bereits. Deswegen habe ich mich für diesen Schritt entschieden. Ich möchte mich aber Herzlichst für Deinen Denkanstoß bedanken.

Mfg. Kasim



PCDjoe schrieb:
Ola,

geht es um eine einmalige Lösung zum Ablösen der Datenbank oder um etwas, was immer wieder passieren soll, weil die Daten in der alten Batenbank verbleiben sollen?

Kannst Du den Umweg über word gehen? Mehrere Seiten in Word lassen sich nahezu problemlos in eien Exceltabelle überführen. Dort hättest du auch schon die Mgöglichkeit, in die Bechreibungsspalte seperatoren einzufügen, die Excel später zur Aufteilung in Splatne nutzen kann (wenn ich diesen Teil richtig verstanden habe ...)
 
  • #6
Ola,

gern geschehen ...
 
  • #7
die Lösung sieht jetzt so aus.

Gruß Matjes  :)

Code:
Option Explicit
'Definitionen zum Aufbau eines Quell-Tabellenblattes
Const c_SP_ArtNr As Long = 1
Const c_SP_Gruppe As Long = 2
Const c_SP_Baureihe As Long = 3
Const c_SP_Beschr As Long = 4
Const c_ZQ_UebSchr As Long = 2
Const c_ZQ_ErsteWerteZeile As Long = c_ZQ_UebSchr + 1
'abweichende Definitionen für Zusammenfassungsblatt
Const c_TabName_Zusammenfassung As String = Zusammenfassung
Const c_ZZ_UebSchr As Long = 1
'********************************************************
Public Sub ModellbahnTabsZusammenfuehren()
  
  Dim wb As Workbook, ws As Worksheet, wsz As Worksheet
  Dim l_zus_Zeile As Long, l_ws_cnt As Long
 
  Set wb = ActiveWorkbook
  Set ws = wb.Worksheets(1)
 ->Zusammenfassungsblatt einfügen
  wb.Worksheets.Add Before:=ws
  Set wsz = ActiveSheet
  wsz.Name = c_TabName_Zusammenfassung
  l_zus_Zeile = ZusammenfassungFormatieren(ws, wsz)
 ->Bildschirm-Update abschalten
  Application.ScreenUpdating = False
 ->Über alle Blätter
  l_ws_cnt = 0
  For Each ws In wb.Worksheets
   ->nicht Zusammenfassungsblatt
    If ws.Name <> c_TabName_Zusammenfassung Then
      l_ws_cnt = l_ws_cnt + 1
      Application.StatusBar = _
        Bearbeite Blatt  & l_ws_cnt &  von  & wb.Worksheets.Count
      If Not NaechsteBlattInZusammenfassungUebertragen(ws, wsz, l_zus_Zeile) Then
        MsgBox (max. Zeileanzahl der Zieltabelle ist erreicht.)
        Exit For
      End If
    End If
  Next
  Application.StatusBar = 
 ->Bildschirm-Update anschalten
  Application.ScreenUpdating = True
  MsgBox (In der Zusammenfassung sind  & _
          (l_zus_Zeile - c_ZZ_UebSchr) &  Artikel enthalten.)
  Set wb = Nothing: Set ws = Nothing: Set wsz = Nothing
End Sub
'********************************************************
Function NaechsteBlattInZusammenfassungUebertragen( _
    ws As Worksheet, wsz As Worksheet, l_zus_Zeile As Long) As Boolean
  Dim l_rows As Long, z As Long, l_Bemerkung_Zeile As Long
  Dim s_Beschr As String, s_Baureihe As String
  
  NaechsteBlattInZusammenfassungUebertragen = True
  
 ->letzte Zeile über Spalte Bemerkung definieren
  l_rows = ws.Cells(ws.Rows.Count, c_SP_Beschr).End(xlUp).Row
  
  For z = c_ZQ_ErsteWerteZeile To l_rows
   ->neuer Artikel
    If ws.Cells(z, c_SP_ArtNr).Value <>  Then
     ->naechste freie Zeile in Zusammenfassung
      l_zus_Zeile = l_zus_Zeile + 1
     ->Zieltabelle voll ?
      If l_zus_Zeile > 65535 Then
       ->Fehlerkennung setzen + Schluß
        NaechsteBlattInZusammenfassungUebertragen = False
        Exit Function
      End If
      wsz.Cells(l_zus_Zeile, c_SP_ArtNr).Value = ws.Cells(z, c_SP_ArtNr).Value
      wsz.Cells(l_zus_Zeile, c_SP_Gruppe).Value = ws.Cells(z, c_SP_Gruppe).Value
      wsz.Cells(l_zus_Zeile, c_SP_Baureihe).Value = ws.Cells(z, c_SP_Baureihe).Value
      wsz.Cells(l_zus_Zeile, c_SP_Beschr).Value = ws.Cells(z, c_SP_Beschr).Value
      l_Bemerkung_Zeile = 1
    Else
      l_Bemerkung_Zeile = l_Bemerkung_Zeile + 1
      s_Baureihe = ws.Cells(z, c_SP_Baureihe).Value
      If s_Baureihe <>  Then
        wsz.Cells(l_zus_Zeile, c_SP_Baureihe).Value = _
        wsz.Cells(l_zus_Zeile, c_SP_Baureihe).Value &   & s_Baureihe
      End If
      s_Beschr = ws.Cells(z, c_SP_Beschr).Value
      If l_Bemerkung_Zeile = 2 Then
       ->nach erster Bermekungszeile Zeilenvorschub
        wsz.Cells(l_zus_Zeile, c_SP_Beschr).Value = _
        wsz.Cells(l_zus_Zeile, c_SP_Beschr).Value & vbLf & s_Beschr
      Else
       ->sonst Leerzeichen einfügen
        wsz.Cells(l_zus_Zeile, c_SP_Beschr).Value = _
        wsz.Cells(l_zus_Zeile, c_SP_Beschr).Value &   & s_Beschr
      End If
    End If
  Next
End Function
'********************************************************
Function ZusammenfassungFormatieren( _
    ws As Worksheet, wsz As Worksheet) As Long
 ->Formatierung des Zusammenfassungsblattes
 ->Rückgabe: nächste freie Zeile auf Zusammenfassungsblatt
    
 ->Formatierung
  With wsz.Cells
      .NumberFormat = @
      .HorizontalAlignment = xlLeft
      .VerticalAlignment = xlTop
      .WrapText = True
      .Font.Name = Arial
      .Font.Size = 10
  End With
 ->Numberformat der Beschreibung auf->wissenschaftlich'
 ->damit die Darstellung klappt
  wsz.Columns(c_SP_Beschr).NumberFormat = 0.E+00
  
 ->Spaltenbreiten
  wsz.Columns(c_SP_ArtNr).ColumnWidth = 12
  wsz.Columns(c_SP_Gruppe).ColumnWidth = 25
  wsz.Columns(c_SP_Baureihe).ColumnWidth = 25
  wsz.Columns(c_SP_Beschr).ColumnWidth = 100
 ->Überschriften aus 1.Blatt übernehmen
  With wsz.Cells(c_ZZ_UebSchr, c_SP_ArtNr)
    .Value = ws.Cells(c_ZQ_UebSchr, c_SP_ArtNr).Value
    .Font.Bold = True
  End With
  With wsz.Cells(c_ZZ_UebSchr, c_SP_Gruppe)
    .Value = ws.Cells(c_ZQ_UebSchr, c_SP_Gruppe).Value
    .Font.Bold = True
  End With
  With wsz.Cells(c_ZZ_UebSchr, c_SP_Baureihe)
    .Value = ws.Cells(c_ZQ_UebSchr, c_SP_Baureihe).Value
    .Font.Bold = True
  End With
  With wsz.Cells(c_ZZ_UebSchr, c_SP_Beschr)
    .Value = ws.Cells(c_ZQ_UebSchr, c_SP_Beschr).Value
    .Font.Bold = True
  End With
  
  With wsz.PageSetup
    .Zoom = False             ->False für FitTo...
    .FitToPagesTall = 500     ->Ausdrucklänge 500 Seiten
    .FitToPagesWide = 1       ->Ausdruckbreite 1 Seite
    .Orientation = xlLandscape->Querformat
  End With
 ->Rueckgabe der letzten beschriebenen Zeile auf Blatt->Zusammenfassung'
  ZusammenfassungFormatieren = c_ZZ_UebSchr
End Function
 
  • #8
Hallo und guten Tag,

ich kann mich wirklich nur bei Matjes auf das Herzlichste bedanken, ansonsten hätte mich eine Manuelle Bearbeitung sicherlich Wochen an Editierarbeit gekostet. Nochmals Danke!!!

Hier noch mal die Beschreibung der Problematik:

Ich hatte versucht eine Datenbank für perönliche (immer wieder kehrende Anwendungen) zu Konvertieren. Zu meinem Leidwesen hatte eben diese Datenbank keinerlei Schnittstelle für einen evtl. Export. Das einzigste was ich machen konnte war der Ausdruck eines Berichtes, den ich vom Layout her nicht verändern konnte.

Für den ersten Test habe ich eine Demoversion des maxxPDFmailers genommen um den Bericht in ein xxxxxxxx.PDF Format zu schreiben. So bekam ich eine pdf Datei mit etlichen hundert Seiten auf denen sich die Artikel.-Nr. , Gruppe, Baureihe und die Beschreibung von Modellbahnlokomotiven befanden.

Der zweite schritt war dann schon etwas schieriger, es mußte eine Software her die das PDF-Format wieder in ein gebrauchbares Format umsetzt. Auch hier habe ich zunächst eine Demoversion des PDFgrabbers von Pixelplanet genommen um erst ein mal zu sehen was genau dabei heraus kommt. Der PDFgrabber bietet die verschiedensten möglichkeiten an, wobei ich mich letztendlich aus guten gründen für das Excel Format entschieden habe.

Nach diesem Schritt hatte ich eine Exceldatein mit meheren hundert Arbeitsblättern, und somit ein ganz neues Problem........................... bis ich hier eher hilflos in das Forum gepostet habe.

Ich hatte mir zwar gedacht, dass es evtl. eine Lösung geben kann, wenn man denn Programmieren kann, aber wer das selbst nicht beherscht verzeifelt doch ganz schnell an einer solchen Situation. Ich wäre nicht mal auf die Idee gekommen das man ein Makro Programmieren muß um das gewünschte ergebniss zu erziehlen. Wie denn auch wenn man kein Plan hat.


Schlußendlich ist es durch Matjes zu einer Lösung durch ein Makro gekommen (was ja hier auch zu sehen ist), wofür ich mich tausend mal bedanken möchte.

So konnte jetzt der dritte schritt der Bearbeitung erfolgen, der dann wie folgt von statten ging. Die Excel Datei wurde geöffnet, und da Makro aktiviert.

Alle überflüssigen (nicht benötigten) Informationen die durch die vorhergehenden Arbeitsschritte zustande gekommen waren (z.B. auf jeder Seite stand ein Datum und ebenfalls eine Seitenangabe) wurden durch das Makro entfernt und das ganze stand am ende in einem einzigen Arbeitsblatt, ganz so wie ich es mir vorgestellt hatte.


Problem gelöst! Nochmals meinen Dank und ein dickes Lob an Matjes, der das für mich unlösbare Problem hervorragend gelöst hat.


Mfg. Der Kasim
 
Thema:

Aus ca. 100 Tabellenblättern ohne Datenverlust 1 erstellen

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.836
Beiträge
707.957
Mitglieder
51.489
Neuestes Mitglied
DonMartin
Oben