Collapse column

Autor Thema: Office 2007: Tabellenblatt zu groß  (Gelesen 4033 mal)

Offline Carvediem

  • Newbie
  • *
  • Beiträge: 11
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Mittelmäßig
  • Version [Office] : Office 2007
Office 2007: Tabellenblatt zu groß
« am: April 09, 2012, 02:40:29 Vormittag »
Liebe VBA/Excelianer,

nun habe ich noch eine Frage, die ich nicht beantwortet bekomme: Ich habe ein Tabellenblatt eingerichtet, das ich zum Import von XML-Daten benötige. Einzulesen sind nur wenige Daten (maximal 4x 20 Daten), allerdings wird durch das Makro das gesamte Tabellenblatt genutzt - mit dem Effekt, dass die Excel-Datei mehrere MByte groß wird.

Meine Frage: Kann ich die Größe des Tabellenblatts irgendwie einschränken?

Hier der VBA-Code:

Sub GPSinMarschtabelle
Sheets("Wegpunkte").Visible = True
Sheets("Nebenrechnungen").Visible = True
Sheets("Wegpunkte").Range("A2:G20").Clear
Dim sMsg As String
Dim retval As Long
Dim sPath As String
   
    sMsg = "- Sind die Wegpunkte in der DAV-Karte durchlaufend nummeriert?" _
            & vbCr _
            & "- Ist die Wegpunktbezeichnung im Format 01, 02, ..., 10, 11, ...?" _
            & vbCr _
            & "- Ist der Ausgangspunkt als Wegpunkt 01 bezeichnet?" _
            & vbCr & vbCr _
            & "Das Format für die DAV-Wegpunktdatei ist [waypoints_Name.gpx]"
       
    'MsgBox gibt eine Zahl aus der Aufzählung VbMsgBoxResult zurück:
    retval = MsgBox(sMsg, vbYesNo, "Title of MsgBox")
   
    If retval = vbYes Then
   
        sPath = Application.GetOpenFilename
       
        If sPath = "Falsch" Then
       
            MsgBox "Sie haben den Dateiaufruf abgebrochen"
           
        Else
       
            'Die Import-Funktion gibt eine Zahl aus der Aufzählung XlXmlImportResult zurück:
            retval = ActiveWorkbook.XmlMaps("gpx_Zuordnung").import(sPath)
           
            Select Case retval
                Case xlXmlImportSuccess
                    'Der Import war erfolgreich...
                Case xlXmlImportValidationFailed
                    'Der Import wurde zwar durchgeführt, aber bei der Schemavalidierung
                    'für die importierten Daten trat ein Fehler auf...
                Case xlXmlImportElementsTruncated
                    'Der Import konnte nur teilweise durchführt werden, da die XML-Datendatei
                    'zu groß für das Arbeitsblatt ist....
            End Select
           
        End If
       
    Else 'retval=vbNo
   
            MsgBox "Überarbeiten Sie die Wegpunktdatei und starten Sie dann den Import."
       
    End If
   
ActiveWorkbook.Worksheets("Wegpunkte").ListObjects("Tabelle1").Sort.SortFields. _
        Clear
    ActiveWorkbook.Worksheets("Wegpunkte").ListObjects("Tabelle1").Sort.SortFields. _
        Add Key:=Range("Tabelle1[ns1:name]"), SortOn:=xlSortOnValues, Order:= _
        xlAscending, DataOption:=xlSortTextAsNumbers
    With ActiveWorkbook.Worksheets("Wegpunkte").ListObjects("Tabelle1").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With


Dim x As Integer
Dim lat As Integer
Dim e As Integer
Dim l As Integer
x = 2
lat = 9
n = 9
h = 9
lon = 8
Do Until Sheets("Wegpunkte").Cells(x, 1) = ""
Sheets("Marschtabelle").Cells(lat, 7) = Sheets("Wegpunkte").Cells(x, 1)
Sheets("Marschtabelle").Cells(n, 1) = Sheets("Wegpunkte").Cells(x, 4)
Sheets("Marschtabelle").Cells(h, 8) = Sheets("Wegpunkte").Cells(x, 3)
Sheets("Marschtabelle").Cells(lon, 7) = Sheets("Wegpunkte").Cells(x, 2)
x = x + 1
lat = lat + 2
lon = lon + 2
n = n + 2
h = h + 2
Loop
Sheets("Marschtabelle").Select
Sheets("Wegpunkte").Visible = False
Sheets("Nebenrechnungen").Visible = False
End Sub

Das Tabellenblatt "Wegpunkte" ist das, das ich zum Import benötige. Es ist vorbereitet für die XML-Datei (gpx-Zuordnung). Was kann ich tun, damit es nicht bis Zeile 64k genutzt (und gespeichert) wird?

Vielen Dank im Voraus,
Carvediem

Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden und Dein Anliegen in Auftrag geben.
>>> Schnell und einfach ein unverbindliches Angebot anfordern. Per E-Mail an anfrage@excel-inside.de oder per Online-Formular
<<<

!!! Wichtige Information
!!! Dieses Forum steht aus technischen Gründen ab dem 11. September 2019 nur noch im Lesemodus zur Verfügung.
Das NEUE Office-Fragen-Forum kannst du aber unter der gewohnten Domain https://office-fragen.de wie gewohnt nutzen.

- Wir freuen uns auf deinen Besuch im neuen Forum.

Ricco

  • Gast
Office 2007: Antw:Office 2007: Tabellenblatt zu groß
« Antwort #1 am: April 09, 2012, 11:52:04 Vormittag »
Hallo carvediem,

sieh Dir doch einmal das Importergebnis an, wenn Du die OpenXML-Methode benutzt, also:

Dim wb As Workbook
Set wb = Workbooks.OpenXML(Filename:=sGPXPath, LoadOption:=xlXmlLoadImportToList)

Danach per VBA die Spalten markieren, die gebraucht werden, und die Selektion als Excel-Datei abspeichern.

Offline Carvediem

  • Newbie
  • *
  • Beiträge: 11
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Mittelmäßig
  • Version [Office] : Office 2007
Antw:Office 2007: Tabellenblatt zu groß
« Antwort #2 am: April 09, 2012, 12:18:18 Nachmittag »
Hi Ricco,

zunächst Danke für deine Antwort.

Bei dem Einladen der XML-Daten handelt es sich nicht um einen einmaligen Vorgang, sondern um eine Routine, die immer wieder geschieht, wenn man einen neuen Weg auf einer Landkarte festgelegt hat.

Das von dir vorgeschlagene Anschauen des Importergebnisses habe ich - sorry - zudem noch nicht ganz verstanden. Wenn ich den Code ausführe als ein Sub, dann bekomme ich einen Laufzeitfehler.

Vielleicht zur Orientierung, die Datei, um die es geht, ist kannst du hier anschauen:
http://www.download.i-p4.de/carvediem/Skitourenplaner_2012.zip
(darin ist auch eine Beispiel-XML-Datei)

Dass die übermäßige Größe durch den Einladevorgang in das Wegpunkt-Sheet liegt, konnte ich schon überprüfen. Es geht also jetzt darum, Sorge dafür zu tragen, dass der automatisierte Import nicht zu einer Ausnutzung des gesamten Tabellenblatts führt, wodurch es so viel Speicherplatz benötigt.

Vielleicht hast du ja noch eine Idee ...

Ricco

  • Gast
Antw:Office 2007: Tabellenblatt zu groß
« Antwort #3 am: April 09, 2012, 18:03:34 Nachmittag »
Hallo Carvediem,

offenbar waren die Ausführungen wohl doch ein wenig zu kurz geraten. Der nachstehende Code zeigt, wie mein Hinweis gemeint war.

---------------------------------------------------------------------------------------------------------------------

    Dim wb As Workbook, ws As Worksheet, sGPXPath As String
    Dim oList As ListObject, oListCol As ListColumn, sField() As String
    Dim i As Integer, r As Range, wsWP As Worksheet
   
    'Den Pfad zu der GPX-Datei festlegen. Hier ist als Verzeichnis F:\Daten angenommen.
    'Das ist natürlich durch das richtige zu ersetzen.
    sGPXPath = "F:\Daten\waypoints_Oelgrubenspitze.gpx"
    Set wb = Workbooks.OpenXML(FileName:=sGPXPath, LoadOption:=xlXmlLoadImportToList)
    'Hinweis: Beim Öffnen erscheint eine Meldung, die getrost abgenickt werden kann.
    'Will man diese Meldung unterdrücken, dann setze man Application.DisplayAlerts vor dem
    'Aufruf auf FALSE und danach direkt wieder auf TRUE.
   
    'Die angegebene LoadOption sorgt dafür, dass die XML-Daten als Listenobjekt eingelesen werden.
    'Diese Datenbankstruktur steht in wb in der ersten Tabelle.
    Set ws = wb.Worksheets(1)
   
    'Welche Datenbankfelder werden benötigt? Nach Deinen Bemühungen zu urteilen sind dies
    'nur die nachstehenden vier:
    ReDim sField(1 To 4) As String
    sField(1) = "ns1:name"
    sField(2) = "lat"
    sField(3) = "lon"
    sField(4) = "ns1:ele"
    'Sollten es mehr sein, dann ist das Feld eben zu erweitern.
   
    'Wir wählen diesen durch die Feldnamen definierten Bereich aus:
    Set oList = ws.ListObjects(1)
    Set oListCol = oList.ListColumns(sField(1))
    Set r = ws.Columns(oListCol.Index)
    For i = 2 To 4
        Set oListCol = oList.ListColumns(sField(i))
        Set r = Excel.Union(r, ws.Columns(oListCol.Index))
    Next
   
    'Die neuen Daten sollen offenbar immer in dem gleichen Arbeitsblatt Wegpunkte landen.
    'Also sind die alten vorher zu löschen:
    Set wsWP = ThisWorkbook.Worksheets("Wegpunkte")
    wsWP.UsedRange.Clear
    'Wäre das Arbeitsblatt noch gar nicht erstellt, dann würde es natürlich neu angelegt:
    'Set wsWP = ThisWorkbook.Worksheets.Add
    'wsWP.Name = "Wegpunkte"
   
    'Die ausgewählten Spalten werden in die Tabelle Wegpunkte kopiert; dabei wird gleichzeitig
    'die Datenbankstruktur entfernt. Minimaler geht's nimmer.
    r.Copy Destination:=wsWP.Range("A1")
   
    'Aufräumen
    Erase sField
    Set oListCol = Nothing
    Set oList = Nothing
    Set r = Nothing
    Set ws = Nothing
   
    'Die nur temporär erstellte Excel-Datei mit den ganzen GPX-Daten wird nicht mehr benötigt:
    wb.Close SaveChanges:=False

---------------------------------------------------------------------------------------------------------------------

MfG,
Ricco.

Offline Carvediem

  • Newbie
  • *
  • Beiträge: 11
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Mittelmäßig
  • Version [Office] : Office 2007
Antw:Office 2007: Tabellenblatt zu groß
« Antwort #4 am: April 09, 2012, 18:13:22 Nachmittag »
Hi Ricco,

whow, danke-danke-danke. Ich habe gerade Besuch, danach probiere ich das sofort aus. Toll, dass du mir da so viel Hilfe zukommen lässt.

Herzlicher Gruß,
Carvediem

Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden und Dein Anliegen in Auftrag geben.
>>> Schnell und einfach ein unverbindliches Angebot anfordern. Per E-Mail an anfrage@excel-inside.de oder per Online-Formular
<<<

!!! Wichtige Information
!!! Dieses Forum steht aus technischen Gründen ab dem 11. September 2019 nur noch im Lesemodus zur Verfügung.
Das NEUE Office-Fragen-Forum kannst du aber unter der gewohnten Domain https://office-fragen.de wie gewohnt nutzen.

- Wir freuen uns auf deinen Besuch im neuen Forum.

Ricco

  • Gast
Antw:Office 2007: Tabellenblatt zu groß
« Antwort #5 am: April 09, 2012, 18:35:41 Nachmittag »
Carvediem,

das mach ich doch gerne. Ich hab einfach über Ostern ein wenig Zeit, und es macht Spaß, mal wieder ein wenig in Excel herumzuturnen.

Viel Spaß damit,
Ricco.

Offline Carvediem

  • Newbie
  • *
  • Beiträge: 11
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Mittelmäßig
  • Version [Office] : Office 2007
Antw:Office 2007: Tabellenblatt zu groß
« Antwort #6 am: April 10, 2012, 01:34:45 Vormittag »
Hi Ricco,
ich komme jetzt erst dazu, mir deinen Code genauer anzuschauen. Noch habe ich nicht alles ganz durchdrungen, aber ich kann jetzt schon sagen: Das ist raffiniert, wie du das anlegst! Ich habe von Programmierungen überhaupt keine Ahnung und bin echt begeistert, wie das so funktioniert. Ich hab's noch nicht eingearbeitet, aber sobald das erledigt ist, melde ich Vollzug.
Nochmals herzlichen Dank,
Carvediem

Offline Carvediem

  • Newbie
  • *
  • Beiträge: 11
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Mittelmäßig
  • Version [Office] : Office 2007
Antw:Office 2007: Tabellenblatt zu groß
« Antwort #7 am: April 10, 2012, 12:14:47 Nachmittag »
So, nochmals vielen Dank. Das Problem ist gelöst. Der Code ist eingearbeitet.

Wenn du dich noch intensiver mit Excel beschäftigen möchtest, dann empfiehlt sich ein Online-Kurs,
in dem du sehr viel über Excel erfährst und das gelernte umgehend in der Praxis anwenden kannst.