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 - Fehler beim kompilieren
#1
Hallo zusammen,

ich wollte mit folgendem Makro Daten aus einem Tabellenblatt in ein anderes kopieren und nach jeweils 1440 Werten (d. h. einem Tag) eine neue Spalte beginnen, in die die Daten eingefügt werden:

Sub Tage3u8bis14()

Dim lCol1 As Long, oWsT As Worksheet

Application.ScreenUpdating = False

Set oWsT = ThisWorkbook.Sheets("Data_D3,8-14")

With ThisWorkbook.Sheets("Data_D3-14")
    For lCol1 = 2 To .Cells(2, .Columns.Count).End(xlToLeft).Column
        If (Left(.Cells(2, lCol1).Value, 2) * 1 = 3 Or Left(.Cells(2, lCol1).Value, 2) * 1 >= 8) Then
            .Range(.Cells(1, lCol1), .Cells(1, lCol1 + 1442)).Copy
            oWsT.Cells(1, lCol1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
    Next lCol1
End With

Application.ScreenUpdating = True

End Sub


Wenn ich das Makro starte kommt folgende Fehlermeldung: "Fehler beim kompilieren: Next ohne For". Woran kann das liegen? Fehlt irgendwo eine Codezeile? Wenn ja, wo? Ich sehe gerade den Wald vor lauter Bäumen nicht Huh
Antwortento top
#2
Hallo,

 da fehlt End If.

With ThisWorkbook.Sheets("Data_D3-14")
    For lCol1 = 2 To .Cells(2, .Columns.Count).End(xlToLeft).Column
        If (Left(.Cells(2, lCol1).Value, 2) * 1 = 3 Or Left(.Cells(2, lCol1).Value, 2) * 1 >= 8) Then
            .Range(.Cells(1, lCol1), .Cells(1, lCol1 + 1442)).Copy
            oWsT.Cells(1, lCol1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
        End If
    Next lCol1
End With
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antwortento top
#3
Oh, vielen Dank. Habe das komplett übersehen.

Nun bekomme ich aber eine andere Fehlermeldung: "Laufzeitfehler '13': Typen unverträglich" und folgende Zeile wird mir dabei angezeigt: If (Left(.Cells(2, lCol1).Value, 2) * 1 = 3 Or Left(.Cells(2, lCol1).Value, 2) * 1 >= 8) Then

Was ist daran falsch?
Antwortento top
#4
Jetzt wird's ein Ratespiel.

Wie ist lCol1 definiert?
Und was steht in Cells(2, LCol1)?
Antwortento top
#5
Ich habe mal eine Testdatei angehängt aus der hoffentlich alles ersichtlich wirdSmile


Angehängte Dateien
.xlsm   Test.xlsm (Größe: 1,8 MB / Downloads: 5)
Antwortento top
#6
Hallo,

dein Makro referenziert auf die Zeilen mit den Überschriften, soll das so sein? Wohl eher nicht.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antwortento top
#7
Was ergibt der Wert "Ta" wenn man ihn mit 1 multipliziert?
Denn wenn du
Code:
Left(.Cells(2, lCol1).Value, 2) * 1
verwendest, kommt genau das raus.
Schöne Grüße
Berni
Antwortento top
#8
Hallo,

ich vermute mal, du möchtest folgendes erreichen (zur Veranschaulichung habe ich bewußt die Variablen "Zeile" und "Spalte" verwendet. Zum Prüfen kannst du dir auch mal die auskommentierten Zeilen des Makros anschauen):

Code:
Sub Makro()

    Dim oWsT As Worksheet
    Dim Spalte As Integer
    Dim Zeile As Integer
   
    Application.ScreenUpdating = False
   
    Set oWsT = ThisWorkbook.Sheets("Data_D3,8-14")
    Zeile = 2

    With ThisWorkbook.Sheets("Data_D3-14")
        For Spalte = 2 To .Cells(Zeile, .Columns.Count).End(xlToLeft).Column
            If Right(.Cells(Zeile, Spalte), Zeile) = 3 Or Right(.Cells(Zeile, Spalte), Zeile) >= 8 Then
                ' Debug.Print Zeile; Spalte
                ' Range(Cells(Zeile + 1, Spalte), Cells(Rows.Count, Spalte).End(xlUp)).Select
                ' Stop
                Range(Cells(Zeile + 1, Spalte), Cells(Rows.Count, Spalte).End(xlUp)).Copy
                oWsT.Cells(1, Spalte).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
            End If
        Next
    End With

    Application.CutCopyMode = False
    Application.ScreenUpdating = True

End Sub
Herzliche Grüße aus dem Rheinland
Jörg

[Windows 10, Microsoft 365]
Antwortento top


Gehe zu:


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