Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1300to1304
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

Hilfe: Autofilter - Abgleich - Ergänzung !

Hilfe: Autofilter - Abgleich - Ergänzung !
20.02.2013 08:36:45
Basti
Hallo,
ich bin kompletter VBA-Anfänger und stehe vor einem Problem.
Wäre super nett, wenn mit jemand helfen könnte.
Um folgendes geht es:
Ich habe zwei Tabellen.
Tabelle 1 in Datei1:
Diese Tabelle enthält sämtliche im Betrieb vorhandenen, ausgetretenen und in EZ befindlichen Mitarbeiter mit ihren identifizierenden Personalnummern in Spalte C und Zusatzinformationen in den Zeilen. Die Tabelle ist dabei gefiltert auf in einer Hilfspalte in Spalte A festgelegte Kürzel für "aktiv im Betrieb stehend" mit Kürzelbezeichnung "P1" und "" (leer) . "Nicht aktiv" hat die Kürzel "P2","EZ" und "A" . Die Mitarbeiter beginnen dabei ab Zeile 66.
Visuell sieht die Tabelle etwa so aus: (Autofilter auf entweder P1 oder leer in Spalte A)
..........[A] ..........[C] ...
66......P1..........12345..........Zusatzinfos für Mitarbeiter 1 (aktiv)
67......EZ..........35498..........Zusatzinfos für Mitarbeiter 2 (inaktiv)
68......A............35135..........Zusatzinfos für Mitarbeiter 3 (inaktiv)
69......" "...........68464..........Zusatzinfos für Mitarbeiter 4 (aktiv)
70......P1...........35463..........Zusatzinfos für Mitarbeiter 5 (aktiv)
...
...
Tabelle 2 in Datei2:
Diese Tabelle ist die Plandatei für die Jahresurlaubsverteilung der Mitarbeiter, hierfür benötigt die Tabelle NUR die aktiven Mitarbeiter. Alle Mitarbeiter zu übernehmen und in dieser Tabelle zu filtern ist dabei nicht möglich.
In Spalte A befindet sich dabei wieder die Personalnummer.
Visuell kann man sich diese Tabelle so vorstellen:
[A] .....
12345..........Zusatzinfos für Mitarbeiter 1 (aktiv) + Urlaubsplanung
68464..........Zusatzinfos für Mitarbeiter 4 (aktiv) + Urlaubsplanung
35463..........Zusatzinfos für Mitarbeiter 5 (aktiv) + Urlaubsplanung
35435..........Zusatzinfos für Mitarbeiter 7 (aktiv) + Urlaubsplanung
68454..........Zusatzinfos für Mitarbeiter 8 (aktiv) + Urlaubsplanung
...
...
Ziel:
Ich versuche jetzt mir einen Code so auszulegen, dass Mitarbeiterveränderungen, sei es ein Aktiv/Inaktiv-Wechsel oder wenn neue Mitarbeiter hinzukommen, nur in Tabelle1 eingetragen werden müssen und nach dem Öffnen der Tabelle2 dort automatisch angefügt werden.
Tabelle2 soll nach dem Öffnen die Personalnummern in Spalte A mit denen der Tabelle1 (nur die gefilterten Zeilen mit Kürzel "P1" oder "" von Tabelle 1) in Spalte C durchgehen und vergleichen. Wenn eine Personalnummer in Tabelle1 als aktiv gekennzeichnet ist, diese in Tabelle2 aber nicht vorhanden ist, soll diese ans untere Ende der Tabelle 2 angefügt werden.
Bisher habe ich leider keinen Erfolg damit.
Habe untenstehenden Code entworfen, der leider noch nicht funktioniert. Ich habe wie gesagt wenig Ahnung von VBA, eher Java-Grundkenntnisse, deswegen Sorry wenn das totaler Mist ist, was nachfolgend steht.
Code:
Dim iter1 As Long
Dim iter2 As Long
Dim numberOfElements As Long
Dim wertTab1 As Long
Dim check As String
iter1 = 66
iter2 = 7
While iter1  wertTab1
And Sheets("Tabelle2").Cells(iter2, "A")  ""      Then
iter2 = iter2 + 1
numberOfElements = ThisWorkbook.Worksheets(1).UsedRange.Rows.Count + 1
Sheets("Tabelle2").Cells(numberOfElements, "A") = wertTab1
Wend
End If
Wend
End If
iter1 = iter1 + 1
Wend

Bin für jeden Hinweis dankbar!
Ich hoffe, mir kann jemand helfen.
Beste Grüße,
BB

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Hilfe: Autofilter - Abgleich - Ergänzung !
20.02.2013 09:16:28
Klaus
Hallo BB,
der Code sieht für einen VBA-Neuling doch sehr gut aus. Kein Select, kein Activate, alles sauber bezeichnet!
Spontan fällt mir in deinem Code auf, dass ich in VBA wenn Möglich die "wend" schleifen vermeiden würde und stattdessen FOR-NEXT benutzen. Aber darüber kann man an anderer Stelle streiten.
Dein Vorhaben ist doch einen Tick größer als "nur eben eine Formel ändern". Es wäre total toll, wenn du zu deinem Text noch eine Musterdatei hochlädst.
Grüße,
Klaus M.vdT.
Basti B. --- ist dein zweiter Vorname zufällig "Linus" und du kommst aus Norddeutschland?

Anzeige
AW: Hilfe: Autofilter - Abgleich - Ergänzung !
20.02.2013 10:46:06
Klaus
Hi,
dieser Code funktioniert in deiner Musterdatei. Er müsste auch bei zwei getrennten Dateien funktionieren, dafür musst du die Zeile
'workbook.open("C:\Pfad\Datei.xlsx")
einkommentieren und natürlich den korrekten Pfad angeben.
Das ganze Makro rufst du aus Tabelle1 heraus auf (also aus dem Workbook, das du mit "Tabelle1" simulierst).
Die Filterung habe ich ignoriert (das ist ein beliebter Fehler, vergessen zu Filtern bevor das Makro gestartet wird). Stattdessen überprüfe ich die von dir genannten Filterkriterien direkt im Makro.
Kannst du zu 100% sicherstellen dass IMMER korrekt gefiltert ist, kann man das auch kürzen und so das Makro ein Stück performanter machen.
Ich hab grad nen Blackout, wie ich ein workbook korrekt refenziere, darum hab ich mit .activates geschummelt. Kann man noch eleganter machen.
Option Explicit
Sub UebertrageNachTabelle2()
Dim lRowFirst As Long
Dim lRowLast As Long
Dim lRowLast2 As Long
Dim wksOld As Worksheet
Dim wkbOld As Workbook
Dim wksNew As Worksheet
Dim wkbNew As Workbook
Dim rPerson As Range
Set wkbOld = ActiveWorkbook
Set wksOld = Sheets("Tabelle1")
'workbook.open("C:\Pfad\Datei.xlsx") 'setzt das neue Workbook ins Focus
Set wkbNew = ActiveWorkbook
Sheets("Tabelle2").Activate     'gehe ins richtige Blatt
Set wksNew = ActiveSheet
Application.ScreenUpdating = False
wkbOld.Activate
wksOld.Activate
With ActiveSheet
'erste Zeile
lRowFirst = 66
'letzte Zeile
lRowLast = .Cells(.Rows.Count, 4).End(xlUp).Row
'gehe Personal durch
For Each rPerson In .Range(.Cells(lRowFirst, 1), .Cells(lRowLast, 1))
'Prüfe nach P1 oder leer
If rPerson.Value = "P1" Or IsEmpty(rPerson) Then
'Prüfe nach aktiv
If .Cells(rPerson.Row, 18).Value = "(aktiv)" Then
wkbNew.Activate
wksNew.Activate
'prüfe, ob PersNr schon vorhanden
If Application.WorksheetFunction.CountIf(ActiveSheet.Range("A1").EntireColumn, . _
Cells(rPerson.Row, 4).Value) = 0 Then
lRowLast2 = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1
ActiveSheet.Cells(lRowLast2, 1).Value = .Cells(rPerson.Row, 4).Value
End If
wkbOld.Activate
wksOld.Activate
End If
End If
Next rPerson
End With
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Hilfe: Autofilter - Abgleich - Ergänzung !
20.02.2013 11:21:50
Basti
Vielen Dank Klaus, der Code funktioniert ja schomal perfekt in der Musterdatei!! :-)
Ein Problem habe ich jetzt aber noch:
Ich muss das Makro aus der Tabelle2 (also der Urlaubsplandatei) aufrufen können.
Tabelle 2 soll sich ja selbst aktualisieren, nachdem sie geöffnet wurde und nicht, nachdem ich den Befehl zur Aktualisierung aus Tabelle 1 aufgerufen habe.
Und zusätzlich, wie kann ich Tabelle1 anschließend wieder schließen lassen, so dass ich am Ende nur die geöffnete Datei2 habe?
Gruß BB

AW: Hilfe: Autofilter - Abgleich - Ergänzung !
20.02.2013 11:47:00
Klaus
Hi,
Ich muss das Makro aus der Tabelle2 (also der Urlaubsplandatei) aufrufen können.
Das müsste gehen, wenn du am Anfang die SET und OPEN dinge etwas hin und her drehst:
Set wkbNew = ActiveWorkbook
Sheets("Tabelle2").Activate     'gehe ins richtige Blatt
Set wksNew = ActiveSheet
'workbook.open("C:\Pfad\VonTabelle1Simuliert.xlsx") 'setzt das neue Workbook ins Focus
Set wkbOld = ActiveWorkbook
Sheets("Tabelle1").Activate
Set wksOld = ActiveSheet

mit dem Teil zwischen den DIM und den Application.Screenupdating tauschen.
Das Makro muss dann natürlich auch im von Tabelle2 simuliertem Workbook stehen, das ist klar.
Tabelle 2 soll sich ja selbst aktualisieren, nachdem sie geöffnet wurde
Dann schreibst du einen Call in die WorkBook-Open der Tabelle 2 - korrekt, dem Workbook, das in der Musterdatei von Tabelle2 simuliert wurde.
Tabelle1 anschließend wieder schließen lassen, so dass ich am Ende nur die geöffnete Datei2 habe?
wkbOld.close hinten an den Code.
Anmerkung: nicht Tabelle1, sondern "Das Workbook, das in der Musterdatei von Tabelle1 simuliert wurde".
Grüße,
Klaus M.vdT.

Anzeige
AW: Hilfe: Autofilter - Abgleich - Ergänzung !
20.02.2013 13:54:30
Basti
Also vielleich stelle ich mich auch doof an, aber ich erhalte ständig Fehlermeldungen wenn ich 2 Dateien benutze.
Habe die Musterdatei getrennt in 2 verschiedene Dateien und habe alles eingefügt wie du (Klaus) erklärt hast.
Jetzt hatte ich zuerst einen Indexfehler, dann einen Objektfehler.
Es scheint als würde den erstellten Objekten die falschen Sheets bzw Workbooks zugeweisen werden.
Kann das sein?
Wäre super wenn du nochmal drüberschauen könntest oder noch besser, es selbst mal mit 2 Dateien testest.
Danke schonmal!

OT: meine andere Frage
20.02.2013 11:49:13
Klaus
Hi,
meine andere Frage hattest du glaube ich übersehen:
Basti B. --- ist dein zweiter Vorname zufällig "Linus" und du kommst aus Norddeutschland?
oder anders gefragt: kenne ich dich, oder ist es eine zufällige Namensgleichheit?
Grüße,
Klaus M.vdT.

Anzeige
AW: OT: meine andere Frage
20.02.2013 11:57:02
Basti
Sry, hatte ich tatsächlich übersehen.
Handelt sich um eine zufällige Namensgleichheit, heiße weder Linus noch komme ich aus Norddeutschland!
Dir nochmal vielen Dank!
Viele Grüße, BB

Danke für die RÜ! owT.
20.02.2013 12:47:38
Klaus
.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige