Clever-Excel-Forum

Normale Version: Makro funktioniert nur auf einer Tabelle (Worksheet)
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallöchen,

der code funktioniert schon in einer leeren Datei Smile Du musst halt nur schauen, ob Du mit festen Bereichsangaben arbeiten kannst oder wie Du selbige ermittelst.
leider klappt es nicht. Im Debugger ist alles gelb markiert. Habe probiert die ganzen Daten in eine Tabelle umzuwandeln und auch nur eine bestimmte Range.

Edit: Habe es gerade bei einem selbst erstellten Datensatz probiert, da gehts. Ich glaube es liegt daran, dass Excel Probleme hat, weil es als CVS Datei erkannt wird.

2. Edit: Habe einen Code gefunden der die CVS Datei einfach in eine Excel Datei umwandelt und dann klappt es besser:

Code:
Sub Makro1()
Dim ws As Worksheet
Dim qt As QueryTable
For Each ws In ThisWorkbook.Worksheets
For Each qt In ws.QueryTables
qt.Delete
Next qt
Next ws

If ActiveWorkbook.Connections.Count > 0 Then
For i = 1 To ActiveWorkbook.Connections.Count
ActiveWorkbook.Connections.Item(1).Delete
Next i
End If
End Sub
 Ich hab nur keine Ahnung ob ich das "Dim", "Next i" und "End if" weg lassen kann. Was bedeutet das?
Hallöchen,

wenn das der Grund sein sollte, dann speichere die Datei als xlsx.

wenn alles gelb markiert ist, muss irgend etwas anderes falsch sein. Gelb wird normalerweise nur ein Codezeile markiert, wobei eine Codezeile aus mehreren, mit Underline verbundenen Zeilen im Editor bestehen kann.
Ja nur eine Codezeile ist gelb markiert. Sorry

Tut mir echt leid das ich mich so mega schlecht auskenne. Aber meinst du ich soll die CVS Datei bevor ich sie importiere, als XLS umwandeln?
Hallöchen,

nein, nicht umwandeln. Wenn Du sie importierst und nicht einfach öffnest, ist ja alles ok. Dann ist es für Excel die Exceldatei, wo Du importiert hast. Zwei Dinge. Zum einen könntest Du mal die Codezeile nennen, die gelb ist, oder die Datei mal anhängen, sofern da keine schützenswerten Daten drin sind.
Sub test()
   ActiveSheet.ListObjects.Add(xlSrcRange, ActiveSheet.UsedRange, , xlYes).Name = _
        "Tabelle1"
End Sub


So siehts dann aus.

Also ich importiere ja schon. Also ich gehe auf Daten > aus Text... Aber trotzdem erkennt er da noch die CVS Datei dahinter. Wenn ich aus einem Bereich eine intelligente Tabelle mache, zeigt der im VBA irgendwas mit
Code:
QueryTable ("CVS") Delte
an.

[attachment=34318]
Hallöchen,

ja, da hattest Du schon was in Deinem weiter oben geposteten Code. So würde es gehen

Sub Test
ActiveSheet.QueryTables("09091534").Delete
ActiveSheet.ListObjects.Add(xlSrcRange, Range("A6:E11"), , xlYes).Name = _
"Tabelle1"
End Sub

Da die Nummer nicht unbedingt bekannt ist könnte man das Löschen auch so vornehmen:

Dim qt As QueryTable
For Each qt In ActiveSheet.QueryTables
qt.Delete
Next

Mit dem UsedRange würdest Du auch nur A6:E11 als Tabelle bekommen. Das importierte Blatt ist ja ziemlich zergliedert und würde ggf. mehrere tabellen erfordern. Wie ich schon schrieb, wenn die im Beispiel 5 Bereiche klar und konstant sind könntest Du die fest programmieren. Ansonsten müsstest Du sie erst ermitteln.

Im Prinzip könnte es aber so funktionieren, Du erhältst damit mehrere Tabellen.

Code:
Sub test()
'Variablendeklaratonen
Dim qt As QueryTable, iCnt%, rngZelle1 As Range, rngZelle2 As Range
'Schleife ueber alle Querys
For Each qt In ActiveSheet.QueryTables
  'ggf. refresh beenden
  If qt.Refreshing Then qt.CancelRefresh
  'Querys loeschen
  qt.Delete
'Ende Schleife ueber alle Querys
Next
'Startzelle ueber erstem Tabellenbereich festlegen
Set rngZelle1 = Cells(3, 1)
'Schleife ueber 100 moegliche Bereiche
For iCnt = 1 To 100
  'Startzelle Tabelle festlegen
  Set rngZelle1 = Cells(rngZelle1.Row, 1).End(xlDown).Offset(1, 0)
  'Endzelle ermittlen unten rechts, bereich muss unten rechts gefuellt sein!
  Set rngZelle2 = rngZelle1.End(xlDown)
  Set rngZelle2 = rngZelle2.End(xlToRight)
  'Bereich in Tabelle wandeln
  ActiveSheet.ListObjects.Add(xlSrcRange, Range(rngZelle1, rngZelle2), , xlYes).Name = _
          "Tabelle" & iCnt
  'untere Zelle des Bereichs als Ausgangspunkt fuer naechsten Schleifendurchlauf setzen
  Set rngZelle1 = Cells(rngZelle2.Row, 1)
  'Wenn nach unten nix mehr kommt, dann Schleife verlassen
  If Cells(rngZelle1.Row, 1).End(xlDown).Row = Rows.Count Then Exit For
'Ende Schleife ueber 100 moegliche Bereiche
Next
End Sub
Da probiere ich seit Tagen rum, war ganz kurz davor das es klappt. Und mit deinem Code funktioniert es direkt perfekt :D Nur leider verstehe ich den überhaupt nicht, und werde es auch nicht. Wenn ich es schaffe meinen zum laufen zu bringen würde ich gerne diesen beutzen.

Der Fehler bei mir: 

Ich wähle einen Bereich aus:
Code:
Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
und diesen will ich in eine Tablle umwandeln.

Aber das Makro wandelt eine bestimmte Range die ich halt ausgewählt habe in eine Tabelle um:
Code:
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$24:$O$56"), , xlYes).Name = _
        "Tabelle1"

Wie schreibe ich, dass der ausgewählte Bereich zur Tabelle wird? Dass muss so sein weil die immer unterschiedlich lang sein werden.
Habs jetzt hin bekommen, habe Teile von deinem Code benutzt aber hauptsächlich meinen. Ich werde versuchen irgendwann deinen Code zu verstehen, sieht super komplex für mich aus
Hallöchen,

ich habe ja ausführlich kommentiert, vielleicht hilft das.
Wenn Du mit dem weitermachen willst, was Du gewählt hast, dann nimm statt Range("$A$24:$O$56") dann Selection
Ich habe in meinem Code ja die beiden "Ecken" ermittelt - rng...1 und 2 - und die mit Range(...1, ...2) zusammengesetz.
Seiten: 1 2