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

Datum mit aktuellerem Datum überschreiben ?

Datum mit aktuellerem Datum überschreiben ?
27.12.2018 15:14:15
Alexander
Hallo,
ist es möglich ein Datum durch ein aktuelleres Datum das in einer Liste zu einem Namen gefunden wird zu überschreiben ?
Spalte D:D beinhaltet die Namen, Spalte F:F das letzte aktuelle Datum das zu dem Namen gefunden wurde - dieses sollte dann überschrieben werden sobald er in der Erassungliste (anderes Tableenblatt) ein aktuelleres findet.

24
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datum mit aktuellerem Datum überschreiben ?
27.12.2018 16:04:00
Nepumuk
Hallo Alexander,
kannst du eine Mustermappe mit ein paar Spieldaten hochladen? Deine Beschreibung ist nämlich äußerst dürftig. Und da dass Ganze nur per VBA zu machen ist, brauche ich exakte Angaben.
Gruß
Nepumuk
AW: Datum mit aktuellerem Datum überschreiben ?
27.12.2018 17:08:30
Alexander
Für eine Anlage hab ich immer 30 Zeilen für die Mitarbeiter angedacht
AW: Datum mit aktuellerem Datum überschreiben ?
27.12.2018 16:51:14
Nepumuk
Hallo Alexander,
es gibt also mehrere Anlagen, sind die alle in einer Tabelle oder gibt es für jede eine eigene?
Das wahr bestimmt nicht meine letzte Rückfrage.
Gruß
Nepumuk
Anzeige
AW: Datum mit aktuellerem Datum überschreiben ?
27.12.2018 17:07:00
Alexander
Ja es gibt mehrere Anlagen, nach Möglichkeit hätte ich die alle in ein Tabellenblatt untereinander aufgelistet so wie das Bespiel für Anlage 1.
AW: Datum mit aktuellerem Datum überschreiben ?
27.12.2018 18:29:40
Nepumuk
Hallo Alexander,
die folgende Prozedur gehört in ein Standardmodul (Im VBA-Editor - Menüleiste - Einfügen - Modul):
Option Explicit

Public Sub SearchEmploymentDate()
    
    Dim lngRow As Long
    Dim strFirstAddress As String, strMachine As String, strEmployee As String
    Dim dtmMaxDate As Date
    Dim objCell As Range
    
    With ThisWorkbook.Worksheets("AuswertungDatum")
        
        For lngRow = 1 To .Cells(.Rows.Count, 4).End(xlUp).Row
            
            If Not IsEmpty(.Cells(lngRow, 4).Value) And .Cells(lngRow, 2).MergeCells Then
                
                strEmployee = .Cells(lngRow, 4).Value
                strMachine = .Cells(lngRow, 2).MergeArea.Cells(1)
                dtmMaxDate = 0
                
                With ThisWorkbook.Worksheets("ErfassungEinstätze")
                    
                    Set objCell = .Columns(6).Find(What:=strEmployee, LookIn:=xlValues, _
                        LookAt:=xlWhole, MatchCase:=True)
                    
                    If Not objCell Is Nothing Then
                        
                        strFirstAddress = objCell.Address
                        
                        Do
                            
                            If strMachine = objCell.Offset(0, -2).Value Then
                                
                                If IsDate(objCell.Offset(0, -3).Value) Then
                                    
                                    dtmMaxDate = Application.Max(dtmMaxDate, CDate(objCell.Offset(0, -3).Value))
                                    
                                Else
                                    
                                    Call MsgBox(Prompt:="Fehler in Tabelle: ''ErfassungEinstätze'' Zeile: " & _
                                        CStr(objCell.Row) & vbLf & vbLf & "Bitte Eintrag in Spalte C prüfen.", _
                                        Buttons:=vbCritical, Title:="Programmabbruch")
                                    Set objCell = Nothing
                                    Exit Sub
                                    
                                End If
                            End If
                            
                            Set objCell = .Columns(6).FindNext(After:=objCell)
                            
                        Loop Until objCell.Address = strFirstAddress
                    End If
                    
                    Set objCell = Nothing
                    
                End With
                
                If dtmMaxDate <> 0 Then
                    
                    If IsDate(.Cells(lngRow, 6).Value) Then
                        
                        If .Cells(lngRow, 6).Value < dtmMaxDate Then _
                            .Cells(lngRow, 6).Value = dtmMaxDate
                        
                    ElseIf IsEmpty(.Cells(lngRow, 6).Value) Then
                        
                        .Cells(lngRow, 6).Value = dtmMaxDate
                        
                    Else
                        
                        Call MsgBox(Prompt:="Fehler in Tabelle: ''AuswertungDatum'' Zeile: " & _
                            CStr(lngRow) & vbLf & vbLf & "Bitte Eintrag in Spalte F prüfen.", _
                            Buttons:=vbCritical, Title:="Programmabbruch")
                        Exit For
                        
                    End If
                End If
            End If
        Next
    End With
End Sub

Gruß
Nepumuk
Anzeige
AW: Datum mit aktuellerem Datum überschreiben ?
27.12.2018 19:14:39
Alexander
strEmployee = .Cells(lngRow, 4).Value bekomme ich eine Fehlermeldung Typen nicht verträglich
AW: Datum mit aktuellerem Datum überschreiben ?
27.12.2018 19:18:05
Nepumuk
Hallo Alexander,
ich nicht, zumindest nicht in deiner Mustermappe. Deine Originalmappe hab ich nicht.
Gruß
Nepumuk
AW: Datum mit aktuellerem Datum überschreiben ?
27.12.2018 19:19:04
Alexander
kannst du die funktionierende Mappe bitte online stellen ?
AW: Datum mit aktuellerem Datum überschreiben ?
27.12.2018 19:24:47
Alexander
Hab es auf der Testmappe zum laufen bekommen, vielen Dank für deine tolle Hilfe.
Im Orginal lese ich die Daten aus Access aus kann hier das Problem liegen ?
Anzeige
AW: Datum mit aktuellerem Datum überschreiben ?
27.12.2018 19:33:38
Nepumuk
Hallo Alexander,
kann ich nicht wirklich beurteilen. Der Fehler deutet darauf hin dass in der Spalte Mitarbeiter der Tabelle "AuswertungDatum" der Fehlerwert eine Formel steht (#WERT!, #NULL!, #DIV/0!, #NV …..).
Gruß
Nepumuk
AW: Datum mit aktuellerem Datum überschreiben ?
28.12.2018 09:16:58
Alexander
Hat super geklappt Nepumuk, nochmal Danke.
Eine Frage hätte ich noch zu VBA und zwar habe ich dort eine Messagebox mit integriert die wenn in der letzten Spalte der Wert auf 5 springt dann informiert. Leider zeigt es mir nur die Zelle in der msg an ich hätte aber auch hier gern dass es den Namen und die Anlage der Zeile mit anzeigt.
Mein Code:
Sub WarnungQualifikation()
Dim Zelle As Range
Dim Addresse As String
For Each Zelle In Range("I:I")
If Zelle.Value = 5 Then
MsgBox "Mitarbeiter " & Zelle.Text & " hat 3 Monate nicht an der Anlage gearbeitet und  _
wurde deaktiviert, TRAINING VERANLASSEN !! (" & Zelle.Value & ")."
End If
Next
End Sub

Anzeige
AW: Datum mit aktuellerem Datum überschreiben ?
28.12.2018 09:36:10
Nepumuk
Hallo Alexander,
teste mal:
Public Sub WarnungQualifikation()
    
    Dim objCell As Range
    Dim strFirstAddress As String
    
    With ThisWorkbook.Worksheets("AuswertungDatum").Columns(9)
        
        Set objCell = .Find(What:=5, After:=.Cells(1, 1), _
            LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
        
        If Not objCell Is Nothing Then
            
            strFirstAddress = objCell.Address
            
            Do
                
                Call MsgBox(Prompt:="Mitarbeiter ''" & objCell.Offset(0, -5).Text & _
                    "'' hat 3 Monate nicht an der Anlage ''" & _
                    objCell.Offset(0, -7).MergeArea.Cells(1).Value & _
                    "'' gearbeitet und wurde deaktiviert, TRAINING VERANLASSEN !!", _
                    Buttons:=vbExclamation, Title:="Hinweis")
                
                Set objCell = .FindNext(After:=objCell)
                
            Loop Until objCell.Address = strFirstAddress
            
            Set objCell = Nothing
            
        End If
    End With
End Sub

Gruß
Nepumuk
Anzeige
AW: Datum mit aktuellerem Datum überschreiben ?
28.12.2018 10:41:17
Alexander
Pefekt :) kann man auch eine email adresse mit einbauen die man anklicken kann so dass office geöffnet wird ?
AW: Datum mit aktuellerem Datum überschreiben ?
28.12.2018 10:48:34
Nepumuk
Hallo Alexander,
mit einer MsgBox nicht unmöglich aber nur per API zu realisieren, ich kann zwei Buttons anzeigen und bei einem die Beschriftung ändern mit der dann ein weiteres Programm aufgerufen wird. Einfacher wäre ein UserForm. Was meinst du mit "office geöffnet wird"? Eine neue leere Mail oder …?
Gruß
Nepumuk
AW: Datum mit aktuellerem Datum überschreiben ?
28.12.2018 10:50:45
Alexander
Ja eine leere email evtl. mit dem Text der msg Box.
AW: Datum mit aktuellerem Datum überschreiben ?
28.12.2018 11:46:34
Nepumuk
Hallo Alexander,
gibt es in deiner Tabelle irgendwo eine Mailadresse zum Namen? Wenn Ja, in welcher Spalte?
Gruß
Nepumuk
Anzeige
AW: Datum mit aktuellerem Datum überschreiben ?
28.12.2018 13:19:46
Alexander
Ich hab 2 email Adressen festgelegt auf J1 und J2 im SheetAuswertungDatum
AW: Datum mit aktuellerem Datum überschreiben ?
28.12.2018 13:29:21
Nepumuk
Hallo Alexander,
und welche soll benutzt werden? Beide in AN oder eine in AN und die zweite in CC oder nur die 1. in AN oder …..?
Lass dir bitte nicht jede wichtige Info aus der Nase ziehen.
Gruß
Nepumuk
AW: Datum mit aktuellerem Datum überschreiben ?
28.12.2018 16:24:03
Alexander
Sorry ;) beide sollten AN sein
AW: Datum mit aktuellerem Datum überschreiben ?
28.12.2018 16:34:15
Alexander
Sorry ;) beide sollten AN sein
AW: Datum mit aktuellerem Datum überschreiben ?
28.12.2018 16:57:35
Nepumuk
Hallo Alexander,
teste mal:
Option Explicit

Private Declare Function FindWindowA Lib "user32.dll" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long
Private Declare Function SetTimer Lib "user32.dll" ( _
    ByVal Hwnd As Long, _
    ByVal nIDEvent As Long, _
    ByVal uElapse As Long, _
    ByVal lpTimer As Long) As Long
Private Declare Function KillTimer Lib "user32.dll" ( _
    ByVal Hwnd As Long, _
    ByVal nIDEvent As Long) As Long
Private Declare Function MessageBoxA Lib "user32.dll" ( _
    ByVal Hwnd As Long, _
    ByVal lpText As String, _
    ByVal lpCaption As String, _
    ByVal wType As Long) As Long
Private Declare Function SendDlgItemMessageA Lib "user32.dll" ( _
    ByVal hDlg As Long, _
    ByVal nIDDlgItem As Long, _
    ByVal wMsg As Long, _
    ByVal wParam As Long, _
    ByVal lParam As String) As Long
Private Declare Sub Sleep Lib "kernel32.dll" ( _
    ByVal dwMilliseconds As Long)

Private Const TIMER_ID As Long = 0
Private Const TIMER_ELAPSE As Long = 25
Private Const WM_SETTEXT As Long = &HC
Private Const GC_CLASSNAMEDIALOGS As String = "#32770"

Private lstrButtonCaption1 As String
Private lstrButtonCaption2 As String
Private lstrButtonCaption3 As String
Private lstrBoxTitel As String

Private Function MsgBoxPlus( _
        ByVal pvstrText As String, _
        ByVal pvstrTitle As String, _
        ByVal pvstrButtonText1 As String, _
        Optional ByVal opvstrButtonText2 As String, _
        Optional ByVal opvstrButtonText3 As String, _
        Optional ByVal oenmStyle As VbMsgBoxStyle = vbInformation) As Long

    
    Dim enmResult As VbMsgBoxResult
    
    lstrButtonCaption1 = pvstrButtonText1
    lstrButtonCaption2 = opvstrButtonText2
    lstrButtonCaption3 = opvstrButtonText3
    lstrBoxTitel = pvstrTitle
    
    Call SetTimer(Application.Hwnd, TIMER_ID, TIMER_ELAPSE, AddressOf SetButtonText)
    
    If lstrButtonCaption2 = "" And lstrButtonCaption3 = "" Then
        enmResult = MessageBoxA(Application.Hwnd, pvstrText, pvstrTitle, vbOKOnly Or oenmStyle)
    ElseIf lstrButtonCaption2 <> "" And lstrButtonCaption3 = "" Then
        enmResult = MessageBoxA(Application.Hwnd, pvstrText, pvstrTitle, vbYesNo Or oenmStyle)
    Else
        enmResult = MessageBoxA(Application.Hwnd, pvstrText, pvstrTitle, vbAbortRetryIgnore Or oenmStyle)
    End If
    
    If enmResult = vbOK Or enmResult = vbYes Or enmResult = vbAbort Then
        MsgBoxPlus = 1
    ElseIf enmResult = vbNo Or enmResult = vbRetry Then
        MsgBoxPlus = 2
    Else
        MsgBoxPlus = 3
    End If
    
End Function

Private Sub SetButtonText()
    
    Dim lngBox_hWnd As Long
    
    Call KillTimer(Application.Hwnd, TIMER_ID)
    
    lngBox_hWnd = FindWindowA(GC_CLASSNAMEDIALOGS, lstrBoxTitel)
    
    If lstrButtonCaption2 = "" And lstrButtonCaption3 = "" Then
        
        Call SendDlgItemMessageA(lngBox_hWnd, vbCancel, WM_SETTEXT, 0&, lstrButtonCaption1)
        
    ElseIf lstrButtonCaption2 <> "" And lstrButtonCaption3 = "" Then
        
        Call SendDlgItemMessageA(lngBox_hWnd, vbYes, WM_SETTEXT, 0&, lstrButtonCaption1)
        Call SendDlgItemMessageA(lngBox_hWnd, vbNo, WM_SETTEXT, 0&, lstrButtonCaption2)
        
    Else
        
        Call SendDlgItemMessageA(lngBox_hWnd, vbAbort, WM_SETTEXT, 0&, lstrButtonCaption1)
        Call SendDlgItemMessageA(lngBox_hWnd, vbRetry, WM_SETTEXT, 0&, lstrButtonCaption2)
        Call SendDlgItemMessageA(lngBox_hWnd, vbIgnore, WM_SETTEXT, 0&, lstrButtonCaption3)
        
    End If
End Sub

Private Function CallMsgBox( _
        ByVal pvstrText As String, _
        ByVal pvstrTitle As String, _
        Optional opvenmStyle As VbMsgBoxStyle = vbInformation) As Long

    
    CallMsgBox = MsgBoxPlus(pvstrText:=pvstrText, pvstrTitle:=pvstrTitle, _
        pvstrButtonText1:="Weiter", opvstrButtonText2:="Mail", _
        opvstrButtonText3:=vbNullString, oenmStyle:=opvenmStyle)
    
End Function

Private Sub Mail( _
        ByVal pvstrName As String, _
        ByVal pvstrMail1 As String, _
        ByVal pvstrMail2 As String)

    
    Dim objOutookApp As Object, objMail As Object
    
    Set objOutookApp = CreateObject(Class:="Outlook.Application")
    Set objMail = objOutookApp.CreateItem(0)
    
    With objMail
        .To = pvstrMail1 & "; " & pvstrMail2
        .Subject = "Testmail"
        .Body = "Hier kommt dein Text" & vbLf & vbLf & pvstrName & vbLf & vbLf & "Gruß Alexander"
        .Display
    End With
    
    Set objMail = Nothing
    Set objOutookApp = Nothing
End Sub

Public Sub WarningQualification()
    
    Dim objCell As Range
    Dim strFirstAddress As String
    
    With ThisWorkbook.Worksheets("AuswertungDatum").Columns(9)
        
        Set objCell = .Find(What:=5, After:=.Cells(1, 1), _
            LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
        
        If Not objCell Is Nothing Then
            
            strFirstAddress = objCell.Address
            
            Do
                
                If CallMsgBox(pvstrText:="Mitarbeiter ''" & objCell.Offset(0, -5).Text & _
                    "'' hat 3 Monate nicht an der Anlage ''" & _
                    objCell.Offset(0, -7).MergeArea.Cells(1).Value & _
                    "'' gearbeitet und wurde deaktiviert, TRAINING VERANLASSEN !!", _
                    pvstrTitle:="Hinweis", opvenmStyle:=vbExclamation) = 2 Then _
                    Call Mail(pvstrName:=objCell.Offset(0, -5).Text, _
                    pvstrMail1:=Cells(1, 10).Text, pvstrMail2:=Cells(2, 10).Text)
                
                Set objCell = .FindNext(After:=objCell)
                
            Loop Until objCell.Address = strFirstAddress
            
            Set objCell = Nothing
            
        End If
    End With
End Sub

Gruß
Nepumuk
Anzeige
AW: Datum mit aktuellerem Datum überschreiben ?
28.12.2018 18:17:41
Alexander
Funktioniert bestens, vielen vielen Dank. Jetzt hat mein Shift Planning Tool wieder ein sehr gutes Update bekommen dank deiner super Hilfe.

26 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige