Microsoft Office Forum [ www.Office-Fragen.de ] >> READONLY <<

Microsoft Office 2003-2019 => Excel => Thema gestartet von: Carvediem am April 09, 2012, 02:40:29 Vormittag

Titel: Office 2007: Tabellenblatt zu groß
Beitrag von: Carvediem 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
Titel: Office 2007: Antw:Office 2007: Tabellenblatt zu groß
Beitrag von: Ricco 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.
Titel: Antw:Office 2007: Tabellenblatt zu groß
Beitrag von: Carvediem 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 ...
Titel: Antw:Office 2007: Tabellenblatt zu groß
Beitrag von: Ricco 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.
Titel: Antw:Office 2007: Tabellenblatt zu groß
Beitrag von: Carvediem 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
Titel: Antw:Office 2007: Tabellenblatt zu groß
Beitrag von: Ricco 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.
Titel: Antw:Office 2007: Tabellenblatt zu groß
Beitrag von: Carvediem 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
Titel: Antw:Office 2007: Tabellenblatt zu groß
Beitrag von: Carvediem am April 10, 2012, 12:14:47 Nachmittag
So, nochmals vielen Dank. Das Problem ist gelöst. Der Code ist eingearbeitet.