Clever-Excel-Forum

Normale Version: Makro - Fehler beim kompilieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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
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
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?
Jetzt wird's ein Ratespiel.

Wie ist lCol1 definiert?
Und was steht in Cells(2, LCol1)?
Ich habe mal eine Testdatei angehängt aus der hoffentlich alles ersichtlich wird :)
Hallo,

dein Makro referenziert auf die Zeilen mit den Überschriften, soll das so sein? Wohl eher nicht.
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.
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