Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Makro For Schleife Variable Spalten

Makro For Schleife Variable Spalten
06.10.2016 15:21:37
Christian
Hallo zusammen,
dieses Forum hat mir schon oft weitergeholfen, aber jetzt hänge ich an einem Fall, bei dem ich einfach nicht weiterkomme.
Es geht darum,ein Makro zu erstellen, welches aus einer aufgerufenen Datei immer die selben Spalten kopiert und sie dann in mein Tabellenblatt in unterschiedliche Spalten schreibt.
Hat alles bereits gut funktioniert, bis ich die Einfügespalten statt zusammenhängend in vordefinierte Spalten umändern musste.
Nun kann man nämlich nichtmehr wie zuvor alle SPalten gleichzeitig kopieren und in der selben Reihenfolge wieder einfügen, sondern muss jede Zelle einzeln kopieren und dann in eine definierte Spalte schreiben.
Habe es jetzt mit Arrays versucht, aber das mag auch nicht so wirklich funktionieren..
Ich hoffe ihr versteht was ich meine, ist vermutlich auch kein Hexenwerk diese For-Schleife, aber ich bekomme sie einfach nicht zum Laufen...
Hier ist mein Makro:
Sub Precheck_laden()
MsgBox ("Bitte Datei auswählen und mit Doppelklick bestätigen")
Dim strVerweis As String               'Verweis auf Zelle in anderer Datei
Dim x As Workbook, y As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet
fileToOpen = Application.GetOpenFilename("Microsoft Excel-Dateien (*.xlsm), *.xlsm")
Workbooks.Open (fileToOpen)
Set x = ActiveWorkbook
Set y = Workbooks("LISTE.xlsm")
Set ws1 = x.Sheets("Eingabe")
Set ws2 = y.Sheets("Kalender")
Dim Z(1 To 16) As Integer
Z(1) = 29
Z(2) = 42
Z(3) = 44
Z(4) = 46
Z(5) = 48
Z(6) = 50
Z(7) = 52
Z(8) = 54
Z(9) = 56
Z(10) = 58
Z(11) = 60
Z(12) = 61
Z(13) = 62
Z(14) = 63
Z(15) = 64
Z(16) = 65
Dim C(1 To 16) As Integer
C(1) = 10
C(2) = 11
C(3) = 12
C(4) = 13
C(5) = 14
C(6) = 15
C(7) = 16
C(8) = 17
C(9) = 18
C(10) = 19
C(11) = 20
C(12) = 21
C(13) = 22
C(14) = 23
C(15) = 24
C(16) = 25
Dim i As Integer
For i = 1 To 15
With ws1
.Cells(135, C(i)).Copy
Sheets("Eingabe").Close SaveChanges:=False
Sheets("Kalender").Select
zeile = ActiveCell.Row
ActiveSheet.Cells(zeile, Z(i)).Select
Selection.NumberFormat = "@"
Selection.PasteSpecial
End With
Next i
End Sub

Vielen Dank schonmal für eure Hilfe!
Christian
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro For Schleife Variable Spalten
06.10.2016 15:52:20
Mirko
Hi Christian,
auf den ersten Blick sieht es so aus, als ob du in der For Next Schleife das With nicht richtig hast. M.E. kannst du das sogar weglassen. Ferner mußt du m.e. die Feldvariablen Z(.) C(.) als Array dimensionieren.
For i = 1 To 15
ws1.Cells(135, C(i)).Copy
Sheets("Eingabe").Close SaveChanges:=False
Sheets("Kalender").Select
zeile = ActiveCell.Row
ActiveSheet.Cells(zeile, Z(i)).Select
Selection.NumberFormat = "@"
Selection.PasteSpecial
Next
Kann es leider gerade nicht tiefer testen.
Viele Grüße
Mirko
Anzeige
AW: Makro For Schleife Variable Spalten
06.10.2016 17:05:52
Christian
Hallo Mirko,
danke für deine Hilfe, aber funktioniert leider immer noch nicht.
Als Fehlermeldung kommt: Objekt unterstützt diese Eigenschaft oder Methode nicht.
Ich verstehe einfach nicht wieso es nicht durchläuft
Gruß
Christian
AW: Makro For Schleife Variable Spalten
06.10.2016 18:16:31
MatthiasG
Hallo Christian,
da referenzierst du so schön mit Set x=, y=, ws1= und ws2, und dann arbeitest du mit .Activate und .Select? Warum?
Wie ermittelst du die Variable Zeile? Die aktive Zeile vor Aufruf des Makros?
Dann schreib den Befehl zeile = ... vor dem Öffnen der anderen Datei. Das wird ja in der Schleife nicht geändert.
Und Worksheet.Close gibt es nicht, nur Workbook.Close. Deshalb wahrscheinlich der Fehler.
Dann könntest du die Schleife so versuchen:

zeile = ActiveCell.Row
' Mappe öffnen etc.
For i = 1 To 15
With ws2.Cells(zeile, Z(i))
.NumberFormat = "@"
.Value = ws1.Cells(135, C(i)).Value
End With
Next i
x.Close SaveChanges:=False

Anzeige
AW: Makro For Schleife Variable Spalten
07.10.2016 08:16:47
Christian
Hallo Matthias,
vielen, vielen Dank!
Jetzt funktioniert es tatsächlich genau so, wie ich es mir vorgestellt habe.
Tausend Dank!
LG
Christian
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Makro für die For-Schleife mit variablen Spalten in Excel


Schritt-für-Schritt-Anleitung

Um ein Makro zu erstellen, das aus einer Datei bestimmte Spalten kopiert und sie in ein anderes Tabellenblatt in vordefinierte Spalten einfügt, folge diesen Schritten:

  1. Makro öffnen: Öffne den Visual Basic-Editor in Excel (Alt + F11).
  2. Neues Modul: Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)" und wähle "Einfügen" > "Modul".
  3. Code einfügen: Füge den folgenden Code in das Modul ein:
Sub Precheck_laden()
    MsgBox ("Bitte Datei auswählen und mit Doppelklick bestätigen")
    Dim strVerweis As String
    Dim x As Workbook, y As Workbook
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim fileToOpen As Variant
    fileToOpen = Application.GetOpenFilename("Microsoft Excel-Dateien (*.xlsm), *.xlsm")
    Workbooks.Open (fileToOpen)
    Set x = ActiveWorkbook
    Set y = Workbooks("LISTE.xlsm")
    Set ws1 = x.Sheets("Eingabe")
    Set ws2 = y.Sheets("Kalender")

    Dim Z(1 To 16) As Integer
    Dim C(1 To 16) As Integer
    ' Definiere die Spalten-Arrays
    For i = 1 To 16
        Z(i) = i + 28 ' Beispielwerte, anpassen nach Bedarf
        C(i) = i + 9  ' Beispielwerte, anpassen nach Bedarf
    Next i

    Dim zeile As Long
    zeile = ActiveCell.Row ' Aktuelle Zeile speichern

    For i = 1 To 15
        ws2.Cells(zeile, Z(i)).NumberFormat = "@"
        ws2.Cells(zeile, Z(i)).Value = ws1.Cells(135, C(i)).Value
    Next i

    x.Close SaveChanges:=False
End Sub
  1. Makro ausführen: Schließe den Editor, gehe zurück zu Excel und führe das Makro über "Entwicklertools" > "Makros" aus.

Häufige Fehler und Lösungen

  • Fehlermeldung: "Objekt unterstützt diese Eigenschaft oder Methode nicht": Überprüfe, ob du die richtigen Objekte verwendest. Stelle sicher, dass die Arbeitsblätter korrekt zugewiesen sind.

  • Workbook.Close vs. Worksheet.Close: Stelle sicher, dass du Workbook.Close und nicht Worksheet.Close verwendest. Der Fehler tritt häufig auf, wenn die falsche Methode genutzt wird.

  • Aktive Zelle: Vermeide es, ActiveCell innerhalb der Schleife zu verwenden, da dies zu unerwarteten Ergebnissen führen kann. Bestimme die Zeile vor der Schleife.


Alternative Methoden

  1. Verwendung von Arrays: Anstatt jede Zelle einzeln zu kopieren, kannst du die Werte direkt in ein Array einfügen, um die Effizienz zu erhöhen.

  2. Verwenden von Range: Anstelle von Cells kannst du auch Range verwenden, um auf bestimmte Zellen zuzugreifen, was den Code oft lesbarer macht.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du mit Makros effizienter arbeiten kannst:

Sub Beispiel_Makro()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Daten")

    ' Werte in ein Array laden
    Dim Werte(1 To 10) As Variant
    For i = 1 To 10
        Werte(i) = ws.Cells(i, 1).Value
    Next i

    ' Werte in andere Spalte schreiben
    For i = 1 To 10
        ws.Cells(i, 2).Value = Werte(i) * 2 ' Beispiel: Werte verdoppeln
    Next i
End Sub

Tipps für Profis

  • Vermeide .Select und .Activate: Diese Methoden können den Code langsamer machen. Greife direkt auf Objekte zu.
  • Fehlerbehandlung: Füge On Error Resume Next und On Error GoTo 0 hinzu, um Fehler zu behandeln, ohne das Makro zum Absturz zu bringen.
  • Makro optimieren: Verwende Application.ScreenUpdating = False, um die Bildschirmaktualisierung während des Makros zu deaktivieren und die Ausführung zu beschleunigen.

FAQ: Häufige Fragen

1. Warum funktioniert mein Makro nicht?
Es kann an einer falschen Referenzierung oder an der Verwendung von nicht unterstützten Methoden liegen. Überprüfe den Code auf Tippfehler und korrekte Objekte.

2. Wie kann ich das Makro anpassen?
Ändere die Spaltenindizes in den Arrays Z und C, um die gewünschten Spalten anzupassen. Achte darauf, dass die Indizes innerhalb der Grenzen der Excel-Datei liegen.

3. Welche Excel-Version benötige ich?
Das vorgestellte Makro funktioniert in Excel-Versionen ab 2010. Achte darauf, dass die Datei im .xlsm-Format vorliegt, da dies für Makros erforderlich ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige