Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1588to1592
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

Schulungsplan - Auslesen über Überschrift

Schulungsplan - Auslesen über Überschrift
17.11.2017 13:12:10
Daniel
Guten Tag,
ich möchte gerne noch einmal das Thema Schulungsplan aufrufen.

https://www.herber.de/cgi-bin/callthread.pl?index=1589734

Besteht die Möglichkeit anhand der Überschriften, die in den Arbeitsblättern immer gleichbleibend sind, die Daten auswerten zu lassen.
Folgende Überschriften sind einzubinden:
Teilnehmer
Schulungstitel
Ist-Termin
Art der Wirksamkeitsprüfung
Bewertung der Schulung
Bewertung durch GF
Grund wieso ich nach dieser Lösung frage ist, da der Aufbau der Tabellen je Arbeitsblatt doch etwas anders ausfallen können. Spalten ausgeblendet werden, eine weitere nur für ein bestimmtes Arbeitsblatt hinzukommt, etc.
Wäre sehr dankbar für einen möglichen Lösungsansatz.
Beste Grüße
Daniel

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schulungsplan - Auslesen über Überschrift
17.11.2017 14:10:18
Werner
Hallo Daniel,
vermutlich mal ja. Mehr kann man dazu aber nicht sagen. Niemand weiß, was du wie und wo auswerten willst.
Gruß Werner
AW: Schulungsplan - Auslesen über Überschrift
17.11.2017 14:15:16
Daniel
Hi Werner,
sorry der Link funktioniert wohl nicht. Franz hier aus dem Forum hat mir schon einen VBA Code bereitgestellt, der super funktioniert - nur theoretisch müsste da jetzt der Punkt mit den Überschriften noch eingebunden werden.
Ich habe eine Tabelle mit mehreren Arbeitsblättern die vom Aufbau her immer identisch sind.
So ist in Spalte T das "Ist-Datum", in Spalte "W" Bewertung 1, Spalte  "X" Bewertung 2 und  _
Spalte "Z" Bewertung 3.
Folgende Bedingungen sind für die Bewertungsfelder einzuhalten:
Spalte "W" Bewertung 1 -> älter als 2 Monaten
Spalte "X" Bewertung 2 -> älter als eine Woche
Spalte "Z" Bewertung 3 -> älter als 2 Monate
Im Arbeitsblatt "Erinnerung_Bewertung" in der gleichen Excel Datei soll nun in der vorgegeben   _
_
Struktur
die Auswertung erfolgen.
Bereich -> Name des Arbeitsblattes
Schulungsdatum - "Ist-Datum" aus dem jeweiligen Arbeitsblatt
Name - "Teilnehmer" aus dem jeweiligen Arbeitsblatt
Schulungsname - "Schulungstitel" aus dem jeweiligen Arbeitsblatt
Bewertung - Auflisten welche Bewertung fehlt (Bewertung 1, Bewertung 2, Bewertung 3)
Es soll nun geprüft werden, ob für die Bewertungen 1-3 das Ist-Datum hinfällig ist,
wenn kein Eintrag in der Zelle der jeweiligen Bewertung vorhanden ist und das Datum hinfällig   _
_
ist,
soll die Ausgabe in Arbeitsblatt "Erinnerung_Bewertung" erfolgen.
Die Zellen der jeweiligen Bewertung sind jeweils mit einem Dropdown ausgestattet,
in dem dann entweder Bewertung erfolgt, Bewertung nicht erfolgt, oder "leer" enthalten ist.
Ausgabe in Arbeitsblatt "Erinnerung_Bewertung" soll nur stattfinden, wenn Datum hinfällig ist   _
_
und die
Zelle der Bewertung leer ist.

Quellcode von Franz:
Sub Bewertung_ueberfaellig()
Dim wksErin As Worksheet
Dim wksBer As Worksheet
Dim Zei_E As Long, Zei_B As Long
Dim SpaDatum As Long, SpaBew1 As Long, SpaBew2 As Long, SpaBew3 As Long
Dim SpaTeil As Long, SpaSchul As Long
Dim bolPruef As Boolean, bolProblem As Boolean
Dim spaBew As Long
Dim datIst_Datum As Date, strSchul As String, strTeil As String
Dim datBew(1 To 3) As Date, strBew(1 To 3) As String, intBew As Integer
Dim strDatum As String, strMsg As String
Set wksErin = ActiveWorkbook.Worksheets("Erinnerung_Bewertung")
'Spalten in den Bereichsblättern
SpaTeil = 3     'Name Teilnehmer    'anpassen !!
SpaSchul = 15    'Schulungstitel     'anpassen !!
SpaDatum = 20   'Ist-Datum
SpaBew1 = 23    'Bewertung 1
SpaBew2 = 24    'Bewertung 2
SpaBew3 = 26    'Bewertung 3
With wksErin
Zei_E = .Cells(.Rows.Count, 1).End(xlUp).Row
If MsgBox("Altdaten im Blatt """ & .Name & """ löschen?", _
vbYesNo, "Bewertungen prüfen") = vbYes Then
If Zei_E > 1 Then
.Range(.Rows(2), .Rows(Zei_E)).ClearContents
Zei_E = 1
End If
End If
End With
For Each wksBer In ActiveWorkbook.Worksheets
Select Case wksBer.Name
Case wksErin.Name, "Schulung Extern"
'Tabellen ohne Bereichsdaten überspringen, ggf. weitere Namen ergänzen
Case Else
'Bereichs-Tabellen
With wksBer
For Zei_B = 10 To .Cells(.Rows.Count, SpaTeil).End(xlUp).Row - 1
bolProblem = False
With .Cells(Zei_B, SpaDatum)
strDatum = Trim(.Text)
If strDatum = "" Then GoTo Next_Line 'leeres Istdatum überspringen
'Prüfen, ob Bindestrich in Zelltext vorhanden
If InStr(1, .Text, "-") > 0 Then
'Text nach dem Bindestrich als Datum übernehmen
strDatum = Trim(Mid(.Text, InStr(1, .Text, "-") + 1))
End If
If IsDate(strDatum) Then
If UBound(Split(strDatum, "."))  2 Then
'Datm enthält nicht 2 Punkte
bolProblem = True
ElseIf Val(Split(strDatum, ".")(0)) > 31 _
Or Val(Split(strDatum, ".")(0))  12 _
Or Val(Split(strDatum, ".")(1))  "" Then
MsgBox "Blattname - Zeile : Datumseintrag" & strMsg, vbOKOnly + vbInformation, _
"Zeilen mit Problem beim Istdatum"
End If
End Sub

Anzeige
AW: Schulungsplan - Auslesen über Überschrift
17.11.2017 14:20:53
Werner
Hallo Daniel,
und in welcher Zeile stehen die Überschriften?
Gruß Werner
AW: Schulungsplan - Auslesen über Überschrift
17.11.2017 14:22:05
Daniel
Immer in Zeile 9.
Gruß
Daniel
AW: Schulungsplan - Auslesen über Überschrift
17.11.2017 15:49:34
Werner
Hallo Daniel,
die Spalten in den einzelnen Blättern werden jetzt über Find ermittelt. Dazu musste das innerhalb die For-Schleife, die über die entprechenden Blätter läuft.
Voraussetzung ist aber, dass auch in allen Blättern die entsprechenden Überschriften vorhanden sind. Wo die dann sind (in welchen Spalten) ist egal.
Teste mal:
Sub Bewertung_ueberfaellig()
Dim wksErin As Worksheet
Dim wksBer As Worksheet
Dim Zei_E As Long, Zei_B As Long
Dim SpaDatum As Long, SpaBew1 As Long, SpaBew2 As Long, SpaBew3 As Long
Dim SpaTeil As Long, SpaSchul As Long
Dim bolPruef As Boolean, bolProblem As Boolean
Dim spaBew As Long
Dim datIst_Datum As Date, strSchul As String, strTeil As String
Dim datBew(1 To 3) As Date, strBew(1 To 3) As String, intBew As Integer
Dim strDatum As String, strMsg As String
Set wksErin = ActiveWorkbook.Worksheets("Erinnerung_Bewertung")
With wksErin
Zei_E = .Cells(.Rows.Count, 1).End(xlUp).Row
If MsgBox("Altdaten im Blatt """ & .Name & """ löschen?", _
vbYesNo, "Bewertungen prüfen") = vbYes Then
If Zei_E > 1 Then
.Range(.Rows(2), .Rows(Zei_E)).ClearContents
Zei_E = 1
End If
End If
End With
For Each wksBer In ActiveWorkbook.Worksheets
Select Case wksBer.Name
Case wksErin.Name, "Schulung Extern"
'Tabellen ohne Bereichsdaten überspringen, ggf. weitere Namen ergänzen
Case Else
'Bereichs-Tabellen
With wksBer
SpaTeil = Rows(9).Find(What:="Teilnehmer", LookIn:=xlValues, LookAt:=xlWhole). _
Column
SpaSchul = Rows(9).Find(What:="Schulungstitel", LookIn:=xlValues, LookAt:= _
xlWhole).Column
SpaDatum = Rows(9).Find(What:="Ist-Termin", LookIn:=xlValues, LookAt:=xlWhole). _
Column
SpaBew1 = Rows(9).Find(What:="Art der Wirksamkeitsprüfung", LookIn:=xlValues,  _
LookAt:=xlWhole).Column
SpaBew2 = Rows(9).Find(What:="Bewertung der Schulung", LookIn:=xlValues, LookAt: _
=xlWhole).Column
SpaBew3 = Rows(9).Find(What:="Bewertung durch GF", LookIn:=xlValues, LookAt:= _
xlWhole).Column
For Zei_B = 10 To .Cells(.Rows.Count, SpaTeil).End(xlUp).Row - 1
bolProblem = False
With .Cells(Zei_B, SpaDatum)
strDatum = Trim(.Text)
If strDatum = "" Then GoTo Next_Line 'leeres Istdatum überspringen
'Prüfen, ob Bindestrich in Zelltext vorhanden
If InStr(1, .Text, "-") > 0 Then
'Text nach dem Bindestrich als Datum übernehmen
strDatum = Trim(Mid(.Text, InStr(1, .Text, "-") + 1))
End If
If IsDate(strDatum) Then
If UBound(Split(strDatum, "."))  2 Then
'Datm enthält nicht 2 Punkte
bolProblem = True
ElseIf Val(Split(strDatum, ".")(0)) > 31 _
Or Val(Split(strDatum, ".")(0))  12 _
Or Val(Split(strDatum, ".")(1))  "" Then
MsgBox "Blattname - Zeile : Datumseintrag" & strMsg, vbOKOnly + vbInformation, _
"Zeilen mit Problem beim Istdatum"
End If
End Sub

Gruß Werner
Anzeige
AW: Schulungsplan - Auslesen über Überschrift
17.11.2017 15:58:23
Daniel
Super cool Werner. Vielen Dank!
Gerne u. Danke für die Rückmeldung. o.w.T.
17.11.2017 17:35:57
Werner
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
20.11.2017 07:25:23
Daniel
Hallo Werner,
irgendwie scheint es hier doch noch ein Problem zu geben.
"Laufzeitfehler 91"
Objektvariable oder With-Blockvariable nicht festgelegt.
Und im Debugger-Modus springt er auf die Suche der Überschriften.
 With wksBer
SpaTeil = Rows(9).Find(What:="Teilnehmer", LookIn:=xlValues, LookAt:=xlWhole). _
Column
SpaSchul = Rows(9).Find(What:="Schulungstitel", LookIn:=xlValues, LookAt:= _
xlWhole).Column
SpaDatum = Rows(9).Find(What:="Ist-Termin", LookIn:=xlValues, LookAt:=xlWhole). _
Column
SpaBew1 = Rows(9).Find(What:="Art der Wirksamkeitsprüfung", LookIn:=xlValues,  _
LookAt:=xlWhole).Column
SpaBew2 = Rows(9).Find(What:="Bewertung der Schulung", LookIn:=xlValues, LookAt: _
=xlWhole).Column
SpaBew3 = Rows(9).Find(What:="Bewertung durch GF", LookIn:=xlValues, LookAt:=xlWhole).Column

Anzeige
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
20.11.2017 07:32:13
Daniel
Okay - Kommando zurück. Das war wohl die Montags Müdigkeit. beim copy-paste deines Codes in mein VBA Projekt hat es wohl die Formatierung etwas verhauen.
Nun geht es - Danke, Daniel
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
20.11.2017 07:59:19
Daniel
Jetzt muss ich mich leider doch nochmal zu Wort melden.
Habe nun das eigentliche Problem herausgefunden. Die Fehlermeldung oben besteht weiterhin,
nur dann nicht wenn ich mich nicht im Arbeitsblatt "Erinnerung_Bewertung" befinde.
Die Schleife läuft erst dann korrekt durch, wenn ich mich in einem Arbeitsblatt befinde, in dem die Tabellenstruktur/Überschriften gefunden werden kann.
Ich habe in der Schleife die Arbeitsblätter ausgegrenzt, welche nicht Inhalt der Erinnerung sein sollen.
Danke Daniel
Anzeige
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
21.11.2017 12:48:23
Daniel
Jemand eine Idee woran das liegen könnte ?
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
21.11.2017 14:07:30
Werner
Hallo Daniel,
mein Fehler, mach mal hier
SpaTeil = Rows(9).Find(What:="Teilnehmer", LookIn:=xlValues, LookAt:=xlWhole). _
Column
überall vor Rows einen Punkt, sonst stimmt die Referenzierung aufs Blatt nicht.
Muss dann bei allen Codezeilen zum Ermitteln der Sapalte so aussehen:
SpaTeil = .Rows(9).Find(What:="Teilnehmer", LookIn:=xlValues, LookAt:=xlWhole). _
Column
Gruß Werner
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
21.11.2017 17:40:51
Daniel
Danke, das hätte ich auch fast sehen müssen ;).
Gerne. o.w.T.
21.11.2017 18:28:30
Werner
AW: Schulungsplan - Auslesen über Überschrift
17.11.2017 15:57:49
Daniel
Immer in Zeile 9.
Gruß
Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige