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

VBA
01.06.2016 09:40:33
Boory
Hallo Forum,
>
ich habe ein Problem mit "erste_freie_Zeile" Ich greife die Spalte "D" ab und definiere über "Weekday", dass ein Eintrag nicht an einem Samstag oder Sonntag erfolgen darf. Nun muß ich irgendwie noch die Spalte "C" dort mit einbinden, da dort vom Mitarbeiter "U" für Urlaub, "K" für Krank oder "Ü" für Überstundenabbau eingetragen wird. Über Formel wird in dieser Spalte auch automatisch ein "F" eingetragen, wenn es sich um einen Feiertag handelt. Nun muss die "erste_freie_Zeile" eben auch diese Spalte berücksichtigen - und ich stehe hier ein wenig auf dem Schlauch... Kann mir jemand da helfen?
Private Sub CommandButton1_Click()
ActiveSheet.Unprotect "12345"
'Variable deklarieren
Dim erste_freie_Zeile As Integer
'erste freie Zeile in Blatt "Erfassung" ermitteln
'und in Variable "erste_freie_Zeile" schreiben
erste_freie_Zeile = Sheets("Erfassung").Range("D33").End(xlUp).Offset(1, 0).Row
Select Case Weekday(Cells(erste_freie_Zeile, 1), vbMonday)
Case 6: erste_freie_Zeile = erste_freie_Zeile + 2
Case 7: erste_freie_Zeile = erste_freie_Zeile + 1
End Select
'In Blatt "Erfassung"
'Spalte A, erste freie Zeile das Datum im Textformat übertragen
Sheets("Erfassung").Cells(erste_freie_Zeile, 4) = Format(TextBox1.Text)
'End With
Unload Me
ActiveSheet.Protect "12345"
End Sub

Soweit der aktuelle Code...
Vielen Dank - Boory

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
VBA - Problem mit "erste_freie_Zeile"
01.06.2016 09:49:42
Boory
Sorry - mir ist beim Betreff wohl der Cursor weggehüpft. Jetzt etwas aussagekräftiger... ;)

AW: VBA - Problem mit "erste_freie_Zeile"
01.06.2016 09:53:20
Michael
Hallo!
Du willst die nächste freie Zelle in Spalte C bestimmen, oder? Dann so:
    Dim erste_freie_Zeile As Long
With Worksheets("Erfassung")
'Bestimmung über Spalte C
erste_freie_Zeile = .Cells(.Rows.Count, 3).End(xlUp).Row + 1
End With
LG
Michael

immer wieder das gleiche...
01.06.2016 09:54:01
UweD
... warum ladet ihr keine Musterdatei mit Spieldaten dazu hoch?
Hallo
das "Nachbauen" einer solchen Datei dauert manchmal länger als die Lösung..
und wir müssen nicht raten, wie die Datei aussehen könnte.
Gruß UweD

Anzeige
AW: immer wieder das gleiche...
01.06.2016 10:06:52
Boory
Hallo UweD,
Na gerne doch! Ich mag nur nicht das Forum und den Server fluten, wenn's nicht sein muss... :)
Bitte - gerne!
https://www.herber.de/bbs/user/105901.xlsm

AW: VBA
01.06.2016 10:14:47
Rudi
Hallo,
...
erste_freie_Zeile = Sheets("Erfassung").Range("D33").End(xlUp).Offset(1, 0).Row
erste_freie_Zeile = Worksheetfunction.max(erste_freie_Zeile, Sheets("Erfassung").Range("c33"). _
End(xlUp).Offset(1, 0).Row)
Gruß
Rudi

AW: VBA
01.06.2016 10:59:31
Boory
Hallo Rudi,
ich hab Deine Lösung jetzt getestet, allerdings hab ich beim 1.Januar ja ein "F" drin. Wenn ich über den "Kommen" Button eine Eingabe mache, schreibt er mir diese trotzdem beim 1.Januar hin, obwohl eigentlich die erste freie Zeile in diesem Fall ja der 4.Januar sein sollte. 1. Feiertag, 2. und 3. WE, 4. erster Arbeitstag...
Muß ich da noch etwas beachten?

Anzeige
AW: VBA
01.06.2016 11:24:25
Rudi
Hallo,
hatte die Datei nicht geöffnet.
In C stehen Formeln. Deshalb ergibt Range("C33").end(xlup).row immer 1.
Das Konzept ist falsch. In der vorliegenden Datei wäre der 7. die erste freie Zeile, da der 6. ein FT ist.
Was ist, wenn Urlaub vorab eingetragen wird?
Wenn immer am aktuellen Tag eingetragen wird:
erste_freie_Zeile = day(date)+2
Gruß
Rudi

AW: VBA
01.06.2016 12:04:12
Boory
Rudi, da hast Du sicher Recht, aber dann bräuchte ich eine Lösung, dass nur dann in Spalte "D" und "E" eingetragen wird, wenn in Spalte "F" nichts drin steht und dann eben in die jeweils nächste freie Zelle. Wenn die Formel stört, müßte ich den Feiertagseintrag über VBA lösen, so dass die Zellen - außer im Feiertagsfall oder wenn jemand etwas per Hand einträgt - generell frei, sprich leer sind.
Und dafür, da bin ich ehrlich, reichts nicht ganz in VBA bei mir... :)
Hättest Du da eine Idee?
Gruß Boory

Anzeige
AW: VBA
02.06.2016 15:04:54
Boory
Schade... Keiner 'ne Idee...?
LG - Boory

AW: VBA - alte Excel 97 Lösung !!
02.06.2016 20:28:49
Piet
Hallo Boory,
wenn ich dir eine Uralte Excel 97 Lösung anbiete werden die Makor Profis mosern! (mich lynchen)
Das doofe daran ist, dem kleinen Piet ist das völlig wurscht! Meine Lebenseinstellung ist:
Wenn ein Makro funktioniert spielt es keine Rolle ob die Programmiersprache "verpöhnt ist"
Das was verpöhnt ist sind GoTo Sprung Befehle! Prüfe bitte selbst ob das hier "Clever ist" ?
Ich prüfe mit İf Anweisung ob in der von dir ermittelten lastZeile in Spalte C ein "K,U,Ü" steht?
Wenn ja addiere ich a+1 und springe auf die Auswertung "Montag" zurück, weil es Freitag sein kann.
Probier mal ob das für dich eine brauchbare Lösung ist.
Hinweis:
Mir ist aufgefallen das man an einem Tag mehrere Eintraege machen könnte. Das wird nicht geprüft!
Bleibt die Frage ob man nich auch noch den Tag der Eingabe prüfen sollte? (war nicht gefordert)
Es war Zufall das ich deine letzte AW mit: "hat noch jemand eine Idee" angeklckt hatte.
Sonst gehe ich in Threads wo bereits Lösungen vorliegen normalerweise nicht rein.
mfg Piet
Private Sub CommandButton1_Click()
ActiveSheet.Unprotect "12345"
'Variable deklarieren
Dim erste_freie_Zeile As Integer, a As Integer
'erste freie Zeile in Blatt "Erfassung" ermitteln
'und in Variable "erste_freie_Zeile" schreiben
With Sheets("Erfassung")
erste_freie_Zeile = .Range("D33").End(xlUp).Offset(1, 0).Row
wdh:  'wiederholung bei: "K, U, Ü"   'falls K, U ein Freitag ist !!)
Select Case Weekday(Cells(erste_freie_Zeile + a, 1), vbMonday)
Case 6: erste_freie_Zeile = erste_freie_Zeile + 2
Case 7: erste_freie_Zeile = erste_freie_Zeile + 1
End Select
'Prüfung in Spalte C auf "K, U, Ü"   (mit wiederholung)
If .Cells(erste_freie_Zeile + a, 3)  Empty Then a = a + 1: GoTo wdh
'In Blatt "Erfassung"
'Spalte A, erste freie Zeile das Datum im Textformat übertragen
.Cells(erste_freie_Zeile + a, 4) = Format(TextBox1.Text)
End With
Unload Me
ActiveSheet.Protect "12345"
End Sub

Anzeige
AW: VBA - alte Excel 97 Lösung !!
02.06.2016 20:28:49
Piet
Hallo Boory,
wenn ich dir eine Uralte Excel 97 Lösung anbiete werden die Makor Profis mosern! (mich lynchen)
Das doofe daran ist, dem kleinen Piet ist das völlig wurscht! Meine Lebenseinstellung ist:
Wenn ein Makro funktioniert spielt es keine Rolle ob die Programmiersprache "verpöhnt ist"
Das was verpöhnt ist sind GoTo Sprung Befehle! Prüfe bitte selbst ob das hier "Clever ist" ?
Ich prüfe mit İf Anweisung ob in der von dir ermittelten lastZeile in Spalte C ein "K,U,Ü" steht?
Wenn ja addiere ich a+1 und springe auf die Auswertung "Montag" zurück, weil es Freitag sein kann.
Probier mal ob das für dich eine brauchbare Lösung ist.
Hinweis:
Mir ist aufgefallen das man an einem Tag mehrere Eintraege machen könnte. Das wird nicht geprüft!
Bleibt die Frage ob man nich auch noch den Tag der Eingabe prüfen sollte? (war nicht gefordert)
Es war Zufall das ich deine letzte AW mit: "hat noch jemand eine Idee" angeklckt hatte.
Sonst gehe ich in Threads wo bereits Lösungen vorliegen normalerweise nicht rein.
mfg Piet
Private Sub CommandButton1_Click()
ActiveSheet.Unprotect "12345"
'Variable deklarieren
Dim erste_freie_Zeile As Integer, a As Integer
'erste freie Zeile in Blatt "Erfassung" ermitteln
'und in Variable "erste_freie_Zeile" schreiben
With Sheets("Erfassung")
erste_freie_Zeile = .Range("D33").End(xlUp).Offset(1, 0).Row
wdh:  'wiederholung bei: "K, U, Ü"   'falls K, U ein Freitag ist !!)
Select Case Weekday(Cells(erste_freie_Zeile + a, 1), vbMonday)
Case 6: erste_freie_Zeile = erste_freie_Zeile + 2
Case 7: erste_freie_Zeile = erste_freie_Zeile + 1
End Select
'Prüfung in Spalte C auf "K, U, Ü"   (mit wiederholung)
If .Cells(erste_freie_Zeile + a, 3)  Empty Then a = a + 1: GoTo wdh
'In Blatt "Erfassung"
'Spalte A, erste freie Zeile das Datum im Textformat übertragen
.Cells(erste_freie_Zeile + a, 4) = Format(TextBox1.Text)
End With
Unload Me
ActiveSheet.Protect "12345"
End Sub

Anzeige
Hättstet nich jesacht, hätt's wohl keena jemerkt!
03.06.2016 03:14:49
Luc:-?
;-)
Gruß, Luc :-?

AW: Stimmt Luc
03.06.2016 18:49:43
Piet
Hallo Luc,
stimmt Luc, war vielleicht unüberlegt von mir. Tatsache ist, das es funktioniert.
den ersten Sprung machte ich vor meine eigene If Anweisung, und testete es aus.
Dann merkte ich, wenn am Freitag ein K oder U steht funktioniert es nicht richtig.
Sieht nach nichts aus, aber ich habe mehrere Varianten duchpobiert.
So klappt es, aber ein Problem bleibt ungeklaert. Doppelte Eingaben am selben Tag!
mfg Piet

AW: Stimmt Luc
06.06.2016 15:09:33
Boory
Hallo Piet,
erst einmal vielen lieben Dank für Deine Lösung - werde sie zeitnah austesten und ggf. so übernehmen (wenn's recht ist). Mir isses nämlich auch wurscht. Ist wie bei der Gesundheit - Wer heilt, hat Recht... :)
Ich melde mich, wenn ich es ausprobiert habe.
Zum Doppeleintrag (nur eine Idee):
Ich könnte mir vorstellen, dass das Einfachste ist, nach erfolgtem Eintrag einfach den "Kommen"-Button zu deaktivieren. Hätte aber aktuell keinen Plan, wie ich das umsetzen könnte... :) Wäre doch aber eine Idee, oder?
Viele Grüße - Boory

Anzeige
AW: VBA
06.06.2016 22:45:06
Piet
Hallo Borry,
ja, es gibt eine Lösung zur Vermeidung von Doppel Eingaben. s. neuer Makro Code.
Ich lade mit aus der Eingabe Liste den Tag und Vortag aus der "LastZell" Zelle.
Ist die Eingabe schon erfolgt erkennet des Makro den Vortag und verweigert die Eingabe.
Ist der heutige Tag mit dem Tag der Liste unstimmig kommt Meldung: Tag ist "unstimmig!!"
Dann must du die Liste von Hand korrigieren. Zum Testen hatte ich im Modul1 den Befehl
AktiveShett Unprotect, und habe die Liste zum testen von Hand manipuliert.
Schau mal ob diese Version für dich brauchbar ist. Würde mich freuen.
mfg Piet
Option Explicit
Private Sub CommandButton1_Click()
ActiveSheet.Unprotect "12345"
'Variable deklarieren
Dim erste_freie_Zeile As Integer, a As Integer
Dim ListTag As Integer, VorTag As Integer
'erste freie Zeile in Blatt "Erfassung" ermitteln
'und in Variable "erste_freie_Zeile" schreiben
With Sheets("Erfassung")
erste_freie_Zeile = .Range("D33").End(xlUp).Offset(1, 0).Row
wdh:  'wiederholung bei: "K, U, Ü"   'falls K, U ein Freitag ist !!)
Select Case Weekday(Cells(erste_freie_Zeile + a, 1), vbMonday)
Case 6: erste_freie_Zeile = erste_freie_Zeile + 2
Case 7: erste_freie_Zeile = erste_freie_Zeile + 1
End Select
'Prüfung in Spalte C auf "K, U, Ü"   (mit wiederholung)
If .Cells(erste_freie_Zeile + a, 3)  Empty Then a = a + 1: GoTo wdh
'heutigen Tag aus Liste laden und vergleichen (Now)
VorTag = Day(.Cells(erste_freie_Zeile + a - 1, 1))
ListTag = Day(.Cells(erste_freie_Zeile + a, 1))
'Vergleich:  heutiger Tag mit List-Tag und Vortag
If VorTag = Day(Now) Then
MsgBox "dieser Tag wurde bereits eingegeben": GoTo Ende
ElseIf ListTag  Day(Now) Then
MsgBox "ListTag: " & ListTag & "  / Heute: " & Day(Now) & Chr(10) & "Der Eingabe Tag ist  _
unstimmig !!": GoTo Ende
End If
'In Blatt "Erfassung"
'Spalte A, erste freie Zeile das Datum im Textformat übertragen
.Cells(erste_freie_Zeile + a, 4) = Format(TextBox1.Text)
End With
Ende:  Unload Me
ActiveSheet.Protect "12345"
End Sub

Anzeige
AW: VBA
07.06.2016 14:48:48
Boory
Hallo Piet,
nochmals vielen Dank für Deine Antwort.
Ich habe jetzt meinen Code des Buttons "Kommen" durch Deinen Vorschlag ersetzt und dies ebenso (entsprechend angepasst) im Code des Buttons "Gehen" getan.
Nach ersten Prüfungen läuft das ganze phantastisch! Manuell angepasst muß nur werden, wenn die Zellen in der Spalte "Event" vor dem aktuellen Tag leer sind. Dass dies so wäre, dafür fällt mir jetzt aber kein Grund ein. Entweder ist da Feiertag (F) oder krank (k) (das kann dann der MA am ersten Arbeitstag selbst nachtragen) oder Urlaub (U). Ansonsten wird, wenn nichts davon zutrifft, nur über die Auslesung am WE blockiert und das hatte ja schon vorher funktioniert.
Ansonsten nochmal KLASSE!!! Und vielen Dank an Dich und alle, die mir geholfen haben!
Viele Grüße - Boory

Anzeige
AW: VBA oofen gestellt oWt
06.06.2016 22:46:22
Piet
,,,

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige