Hallo zusammen,
habe eig nur ein simples Problem, stehe aber trotzdem an mit meinem Grundlegenden VBA-Kenntnissen.
habe ein Programm geschrieben welches (bis jetzt) ein File einliest und dieses dann weiter verarbeitet, nun soll aber nicht nur ein File aufeinmal eingelesen werden können, sondern so viele wie man will (aufeinmal).
Ich weiß aber nicht wie man einen Multiselect macht und da ich meinen Code schon auf den Singleselect getrimmt habe, finde ich keine passenden Beispiele im Internet dafür.
Hoffe mir kann jemand helfen, folgend der VBA-Code
MfG Dima
Sub Unproduktivität()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'Variablen
Dim strFile As Variant
Dim geöffneteDatei As Workbook
Dim erste_freie_Zeile As Long
Dim zeile As Long
Dim Ende As Long
Dim LRow As Integer
Dim Kalenderwoche As Integer
Dim Kalenderjahr As Integer
Dim wksWeek As Worksheet
Dim wksAll As Worksheet
Dim dtCurrent As Date, dtMonday As Date, dtRow As Date
Dim lngRowLastEntry As Long, lngRowMonday As Long
Dim lngFirstCol As Long, lngLastCol As Long
Dim i As Long
Worksheets("Daten_pro_Woche").Activate
Range("A1:F30").Select
Selection.Delete
Worksheets("Zwischenablage").Activate
Range("A1:R300").Select
Selection.Delete
'Datei auswahl
strFile = Application.GetOpenFilename
Set geöffneteDatei = Workbooks.Open(Filename:=strFile)
'Überschreiben von Datenbank File auf Excel Datei
Set geöffneteDatei = ActiveWorkbook
'Datenimport & entfernen von header leerzeile
Range("A1:R300").Copy
ThisWorkbook.Activate
Sheets("Zwischenablage").Activate
Range("A1").Select
ActiveSheet.Paste
Range("A1").Select
Ende = Range("A3").End(xlDown).Row
Do Until i = Ende
If ActiveCell.Value = "" Then
ActiveCell.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
i = i + 1
Loop
geöffneteDatei.Close
ThisWorkbook.Activate
' spaltenKopieren
Worksheets("Zwischenablage").Activate
Columns("A:A").Select
Selection.NumberFormat = "m/d/yyyy"
Range("A1:A150,E1:E150,G1:G150,L1:L150,N1:N150,O1:O150").Select
Selection.Copy
Sheets("Alle_Daten").Activate
Range("A1").Select
If ActiveCell = "" Then
ActiveSheet.Paste
Else
'freie Zeile suchen für Kopie in Alle_Daten
erste_freie_Zeile = Cells(Rows.Count, 1).End(xlUp).Row
Cells(erste_freie_Zeile + 1, 1).Select
ActiveSheet.Paste
For zeile = Range("A65536").End(xlUp).Row To 2 Step -1
If Cells(zeile, 1).Interior.ColorIndex = 6 Then
Rows(zeile).Delete
End If
Next zeile
End If
'kalenderwoche einfügen
Sheets("Alle_Daten").Select
Range("G1").Select
ActiveCell.Value = "Kalenderwoche"
Range("G1").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
Selection.Font.Bold = True
End With
Columns("A:G").Select
Selection.EntireColumn.AutoFit
Range("G2").Select
LRow = Cells(Rows.Count, 1).End(xlUp).Row
Kalenderwoche = FormulaR1C1 = "=WEEKNUM(RC[-6],21)"
MsgBox (Kalenderwoche)
'ActiveCell.FormulaR1C1 = "=WEEKNUM(RC[-6],21)"
Range("G2").AutoFill Destination:=Range("G2:G" & LRow), Type:=xlFillDefault
Set wksAll = ThisWorkbook.Worksheets("Alle_Daten")
Set wksWeek = ThisWorkbook.Worksheets("Daten_pro_Woche")
lngFirstCol = 1
lngLastCol = 7
lngRowLastEntry = wksAll.Cells(Rows.Count, lngFirstCol).End(xlUp).Row
'Letztes Datum in der ersten Spalte
dtCurrent = CDate(Int(wksAll.Cells(lngRowLastEntry, lngFirstCol).Value))
'Montag dieser Woche
dtMonday = DateAdd("d", -((Weekday(dtCurrent) + 5) Mod 7), dtCurrent)
' Zeile suchen, die vor dem Montag der Woche liegt
i = lngRowLastEntry
Do
i = i - 1
dtRow = wksAll.Cells(i, lngFirstCol).Value
Loop Until dtRow < dtMonday And i > 2
' erste zu kopierende Zeile
lngRowMonday = i + 1
' Wochendaten löschen
wksWeek.usedRange.ClearContents
' Wochendaten neu kopieren
wksAll.Range(Cells(lngRowMonday, lngFirstCol).Address, Cells(lngRowLastEntry, lngLastCol).Address).Copy wksWeek.Range("A2")
'Headerzeile hinzufügen
Sheets("Alle_Daten").Activate
Range("A1:G1").Select
Selection.Copy
Sheets("Daten_pro_Woche").Activate
Range("A1").Select
ActiveSheet.Paste
Columns("A:G").Select
Selection.EntireColumn.AutoFit
'duplikate entfernen
Sheets("Alle_Daten").Select
Application.CutCopyMode = False
Columns("A:G").Select
ActiveSheet.Range("$A$1:$G$250000").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7), Header:=xlYes
'refresh pivot
Sheets("Pivot_aktuelle_Woche").Select
ActiveSheet.ChartObjects("Diagramm 2").Activate
ActiveChart.PivotLayout.PivotTable.PivotCache.Refresh
Sheets("Pivot_gesamt").Select
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.PivotLayout.PivotTable.PivotCache.Refresh
Worksheets("Start").Activate
MsgBox ("Kopieren aller Daten erfolgreich beendet")
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
|