Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1400to1404
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Import bestimmter Mitarbeiter

VBA Import bestimmter Mitarbeiter
08.01.2015 11:20:53
Markus
Hallo liebe Excel-Anwender,
hallo VBA-Experten,
ich stehe aktuell vor einer Herausforderung, welche ich ohne eure Hilfe nicht lösen kann. Es geht bei dieser VBA Lösung um Import Export von Rohdaten bestimmter Mitarbeiter, die in meinem TEAM sind ergo es sollen ausschließlich nur meine Mitarbeiter importiert werden. Die Rohdaten werden täglich mit neuen Tagen (Mitarbeiterschichten) gepflegt sodass ich hier auf ein Klick mir die fehlenden Tage der Mitarbeiter holen will.
Die Daten sollen aus der Datei AHT-Rohdaten in die Mitarbeiter_2015 importiert werden.
Suche in der Spalte AC (Team) nach Markus und importiere die Zeile mit allen Inhalten SOFERN diese nicht bereits in der Mitarbeiter_2015 drin sind.
Rohdaten:
https://www.herber.de/bbs/user/94831.xlsx
Mitarbeiter_2015:
https://www.herber.de/bbs/user/94833.xlsx
Besten Dank für eure Unterstützung evtl. Verbesserungsvorschläge

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Import bestimmter Mitarbeiter
08.01.2015 12:01:59
Markus
Bis jetz bin ich wie folgt vorgegangen:
Sub DatenEinlesen()
Workbooks.Open Filename:="\\C:\Users\Administrator\Desktop\AHT_Rohdaten.xlsx", UpdateLinks:= _
3, Notify:=False
Sheets("RD CD").Columns("A:AS").Copy
Windows("Mitarbeiter_2015.xlsx").Activate
Sheets("AHT Rohdaten").Range("A1").PasteSpecial Paste:=xlValues
Windows("AHT_Rohdaten.xlsx").Close False
End Sub
Hier habe ich das Problem dass alles importiert wird unabhängig von KW oder Teamzugehörigkeit

AW: VBA Import bestimmter Mitarbeiter
08.01.2015 13:30:24
Klaus
Bitte mehr Mühe geben, immerhin willst DU Hilfe erhalten!
Dein Makro und deine Musterdateien passen nicht überein. Ein Sheets("AHT Rohdaten") gibt es nicht. Doppelte Mitarbeiter gibt es nicht. Das einzige Team in den Rohdaten ist "Markus". Usernamen sind nicht doppelt (einmal MITARBEITER1, einmal USER1 - schlampig anonymisiert). Die Datenstruktur von "Mitarbeiter2015.xlsx" ist nicht klar.
Im ersten Eintrag willst du nur nach Namen suchen, im zweiten Beitrag plötzlich nach Kalenderwochen. Wie und wo diese stehen, muss der Helfer erraten?
Ich poste dir mal ein Makro, dass alle "Markus-Team" Einträge der Rohdaten in Tabelle2 deines Blatts einfügt, unterhalb eventuell schon vorhandener Einträge, und dann Duplikate löscht.
Den Autofilter kannst du ausweiten und ihn nach Namen UND Kalenderwoche suchen lassen, ebenso musst du alles andere selber an deine "richtige" Datei anpassen. Selbst Schuld!

Sub DatenEinlesen()
Dim wkbOld As Workbook
Dim wkbNew As Workbook
Dim lRowLast As Long
Dim lRowMA As Long
Set wkbOld = ActiveWorkbook
Call FileCheckOpen("\\C:\Users\Administrator\Desktop", "AHT_Rohdaten.xlsx")
Set wkbNew = ActiveWorkbook
With Sheets("RD CD")  '.Columns("A:AS").Copy
lRowLast = .Cells(.Rows.Count, 1).End(xlUp).Row
If .AutoFilterMode Then .Cells.AutoFilter 'Turns OFF Autofilter, if any
.Range(.Cells(1, 29), .Cells(lRowLast, 29)).AutoFilter
.Range("$AC$1:$AC$1").AutoFilter Field:=1, Criteria1:="Markus"
.Range("A2:AC" & lRowLast).SpecialCells(xlCellTypeVisible).Copy
End With
wkbOld.Activate
'Sheets("AHT Rohdaten").ClearContents
With Sheets("AHT Rohdaten")
lRowMA = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Range("A" & lRowMA).PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
lRowMA = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
'die SPALTEN zum Remove-Duplicate Befehl kannst du selber anpassen!
.Range("$A$1:$AS$" & lRowMA).RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6 _
, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,  _
29, 30, 31, 32, 33, _
34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45), Header:=xlYes
End With
wkbNew.Close False
End Sub
Sub FileCheckOpen(sPath As String, sFile As String)
sPath = sPath & "/" & sFile
If WkbExists(sFile) = False Then
If Dir(sPath) = "" Then
MsgBox "File " & sPath & " not found!"
Else
Workbooks.Open sPath, UpdateLinks:=False
End If
Else
Workbooks(sFile).Activate
End If
End Sub
Function WkbExists(sFile As String) As Boolean
Dim wkb As Object
On Error Resume Next
Set wkb = Workbooks(sFile)
If Not wkb Is Nothing Then
WkbExists = True
End If
On Error GoTo 0
End Function
Function WksSheetExists(sSheet As String) As Boolean
Dim wks As Object
On Error Resume Next
Set wks = Sheets(sSheet)
If Not wks Is Nothing Then
WksSheetExists = True
End If
On Error GoTo 0
End Function
Grüße,
Klaus M.vdT.

Anzeige
AW: VBA Import bestimmter Mitarbeiter
09.01.2015 10:40:02
Markus
Hallo Klaus,
zuerst besten Dank für deine Antwort. Die Rohdaten habe ich natürlich angepasst damit diese Datei für dieses Forum schlanker ist. Tatsächlich sind in dieser AHT_Rohdaten, je nach Call-Volumen, bis zu 2000 Call-Daten pro User. Hier findet man auch weitere Mitarbeiter und deren Teamzugehörigkeit. Zu jedem Mitarbeiter gibt es auch einen User Bspw. Mitarbeiter1 hat User1 oder Maik Mustermann wäre dann MUST01. Ein Sheet AHT Rohdaten fehlt in der Tat, dies bitte ich zu entschuldigen.
ICh wollte mich hier kurz und prägnant halten daher habe ich alles auf wesentliche minimiert.
Eine letzte Frage/Bitte hätte ich. Bis jetzt wird nach dem AHT ROhdaten WKB autom. gesucht kann man das so programmieren dass ich beim Ausführen dieses Codes nach dieser Datei gefragt werde und die manuel aussuchen kann. Hintergrund jede dieser AHT Rohdaten Datei wird nach dem Ende einer KW woanders abgelegt.
Danke vielmals

Anzeige
AW: VBA Import bestimmter Mitarbeiter
09.01.2015 12:00:29
Klaus
Hi,
um die armen User nicht zu überfordern, lässt du sie das File am besten über den Windows-Dialog aussuchen, das kennt jeder schon. Kopiere dazu dieses Makro in dein Modul, Texte kannst du ja etwas anpassen.
Public Function ChooseAFile(sPathStart)
Dim sFile As String
With Application.FileDialog(msoFileDialogFilePicker)
.InitialFileName = sPathStart
.Title = "Pick a File"
.ButtonName = "choose..."
.InitialView = msoFileDialogViewList
If .Show = -1 Then
sFile = .SelectedItems(1)
Else
sFile = ""
End If
End With
If sFile = "" Then
ChooseAFile = ""
'MsgBox ("no File!")
Else
ChooseAFile = sFile
End If
End Function

Im Makro selbst ersetzt du dann den Pfad gegen das Pick-A-File Makro. Also statt
Call FileCheckOpen("\\C:\Users\Administrator\Desktop", "AHT_Rohdaten.xlsx")
setzt du dieses:
Dim MyFileName As String
MyFileName = ChooseAFile("C:\")
Call FileCheckOpen(WorksheetFunction.Substitute(MyFileName, Dir(MyFileName), ""), Dir( _
MyFileName))
Grüße,
Klaus M.vdT.

Anzeige
AW: VBA Import bestimmter Mitarbeiter
10.01.2015 09:40:26
Markus
Hallo Klaus,
nun klappt alles auf die abgespeckte Version der Rohdaten wunderbar. Nun wähle ich die echten Rohdaten aus die nebenbei als xlsm + bereits vorhanden Filter gespeichert/formatiert ist. Dazu kommen noch in der orig. Rohdatei diverse SVERWEISE welche bspw. den User ermitteln / die Line-Bezeichnung. Wende ich deinen Code auf diese Datei so wird der Filter auf der Spalte A gesetzt und ein leerer Bereich kopiert und in meine Mitarbeiter Datei eingefügt ergo ich hab keine Daten importiert da vorher auf in der A Spalte Filter gesetzt wurde.
Komischerweiser funktioniert alles wenn die RD CD Daten in einer Test-Datei ohne Formel und Filter und als xlsx gespeichert ist.
Daher habe ich die originale Rohdaten Datei hochgeladen:
gdrive: http://goo.gl/s6hv0J
dropbox: https://www.dropbox.com/s/4mqgtrirjirhc1o/AHT-Report_2015-KW_01.xlsx?dl=0
.
@Klaus kennst du die Ursache und evtl. die Lösung? Besten Dank für deine Unterstützung
ps hätte ich gleich die echte Rohdatei hochgeladen...sry dafür

Anzeige
kein Dropbox, sorry
12.01.2015 11:33:20
Klaus
Hallo Markus,
ich lade nichts von externen Hostern, sorry.
In meinem Codebeispiel wird hier der Autofilter gesetzt:
   With Sheets("RD CD")  '.Columns("A:AS").Copy
lRowLast = .Cells(.Rows.Count, 1).End(xlUp).Row
If .AutoFilterMode Then .Cells.AutoFilter 'Turns OFF Autofilter, if any
.Range(.Cells(1, 29), .Cells(lRowLast, 29)).AutoFilter
.Range("$AC$1:$AC$1").AutoFilter Field:=1, Criteria1:="Markus"
.Range("A2:AC" & lRowLast).SpecialCells(xlCellTypeVisible).Copy
End With

Ist in den Rohdaten bereits ein Autofilter oder Spezialfilter vorhanden, funktioniert das leider nicht. Wenn du sagst der Filter wird in A gesetzt, dann vermute ich:
.Range("$AC$1:$AC$1").AutoFilter Field:=1, Criteria1:="Markus"
dass hier "Field:=1" auf den vorhandenen Filter zurück greift statt einen neuen zu setzen. Workaround, aber ungetestet:
diese Zeilen auskommentieren:
If .AutoFilterMode Then .Cells.AutoFilter 'Turns OFF Autofilter, if any
.Range(.Cells(1, 29), .Cells(lRowLast, 29)).AutoFilter

und den Filter in AC, also in Feld 29, setzen:
.Range("A1:AC1").AutoFilter Field:=29, Criteria1:="Markus"
Wenn in der Originaldatei IMMER ein Autofilter von A bis AC oder weiter gesetzt ist, könnte das funktionieren.
Grüße,
Klaus M.vdT.

Anzeige
AW: kein Dropbox, sorry
12.01.2015 21:37:21
Markus
danke danke danke ....die letzte Frage habe ich reicht das um den Filter um Criteria2:="CallIn" zu ergänzen? Bzw. muss da iwo zwischen ein AND gesetzt werden?
Hintergrund: Um weniger Daten ich importieren um so schneller ist meine Datei bei der Rechenleistung.
With Sheets("RD CD") '.Columns("A:AS").Copy
lRowLast = .Cells(.Rows.Count, 1).End(xlUp).Row
If .AutoFilterMode Then .Cells.AutoFilter 'Turns OFF Autofilter, if any
.Range(.Cells(1, 29), .Cells(lRowLast, 29)).AutoFilter
.Range("$AC$1:$AC$1").AutoFilter Field:=29, Criteria1:="Tomasz"
.Range("$A$1:$A$1").AutoFilter Field:=1, Criteria2:="CallIn"
.Range("A2:AS2" & lRowLast).SpecialCells(xlCellTypeVisible).Copy
End With

Anzeige
AW: kein Dropbox, sorry
13.01.2015 12:04:16
Klaus
Hallo Markus,
zeichne den gewünschten Filter-Vorgang doch einmal mit dem Makrorekorder auf. Dann hast du einen Mustercode, wie zwei Filtervorgänge in einem Filter aussehen. Ich müsste jetzt das gleiche tuen!
Grüße,
Klaus M.vdT.

AW: kein Dropbox, sorry
13.01.2015 15:03:08
Markus
(headbang) :) stimmt sorry ...und danke nochmal für deinen Support VG aus Hamburg

Danke für die Rückmeldung! owT.
13.01.2015 15:31:21
Klaus
.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige