per Excel-VBA Zellen in Tabelle formatieren

  • Excel

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    per Excel-VBA Zellen in Tabelle formatieren

    Hallo Zusammen,

    ich würde gerne Daten, die ich aus einer Arbeitsmappe in eine andere Arbeitsmappe kopiert habe per Knopfdruck in eine "Tabelle" formatieren um aus dieser später eine Pivottabelle zu erstellen.
    Habe im Internet hierzu zwei mögliche Codeschnipsel gefunden und diese versucht in meinen Code zu integrieren. (Muss dazu sagen, dass ich eher Excel-VBA Anfänger bin).
    Im Anhang findet ihr die beiden Codes und die Fehlermeldung die ich daraus bekomme.

    Kann mir jemand bei der Lösung helfen?
    Als Fehlerquelle markiert mir VBA jeweils den Bereich:

    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$2:$M$864"), , xlYes).Name = _
    "Tabelle1"

    bzw.

    Sheets("GJA").ListObjects.Add(xlSrcRange, Range("A2:X" & Cells(1, 1).End(xlDown).Row), , xlNo).Name=_
    "Tabelle1"


    Vielen Dank im Voraus.
    Bilder
    • pic1.JPG

      44,34 kB, 829×159, 18 mal angesehen
    • pic2.JPG

      37,25 kB, 674×158, 19 mal angesehen
    • pic3.JPG

      23,14 kB, 465×263, 18 mal angesehen
    Wie die Fehlermeldung schon sagt, ist der Range nicht auf dem Sheet auf dem die Tabelle erstellt werden soll.
    Das passiert z.B. wenn das Makro nicht in der Datei ist, in welche du die Tabelle erstellen willst.
    Um dies zu beheben, musst du dem beim Range noch das Sheet (und vieleicht sogar das Workbook) mitgeben.

    Das sieht dann in etwa so aus.

    Visual Basic-Quellcode

    1. ActiveSheet.ListObjects.Add(xlSrcRange, ActiveSheet.Range("$A$2:$M$864"), , xlYes).Name = "Tabelle1"

    oder so

    Visual Basic-Quellcode

    1. Sheets("GJA").ListObjects.Add(xlSrcRange, Sheets("GJA").Range("A2:X" & Cells(1, 1).End(xlDown).Row), , xlNo).Name= "Tabelle1"


    Gegeben falls würde ich den Befehl ListObjects. Add-Methode (Excel) genauer anschauen, weil du hast
    1. unterschiedliche Ranges und
    2. erzeugst du die Tabelle einmal mit und einmal ohne Beschriftungen (Titelzeile)
    Wenn du den Code in den Codebereich des Worksheet schreibst, wird es wohl funktionieren,
    Wenn du in einem Modul arbeitest, musst du alle Objekte (z.B. Range-Objekte) fremdadressieren, wie im Post oben schon erwähnt wurde.

    Denke objektorientiert und schreibe den Code dort hin, wo er gebraucht wird.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --