Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Makro funktioniert nur auf einer Tabelle (Worksheet)
#11
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.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#12
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?
Antworten Top
#13
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.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • ExcelLearner
Antworten Top
#14
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?
Antworten Top
#15
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.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • ExcelLearner
Antworten Top
#16
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.


.xlsm   Testen-importiert.xlsm (Größe: 59,82 KB / Downloads: 1)
Antworten Top
#17
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • ExcelLearner
Antworten Top
#18
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.
Antworten Top
#19
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
Antworten Top
#20
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.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste