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

SVERWEIS

SVERWEIS
Thomas
Liebe VBA-Freunde!
Ich komme bei diesem Fall nicht weiter und bitte Euch daher wieder um Hilfe!
In einer UserForm wird der Urlaub verplant. Die Arbeitsmappe besteht erst mal aus 3 Tabellen für eine Hilfstabelle mit dem Namen "Daten" und weiteren drei Tabellen für die ersten 2 Kalenderwochen.
Über die Combobox1 suche ich einen Mitarbeiter aus und über die Textbox 1 gebe ich das Datum ein.
In Textbox2 wird die Kalenderwoche ausgewiesen. Gleiches gilt für Textbox3 und TextBox4.
In TextBox5 wird die Anzahl der Urlaubtage angegeben. Als Beispiel sollte erst mal 02.01.2012 bis 05.01.2012 dienen, damit man einen einfachen Anfang hat, auf den man aufbauen kann.
Nachdem ich z. B. den Mitarbeiter "Mustermann" aus der ComboBox ausgesucht habe und die Textbox2 als Kalenderwoche 1 ausgibt, soll nun automatisch der Eintrag aus Textbox5 in der Tabelle "KW01" beim Mitarbeiter "Mustermann" aus ComboBox1 in Zelle E23 eingetragen werden. Wie so eine Art "SVERWEIS".
Gibt die TextBox2 z. B. KW 2 aus, so soll automatisch der Eintrag in Tabelle KW02 erfolgen, usw.
Mein Code funktioniert leider hier nicht. Ich habe ihn aus einer anderen Anweisung kopiert und abgeändert, aber leider ohne Erfolg.
Private Sub cmderfassen_Click()
Dim frm As UserForm
Dim index As Long
Dim Name As String
Dim Werte As Double
Dim Zelle As Range
Set frm = UserForm1
index = frm.ComboBox1.ListIndex
If index = -1 Then
MsgBox "Es wurde kein Mitarbeitername gewählt"
Exit Sub
End If
Name = frm.ComboBox1.List(index)
With frm.TextBox5
If IsNumeric(.Text) Then
Werte = CDbl(frm.TextBox5.Text)
Else
MsgBox "Für Werte dürfen nur Zahlen eingegeben werden!"
Exit Sub
End If
End With
Sheets("KW" & Format(TextBox2, "00")).Select
With Sheets("KW" & Format(TextBox2, "00")).Columns("B:B")
Set Zelle = .Find(What:=Name, After:=.Range("B17"), _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False)
End With
If Zelle Is Nothing Then
MsgBox "Es konnte keine Mitarbeiter gefunden werden!"
Else
Set Zelle = Zelle.Offset(0, 3)
End If
End Sub

Folgende Anweisung funktioniert:
Sheets("KW" & Format(TextBox2, "00")).Select
lz = ActiveSheet.Cells(Rows.Count, "B").End(xlUp).Row + 1
Cells(lz, "B") = ComboBox1
Aber irrsinnigerweise stehen in jeder Tabelle schon die ganzen Mitarbeiter, auch wenn sie in dieser KW
keinen Urlaub haben. Fragt mich nicht warum. Ich hoffe, ihr könnt mir helfen!
Zum besseren Verständnis noch der Link zum Download
https://www.herber.de/bbs/user/80457.zip

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: SVERWEIS
07.06.2012 11:32:50
fcs
Hallo Thomas,
die Namen der Mitarbeiter in Spalte B der KW-Blätter muss du natürlich löschen, bevor du mit der 1. Eingabe von Urlaubs-Daten beginnst.
Ansonsten empfehle ich die nach folgenden Anpassungen in deinem Makro. Ermittelt wird die Zeile in der der Mitarbeiter steht bzw. der Name eingetragen wird.
Anschliessend wird der Wert aus der textbox 5 in die gewünschte Spalte eingetragen. Soll das tatsächlich E sein ?
Generell muss du aber noch das Problem bei Urlaub über mehrere KW lösen. Was willst dann wo eintragen? Sinnvoll wäre hier eine For- Next-Schleife von der KW des 1. Urlaubstages bis zur KW des Letzten Urlaubstages.
Gruß
Franz
Private Sub cmderfassen_Click()
Dim frm As UserForm
Dim index As Long
Dim sName As String
Dim Werte As Double
Dim Zelle As Range
Dim Zeile As Long
Set frm = UserForm1
index = frm.ComboBox1.ListIndex
If index = -1 Then
MsgBox "Es wurde kein Mitarbeitername gewählt"
Exit Sub
End If
sName = frm.ComboBox1.List(index)
With frm.TextBox5
If IsNumeric(.Text) Then
Werte = CDbl(frm.TextBox5.Text)
Else
MsgBox "Für Werte dürfen nur Zahlen eingegeben werden!"
Exit Sub
End If
End With
With Sheets("KW" & Format(TextBox2, "00"))
.Select
With Sheets("KW" & Format(TextBox2, "00")).Columns("B:B")
Set Zelle = .Find(What:=sName, After:=.Range("A17"), _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False)
End With
If Zelle Is Nothing Then
'Es konnte keine Mitarbeiter gefunden werden!
Set Zelle = .Cells(.Rows.Count, 2).End(xlUp).Offset(1, 0)
Zelle.Value = sName
End If
Zeile = Zelle.Row
.Cells(Zeile, 5).Value = Werte 'Eintrag in Spalte E
End With
End Sub

Anzeige
AW: SVERWEIS
07.06.2012 17:31:21
Thomas
Hallo Franz!
Vielen Dank Franz. Funktioniert. Natürlich hast du recht Franz. Was ist, wenn der Mitarbeiter über mehrere KW
Urlaub hat? Sagen wir mal z. B. drei Wochen. Ich muss in Textbox1 das Anfangsdatum eingeben und in Textbox3 das Enddatum. Das Programm müsste nun die entsprechnenden Kalenderwochen berechnen und in die entsprechenden Tabellen eintragen. Hier z. B. Urlaub KW1 bis KW3. Ist in dieser Woche ein Feiertag, so soll der natürlich berücksichtigt werden, also statt 5 Tage sollen dann nur 4 Tage z. B in der Spalte E eingetragen werden. Aber da bin ich mit meinen wenigen VBA Kenntnissen leider völlig überfordert. Aber hier habe ich dank euch schon einiges gelernt. Kannst du mir hier bitte weiterhelfen?
Was hältst du von der Idee mehr Textfelder anzugeben, in denen der Urlaub eingetragen wird?
Aber du hast ja scheine eine Lösung mit einer For-Next-Schleife. Aber wie soll die in deinen Code angewandt werden?
Gruß
Thomas
Anzeige
AW: SVERWEIS
07.06.2012 18:00:45
Thomas
Hallo Franz,
du hast noch nachgefragt, was alles zum Erfassen ist. Das habe ich ganz vergessen.
Das sieht man in Tabellen den Kalenderwochen. Es sind die Lila Spalten!
K-Spalte = Beantragt, genehmigt, abgelehnt
L-Spalte = Anzahl der beantragten Tage (Feiertage sollen hier berücksichtigt werden)
N-Spalte = Beantragt am: Hier reicht eigentlich die Datumfunktion die in einen Testfeld auf der Userform übernommen wird.
O-Spalte = Komplette Woche (bei 5 Tagen oder z. B Ostern bei 4 Tagen und ein Feiertag) soll Ja erscheinen, ansonsten sein.
P-Spalte = welche Tage? weiß ich nicht, was da rein soll
Q-Spalte = ist die Abwesenheit Überstundenabbau? Hier reicht eine Listenfeld mit Ja/Nein, dass dann in die entprechende KW übernommen wird.
R-Spalte: genehmigte oder geplante Vorwoche. Hat der Mitarbeiter in der Vorwoche auch schon Urlaub, oder beantragt, so soll hier ja rein, ansonsten nein. Automatisch natürlich.
S-Spalte = genehmigte oder geplante Folgewoche. Das gleiche wie R-Spalte nur Folgewoche.
Übrigens Franz. Das mit den Mitarbeiterberichten funktioniert wunderbar. Danke, nochmal für deine Mühen!
Anzeige
AW: SVERWEIS
08.06.2012 02:00:38
fcs
Hallo Thomas,
warum willst du unbedingt 52 oder 53 KW-Blätter mit Daten anlegen.
Nach meiner Einschätzung wird es wesentlich einfacher, wenn du alle Urlaubsdaten in einer Tabelle erfasst.
Dann ersparst du dir die Mühe die Eingabe-Informationen ggf. auf mehrere Tabellenblätter verteilen zu müssen.
Für die Übersicht der Urlaube während einer KW wird ein Ausgabeblatt erstellt. Hier wird die KW ausgewählt und dann die relevanten Daten für diese KW aus der Gesamtliste ausgelesen per Formeln aber wahrscheinlich besser per Makro.
Das hat mehrere Vorteile:
1. Die Liste der Urlaube ist wesentlich leichter zu pflegen. z.B. bei Änderungen speziell, wenn mehrere KW betroffen sind um z.B. einen Urlaub zu löschen/anzupassen.
2. Anpassungen im Layout der Tabellen.
Du muss dich jetzt nur um 3 Tabellenblätter kümmern
a) Erfassungsblatt für Urlaubsanträge
b) Auswerte-Blatt für eine KW
c) KW-Liste für Jahr mit Daten zur jeweiligen KW (z.B. Vorgaben in Zeilen 18 und 20)
statt ggf. um 52 Blätter anpassen zu müssen.
3. Andere Formen der Auswertung sind einfach möglich
z.B. Übersicht der Urlaubsplanung eines Mitarbeiters
4. Die Dateigröße dürfte wesentlich kleiner ausfallen.
Auch dann, wenn du unbedingt für jede KW ein Tabellenblatt in der Mappe haben möchtest , macht es Sinn die Basisdaten zu den Urlaubsanträgen in einer Tabelle zu erfassen. Dann müssen die Daten der KW-Blätter nach Abschluss der Eingaben eines Tages jeweils aktualisiert werden oder auch vor der Anzeige bzw. dem Drucken. In diesem Fall würde das Makro jeweils die vorhandenen Eingabedaten löschen und die aktuellen Daten aus der Gesamtliste eintragen.
Mir ist aufgefallen, dass es in den KW-Blättern ab Zeile 229 weitere Eingabe-Bereiche vorgesehen sind. Welche Relevanz haben diese? Zumindest Daten in Spalte N werden in Zellen in Zeile 21 übernommen.
Dann ist mir im Nachlauf aufgefallen:
Ein Mitarbeiter kann ja durchaus mehrere Urlaubsanträge für eine KW haben z.B.:
bis/am Montag "normalen" Urlaub und am Freitag dann noch einen ÜAB.
Das sind dann wahrscheinlich zwei verschiedene Anträge. Sollen diese in der KW-Zusammenstellung dann in einer Zeile dargestellt werden? oder jeder Antrag in einer eigenen Zeile?
Die Zusammenfassung in einer Zeile würde die Sache extrem kompliziert machen.
Wenn du automatisch bei der Ermittlung der Arbeits-/Urlaubstage in einem Zeitraum die arbeitsfreien Tage/Feiertage berücksichtigen willst, dann muss in einem Blatt der Datei auch eine Liste dieser Tage angelegt werden. Zur einfachen Referenz auf die Feiertagsdaten sollte Zellbereich einen Namen bekommen.
Aus meinen Anmerkungen kannst du erkennen, dass du dir erst noch einmal genauer Gedanken machen muss, welche Daten du erfassen/eingeben/ändern willst, wie die Daten verarbeitet und eingetragen werden sollen, und welche Daten du ggf. wie darstellen, ausgeben und/oder drucken willst. Diese Gedanken bringst du am besten in Form einer Beschreibung oder besser als Programmablaufpaln (PAP) zu Papier. Der PAP zeigt dann auch schon etliches an Logik, die bei der Verarbeitung der Daten zu berücksichtigen ist. Danach geht es dann an die Umsetzung in Excel. Welche Tabellen brauche/habe ich, Dateneingabe direkt in Tabellen oder Userforms, wie sollen die Daten aus der Eingabe in Datentabellen übertragen werden.
Du solltest nicht vergessen, dass man für die Dateneingabe nicht unbedingt mit Userforms arbeiten muss. Genau so gut kann man die Eingabe für die einzelnen Datensätze auch auch in einem separaten Tabellenblatt machen. Für VBA-Anfänger ist das auch einfacher als der Weg über ein Userform, insbesondere dann, wenn mit den Eingabedaten noch Berechnungen/Prüfungen gemacht werden sollen, bevor die Daten in die Datentabelle geschrieben werden sollen. Diese Berechnungen kann man in der Eingabetabelle nämlich meistens schön mit Standard-Excelformeln integrieren.
Das war jetzt ein ziemlich langer Roman, der dir aber auch klar machen sollte, dass es bei deinen VBA-Kenntnissen im Rahmen des Forums ggf. ein etwas zu großer Aufwand ist, dich bei der Programmierung für dein Projekt zu unterstützen.
Bei Fragen zu einzelnen Problemen helfe ich natürlich gerne weiter. Aber dazu muss der große Rahmen erst einmal sauber geklärt sein.
Gruß
Franz
Anzeige
AW: SVERWEIS
08.06.2012 16:39:06
Thomas
Hallo Franz!
Danke für deine Gedanken. Ich hätte mir gewünscht, der Ersteller dieses Urlaubsplans hätte so weitreichend gedacht wie du.
Wir greifen also in einen Plan ein, der bereits seit Jahren genutzt wird. Nun ist der Ersteller aus dem Unternehmen ausgeschieden. Jetzt kommen die Änderungswünsche. Ich habe meine Hilfe auch nur freiwillig angeboten, weil es eine willkommene Abwechslung für mich ist.
Einige Sachen konnte ich bereits mit deiner Hilfe verbessern! Vielen Dank dafür! Wird ein neuer Plan erstellt, so muss der erst von der Bereichsleitung genehmigt werden. Und das ist ein sehr bürokratischer Prozess bei uns.
Was ich zuerst angemerkt habe war, dass in jeder Tabelle alle Mitarbeiter bereits eingetragen sind, egal, ob sie Urlaub haben oder nicht. Das kann jetzt nicht mehr rausgenommen werden, weil die Urlaubsplanung schon im vollen Gange ist. Die 52 Tabellen für jede Kalenderwochen habe ich auch hinterfragt. Begründung: "So ist es schön übersichtlich!". Die überflüssigen Mitarbeiter, die keinen Urlaub haben und trotzdem aufgeführt sind, stören aber nicht! ;-) Auch ich hätte nur eine Tabelle benutzt.
Denn Excel bietet auch Datenbankfunktinen, wie z. B. das Sortieren an.!!
Das Problem, wenn ein Mitarbeiter in einer KW 4 Tage Urlaub hat und 1 Tag ÜAB wird so gelöst, dass dann in der entsprechenden Tabelle einfach Urlaub ausgewählt wird. Du hast recht, der Mitarbeiter stellt aber 2 Anträge 1 x Urlaub und 1 x ÜAB.
Die Arbeitsmappe hat nur 3 Kalenderblätter, weil ich die anderen rausgelöscht habe. Sie sie ist auf 40 MB aufgebläht.
Die Frage stellt sich also, wie kann ein bereits vorhandener Plan verbessert werden, ohne viel Änderungen am Plan?
Die Eingabe der Daten über die UserForm stellt schon mal eine Erleichterung für sie dar, weil sie dann nicht mehr die entprechende Tabelle aufrufen müssen. Was nächstes Jahr vielleicht sein wird ist, dass nicht mehr alle Mitarbeiter in den Tabellen stehen, sondern nur die, die auch wirklich Urlaub beantragt haben.
Für deine angebotene Untersützung danke ich dir sehr!
Hast du eine Erklärung dafür?
Private Sub TextBox3_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If IsDate(TextBox3) Then
TextBox4 = DatePart("ww", TextBox3)
End If
Dim datStart As Date
Dim datEnd As Date
datStart = CDate(Me.TextBox1.Value)
datEnd = CDate(Me.TextBox3.Value)
Me.TextBox5 = Application.NetworkDays(datStart, datEnd, Sheets("Tabelle1").Range("B2:B15"))
End Sub
Die Nettoarbeitstage unter Berücksichtigung des Urlaubs funktioniert bei mir.
Ich habe die Arbeitsmappe in die Arbeit geschickt. Da erscheint jetzt plötzlich die Fehlermeldung.
"Keine Objektunterstützung" oder so ähnlich.
Woran kann das liegen. Die Verweise sind identisch. Das einzige ist, in der Arbeit haben wir Excel03 und ich zuhaus Excel07.
Ich lade für dich nochmal die Tabelle hoch, damit du siehst, was ich bisher gemacht habe.
https://www.herber.de/bbs/user/80481.zip
Anzeige
Datenstruktur
08.06.2012 18:31:30
Christian
Hallo Thomas,
ich bin da ganz bei Franz. Es macht keinen Sinn, Daten redudant auf mehrere Tabellen zu verteilen.
- Da wird dann in einer Tabelle was geändert und in der/ den anderen nicht - und schon hast du wiedersprüchliche Datensätze und kein Mensch weiß, welcher Datensatz gültig ist.
- eine Auswertung per Excelfunktionen wird sehr viel aufwendiger.
- Dateigrößen von 40MB würde ich generell vermeiden. Sauber strukturiert braucht das Teil wahrscheinlich nur wenige - schätze 1 bis 3MB)
- etc.
Argumente wie "So ist es schön übersichtlich!"lasse ich nicht zu. Dem Anwender kann man da nur sagen "Jo, leg' dich wieder hin. Du kriegst deine Übersicht" - aber für dich schein mir erst mal mal wichtig, dass die Daten sauber strukturiert werden. Stichwort Datenmodell, Normalisierung. Redundante Daten über mehrere Tabellen verteilt können da nicht vorkommen.
Da sind wir aber bei Datenbanken und nicht bei Excel. Excel ist ein Tabellenkalkulationsprogramm und hat nichts mit Datenbank zu tun. ich rudere etwas zurück - man kann natürlich auch in Excel SQL u.ä. nutzen, aber das macht nur Sinn, wenn die Datenstruktur der einer Datenbank entspricht. Aber selbst dann ist es noch lange keine Datenbank.
Btw - nach Einträgen filtern zu können hat nichts mit Datenbanken zu tun.
Zu deiner Frage:
Die Excelfunktion "NETTOARBEITSTAGE" ist unter 2003 nur über das AddIn "Analyse-Funktionen" verfügbar.
Gruß
Christian
PS: zum Thema Kalenderwoche nach DIN habe ich dir geantwortet unter:
https://www.herber.de/forum/archiv/1264to1268/t1266099.htm#1266647
Anzeige
AW: Datenstruktur
08.06.2012 20:16:15
Thomas
Hallo Christian!
Auch dir Danke für deine Anregung und für den HInweis zur Kalenderwoche nach DIN.
Das mit dem Urlaubsplan muss ich "diplomatisch" lösen. Mit kleinen Änderungen zum Ziel kommen.
Jetzt groß eingreifen bringt nichts, weil der ganze Jahresurlaub schon verplant ist. Und Christian,
ich bin auch nicht derjenige, der den Urlaubsplan nutzt. Das machen meine Vorgesetzten.
Am Montag werde ich mir erklären lassen, wozu sie 52 Tabellen benötigen. Das ist wirklich ein Unding.
Gruß
Thomas
AW: Datenstruktur
09.06.2012 07:44:18
fcs
Hallo Thomas,
ich hab dein Userform noch ein wenig aufgepeppt und mit den erforderlichen Makros hinterlegt.
Die Eingabe kann jetzt über mehrere KW erfolgen.
https://www.herber.de/bbs/user/80488.zip
Die mit Abwesenheit belegten Tage in der 1. und letzten KW werden in einer Listbox angezeigt. Werden ÜAP-Tage und Urlaub in einer KW kombiniert, dann können weitere Tage markiert oder auch der Status "ganze Woche abwesend" gesetzt werden.
Die TabIndex-Werte der Steuerelemente hab ich geändert, so dass man auch mit der TAB-Taste die Eingabefelder in Reihenfolge ansteuern kann.
Durch den Code muss du dich halt durchhangeln, um mehr Verständnis zu gewinnen. Ich hab nicht an Anmerkungen gespart, so dass alles nachvollziehbar sein sollte.
Das Füllen der Comboboxen und Listboxen in der Initialisierungsprozedur hab ich mit anderen Anweisungen umgesetzt. Die Auswahlwerte werden als Array in eine Variable geschrieben bzw. aus der Datentabelle eingelesen und dann der List-Eigenschaft zugewiesen.
Da ich einen relativ kleinen Monitor hab, musste ich das Userform verkleinern.
Um das Userform in einer Datei mit allen Daten einzufügen erstellst am Besten eine Arbeitskopie zum Testen. Dann das dort vorhanden UF im VBA-Editor entfernen und jenes aus meiner Datei per Drag und Drop in die Arbeitskopie ziehen. Dann mal alle Eingabe-Varianten durchprobieren.
Ein paar Punkte kannst dir ja noch überlegen:
- Prüfen des von-Datums (nicht vor dem Jahresbeginn, nicht vor dem heutigen Tag oder eine bestimmte Zahl Tage vor Heute.
- bis-Tag max. bis zum 31.12. des Jahres
- Verfeinerung der Anzeige der Abwesenheitstage - im Moment werden alle Tage (auch freie Arbeitstage) im Urlaubzeitraum als abwesend eingetragen, wenn der Mitarbeiter nicht die ganze KW abwesend ist.
Gruß
Franz
Anzeige
AW: Datenstruktur
09.06.2012 12:33:32
Thomas
Hallo Franz!
Vielen Dank für deine Überarbeitung! Durch den Code werde ich mich gerne durchhangeln. Teilweise habe ich ja schon zum besseren Verständnis kommentiert. Das Ganze muss ich dann natürlich in den Originalurlaubsplan übertragen. Mein Gott Franz, mit 51 überflüssigen Tabellen, und in jeder Tabelle stehen pauschal alle Mitarbeiter drinnen. "Es ist ja so schön übersichtlich". Das Ganze hat die Arbeitsmappe auf fast 40 MB aufgebläht.
Dir vielen Dank für deine Mithilfe, ohne deren ich kläglich gescheitert wäre.
Aber Franz, man lernt ja dazu, auch mit 50 Jahren!!!
Vielleicht kann der Urlaubsplan in diesm Forum als Musterdatei dienen. Aber dann natürlich besser durchstrukturiert!!!
Sollte ich noch Fragen haben, komme ich gerne auf dich zu.
Vielen Dank
Thomas
P.S. Große Hoffnung habe ich zwar nicht, aber teile mir bitte deine E-Mail-Adresse mit. Vielleicht zeigt sich ja die Firma "großzügig". Wenn ja, werde ich dich nicht vergessen!!!!!
Anzeige
AW: Datenstruktur
09.06.2012 15:03:59
Thomas
Hallo Franz!
Das ist Ehrensache für mich!!!
Was mache ich falsch Franz?
Gebe ich z. B. "Mustermann" ein wähle vom 02.01.2012 - 13.01.2012 Urlaub, Status "genehmigt", ÜAB "nein" ein, bei ganzer Woche ist Hacken gesetzt und Option "Urlaub", so kommt die Meldung.
Index außerhalb gültigen Bereich. Zu KW00 und KW03 gibt es kein Tabellenblatt. Wegen Prüfung der Nach-und Vorwoche. Ergänze ich die KW00 und KW03 so kommt die Fehlermeldung nicht. Aber es erfolgt auch kein Eintrag in den Tabellenspalten von KW01 und KW02. Ich geh mal von dem aus, dass es bei dir funktioniert und ich die Userform nicht richtig bediene!
Gruß
Thomas
Anzeige
AW: Datenstruktur
10.06.2012 00:38:44
Thomas
Hallo Franz!
Es ist schon spät, aber ich komm einfach nicht los. ;-)
Folgende Situation stellt sich nun. Ist in der L-Spalte, also in der Spalte in der die Tage eingetragen werden sollen kein Eintrag oder 0,00, so geschieht nichts. Ändere ich jedoch auf 0,01 ab, so kommt die
Msb mit der Meldung, das bereits ein Eintrag vorhanden ist, und ob er überschreiben soll, so wie du es programmiert hast. Daher hab ich mal in der Spalte was eingegeben, um die Meldung zu erzwingen.
Die Frage, die sich mir stellt ist, warum passiert kein Eintrag wenn die L-Spalte leer ist, oder 0,00 eingetragen ist? Kannst du hier bitte weiterhelfen?
So jetzt bin ich aber müde.
Gruß
Thomas
AW: Datenstruktur
10.06.2012 03:31:43
fcs
Hallo Thomas,
es ist schon spät/noch früh ?
Da war ist mir noch ein Logik-Fehler in den Prüfungsablauf geraten.
Da bei mir beim Testen in Spalte L schon überall Werte standen, ist er mir nicht aufgefallen.
Ersetze das Ende der Prozedur
Private Sub cmderfassen_Click()

durch nachfolgende Anpassungen.
Gruß
Franz
        'Prüfen, ob im KW-Blatt zum Namen schon Daten eingetragen sind (Urlaubstage oder ÜAP = " _
Ja"
If .Cells(Zeile, 12).Value > 0 Or .Cells(Zeile, 17).Value = "Ja" Then
If MsgBox("Im Blatt für die KW sind schon folgende Daten eingetragen" & vbLf _
& "Name: " & sName & vbLf _
& "Status: " & .Cells(Zeile, 11).Value & vbLf _
& "AnzahlTage: " & .Cells(Zeile, 12).Value & vbLf _
& "ÜAB: " & .Cells(Zeile, 17).Value & vbLf & vbLf _
& "Daten überschreiben?", vbQuestion + vbYesNo, _
sName & " - KW" & Format(iKW, "00") & " - " & Format(.Cells(18, 3), "DD.MM.") & "  _
bis " _
& Format(.Cells(18, 6), "DD.MM.YYYY")) = vbNo Then
GoTo NextKW
End If
End If
.Cells(Zeile, 11).Value = sStatus
'Anzahl Urlaubstage oder ÜAB
.Cells(Zeile, 12).Value = iUtage
'Beantragt am
.Cells(Zeile, 14).Value = CDate(TextBox6.Value)
.Cells(Zeile, 15).Value = sKomplWoche
.Cells(Zeile, 16).Value = sTage_abwesend
.Cells(Zeile, 17).Value = sUEAB
'Vorwoche
.Cells(Zeile, 18).Value = sVorwoche
'Folgewoche
.Cells(Zeile, 19).Value = sFolgewoche
End With
NextKW:
Next iKW
End Sub

AW: Datenstruktur
10.06.2012 11:17:01
Thomas
Mein Gott Franz bin ich dumm!
Hab mir schon gedacht dass in der Abfrage der "Status" fehlt.
Ich habe aber vor lauter Müde so ergänzt:
& "Status: " & .Cells(Zeile, 17).Value & vbLf & vbLf _
aber die Zelle nicht mehr ausgebessert.
Vielen Dank Franz!!
Und versprochen Franz. Sollte sich die Firma erkenntlich erzeigen denke ich zuerst an dich!!!!
AW: Datenstruktur
10.06.2012 00:38:47
Thomas
Hallo Franz!
Es ist schon spät, aber ich komm einfach nicht los. ;-)
Folgende Situation stellt sich nun. Ist in der L-Spalte, also in der Spalte in der die Tage eingetragen werden sollen kein Eintrag oder 0,00, so geschieht nichts. Ändere ich jedoch auf 0,01 ab, so kommt die
Msb mit der Meldung, das bereits ein Eintrag vorhanden ist, und ob er überschreiben soll, so wie du es programmiert hast. Daher hab ich mal in der Spalte was eingegeben, um die Meldung zu erzwingen.
Die Frage, die sich mir stellt ist, warum passiert kein Eintrag wenn die L-Spalte leer ist, oder 0,00 eingetragen ist? Kannst du hier bitte weiterhelfen?
So jetzt bin ich aber müde.
Gruß
Thomas
AW: Datenstruktur
11.06.2012 18:36:03
Thomas
Hallo Franz!
Es gibt noch ein Problem!
Erweitere ich die Arbeitsmappen auf 15KW´s und trage für die 14. und 15. KW Urlaub ein.
02.04.2012 - 13.04.2012, so wird in der 14 KW der L Spalte -47 Urlaubtage eingetragen, in der 15. KW
steht dann 8 Tage. Eigentlich sollten ja, bedingt durch die Feiertage in der 14. und 15 KW je 4 Tage stehen. Das gleiche ist, wenn ich im Februar Daten eintrage. Das Problem scheint zu sein, wenn ein anderer Monat ausser Januar erfasst wird. Bei Januar ist alles richtig!
Kannst hier bitte weiterhelfen.
AW: Datenstruktur
11.06.2012 19:39:50
Thomas
Hallo Franz!
Kommando zurück. Jetzt geht es. Hab bis jetzt 23 KW´s angelegt.
Ich kann mir nicht erklären, woran es lag. Aber jetzt rechnet er richtig!
Vielleicht hatte ich vorher eine Tabelle falsch betitelt.
Gruß
Thomas
AW: Datenstruktur
12.06.2012 19:35:48
Thomas
Hallo Franz!
In der Arbeit habe ich Probleme mit der Function.
Private Function fncNettoArbeitstage(ByVal datVon As Date, ByVal datBis As Date) As Long
'Berechnung der Nettoarbeitstage aus Start- und Ende-Datum
fncNettoArbeitstage = Application.NetworkDays(datVon, datBis, Sheets("Tabelle1").Range("B2: _
B15"))
End Function
"Laufzeitfehler 438". Objekt unterstützt diese Eigenschaft oder Methode nicht", wird angezeigt und
fncNettoArbeitstage = Application.NetworkDays(datVon, datBis, Sheets("Tabelle1").Range("B2:B15"))
ist gelb markiert. Ich denke mal, dass es an NetworkDays liegt.
Zuhause (Excel2007) funktioniert es einwandfrei. Kann es daran liegen, dass wir in der Arbeit Excel2003 haben?
In der Arbeit sind folgenende Einstellungen:
Unter verfügbare Ad-Ins sind alle Funktionen aktiviert, auch Analyse-Funktion.
In den Verweisen steht der Haken bei:
- Visual Basic for Application
- Microsoft Excel 11.0 Objekt Library
- OLE Automation
- Microsoft Office 11.0 Objekt Library
- Microsoft Forms 2.0 Objekt Library
Aber funktioniert leider nicht. Ich weiß nun auch keinen Rat mehr. Wäre schade, wenn die ganze Sache
daran scheitern würde.
Gruß
Thomas
AW: Datenstruktur
12.06.2012 21:07:48
fcs
Hallo Thomas,
die Funktionen NETTOARBEITSTAGE und NETTOARBEITSTAGE.INTL gibt es erst in Excel 2007 als integrierte Funktionen. Scheinbar reicht es nicht in Excel 2003 das entsprechende AddInn zu aktivieren, um die Funktionen in VBA einsetzen zu können.
Ich die Funktion jetzt entsprechend programmiert, so dass sie nicht auf die Tabellenfunktion zurückgreift.
Ich hab es mit dem Zeitraum 02.01.2012 bis 10.01.2012 getestet. Der 06.01.2012 an einem Freitag wird als Feiertag erkannt und nur 6 Arbeitstage ausgegeben. Das sollte dann auch unter Excel 2003 funktionieren.
Gruß
Franz
Private Function fncNettoArbeitstage(ByVal datVon As Date, ByVal datBis As Date) As Long
'Berechnung der Nettoarbeitstage aus Start- und Ende-Datum
Dim lngCount As Long, intWeekday As Integer
Dim bolMatch As Boolean, datDatum As Date, Zelle As Range
For datDatum = datVon To datBis
intWeekday = VBA.Weekday(Date:=datDatum, Firstdayofweek:=vbMonday)
If intWeekday 

AW: Datenstruktur
13.06.2012 18:30:01
Thomas
Hallo Franz!
Einwandfrei!!! Bis jetzt läuft alles dank deiner Hilfe perfekt!!!
Vielen Dank!!!

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige