gestern war ich etwas übermütig und dachte ich habe das Problem bewältigt bekommen, aber scheinbar doch nicht.
Also ich habe ein Makro dass auf Seite 1 nur ein Startbutton hat
Seite 2-6 sollen im Makro erst geleert, dann befüllt und dann formatiert werden.
Umgesetzt hatte ich das indem er immer für jeden Schritt jedes der 5 Sheets öffnet und den Vorgang durchführt.
Um es performanter zu machen, versuche ich die Vorgänge durchzuführen ohne die Sheets zu aktivieren/öffnen.
Beim Clearen hat es geklappt mit
For i = 2 To Worksheets.Count
With Worksheets(i)
.Cells.Clear
If .ChartObjects.Count > 0 Then
.ChartObjects.Delete
End If
End With
Next
Jetzt habe ich es mit dem Import umschreiben versucht.Aus
For k = 1 To 4
'Import einer leeren Datei
If FileLen(pfad1 & k & "'_'" & enddatum2 & "'.csv") = 0 Then
Set ws = ActiveWorkbook.Sheets("R" & k)
Worksheets(k + 1).Activate
Call nodata
'Import einer nicht leeren Datei
Else
Set ws = ActiveWorkbook.Sheets("R" & k)
Worksheets("R" & k).Activate
Zeilenzahl = Selection.CurrentRegion.Rows.Count
With ws.QueryTables.Add(Connection:="TEXT;" & pfad1 & k & "'_'" & enddatum2 & "' _
.csv", Destination:=ws.Range("B" & Zeilenzahl + 1))
.TextFileParseType = xlDelimited
.TextFileCommaDelimiter = True
.Refresh
End With
End If
Next
Private Sub nodata()
Range("B1").Select
Zeilenzahl = Selection.CurrentRegion.Rows.Count
Range("B" & Zeilenzahl + 1).Value = "keine Daten"
Range("C" & Zeilenzahl + 1).Value = "von"
Range("D" & Zeilenzahl + 1).Value = enddatum - 1
Range("E" & Zeilenzahl + 1).Value = "6 Uhr früh"
Range("F" & Zeilenzahl + 1).Value = "bis"
Range("G" & Zeilenzahl + 1).Value = enddatum
Range("H" & Zeilenzahl + 1).Value = "6 Uhr"
Range("I" & Zeilenzahl + 1).Value = "früh"
End Sub
wurde For k = 1 To 4
'Import einer leeren Datei
If FileLen(pfad1 & k & "'_'" & enddatum2 & "'.csv") = 0 Then
Set ws = ActiveWorkbook.Sheets("R" & k)
Call nodata
'Import einer nicht leeren Datei
Else
Set ws = ActiveWorkbook.Sheets("R" & k)
ActiveWorkbook.Sheets(k+1).Range("B1").Select
Zeilenzahl = Selection.CurrentRegion.Rows.Count
With ws.QueryTables.Add(Connection:="TEXT;" & pfad1 & k & "'_'" & enddatum2 & "' _
.csv", Destination:=ws.Range("B" & Zeilenzahl + 1))
.TextFileParseType = xlDelimited
.TextFileCommaDelimiter = True
.Refresh
End With
End If
Next
Private Sub nodata()
ActiveWorkbook.Sheets(k).Range("B1").Select
Zeilenzahl = Selection.CurrentRegion.Rows.Count
ActiveWorkbook.Sheets(k+1).Range("B" & Zeilenzahl + 1).Value = "keine Daten"
ActiveWorkbook.Sheets(k+1).Range("C" & Zeilenzahl + 1).Value = "von"
ActiveWorkbook.Sheets(k+1).Range("D" & Zeilenzahl + 1).Value = enddatum - 1
ActiveWorkbook.Sheets(k+1).Range("E" & Zeilenzahl + 1).Value = "6 Uhr früh"
ActiveWorkbook.Sheets(k+1).Range("F" & Zeilenzahl + 1).Value = "bis"
ActiveWorkbook.Sheets(k+1).Range("G" & Zeilenzahl + 1).Value = enddatum
ActiveWorkbook.Sheets(k+1).Range("H" & Zeilenzahl + 1).Value = "6 Uhr"
ActiveWorkbook.Sheets(k+1).Range("I" & Zeilenzahl + 1).Value = "früh"
End Sub
Natürlich nimmt er die Befehle nicht an, weder mit Worksheets(k+1) noch mit der angegebenen Variante.evtl benötigte Infos:
die Sheets heißen (ab Sheet 2) R1, R2, R3, R4, R5
es gibt noch ein weiteres Sheet (Sheet 7) was für das Makro aber keine Rolle spielt.
und ja ich weiß da ist der Import nur von R1 bis R4, ist auch hier so gewollt.
Und bei der Formatierung (3. Schritt des Makros, habe ich es auch nicht hinbekommen.
For i = 2 To 6
Worksheets(i).Activate
Application.DisplayAlerts = True
zeilen = Cells(Rows.Count, 2).End(xlUp).Row
Range("A1").Value = "Barcode"
Columns("A:A").ColumnWidth = 9.71
Range("B1").Value = "Masterbarcode"
Columns("B:B").ColumnWidth = 15.57
Range("C1").Value = "anzPanel"
Columns("C:C").ColumnWidth = 10.29
Range("D1").Value = "DatumREHM"
Columns("D:D").ColumnWidth = 14.43
Range("E1").Value = "DiffTsec_zu_ECU_vorher"
Columns("E:E").ColumnWidth = 24
Range("F1").Value = "Schicht"
Columns("F:F").ColumnWidth = 8.57
Range("G1").Value = "BTname"
Columns("G:G").ColumnWidth = 9.43
Range("H1").Value = "irepcode"
Columns("H:H").ColumnWidth = 10.14
Range("I1").Value = "crepcode"
Columns("I:I").ColumnWidth = 38.86
Range("J1").Value = "PIN"
Columns("J:J").ColumnWidth = 5.43
Range("K1").Value = "AnalyseTyp"
Columns("K:K").ColumnWidth = 12.43
Range("L1").Value = "LIBname"
Columns("L:L").ColumnWidth = 18.86
Range("A1:L1").Font.Bold = True
For k = 2 To zeilen
barcode = Range("B" & k).Value
Range("A" & k).Value = Left(barcode, 4)
Next k
'Filter aktivieren
If ActiveSheet.AutoFilterMode Then
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
Else
Rows(1).AutoFilter
End If
Next
Freundliche Grüße und danke im Voraus!Burak