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

MsgBox Auswertung sortieren

MsgBox Auswertung sortieren
Heinz
Hallo Leute
Habe unteren Code - Danke an Dirk aus DUBAI
Der mir für fehlende Mitarbeiter eine Meldung ausgibt.
Könnte man diese Meldung nicht nach Datum sortieren.
Zb. 12.Okt. 13.Okt. 14.Okt. usw..
Gruß
Heinz
Userbild
Option Explicit
Public MyName As String, Letzter, MyPass As String
Public Sub Auswertung2(Monat As String)
'dieses macro wertet das active Tabellenblatt aus und wehaelt den Tabellenblattnamen durch den   _
_
Commandbutton
Dim myMSG As String, MySchicht As String, MyRange As Range
Dim Myfind As Range, Cell As Object, FirstAddress As String
Dim i As Long, k As Long, NextFind As Boolean, CntLeer As Long
Dim MyArr(5)  'definiere Array fuer alle zu pruefenden Ressourcen, ggf. erweitern
'definiere zu suchenden Ressourcen
MyArr(0) = "Vorarbeiter"
MyArr(1) = "Schrumpfer"
MyArr(2) = "QS"
'MyArr(3) = "was auch immer"
'MyArr(4) = "XXX"
'MyArr(5) = "yyy"
'finde alle schichten
'Set MyRange = ActiveSheet.Range("A:$A")
myMSG = "Achtung" & vbCrLf
For k = LBound(MyArr) To UBound(MyArr)  'suche durch das Blatt fuer alle Eintraege im Array
If MyArr(k) = "" Then
'kein weiterer Eintrag, abbrechen
Exit For
End If
Set MyRange = ActiveSheet.Range("A:$A")
With MyRange
Set Myfind = .Find(what:="*" & MyArr(k) & "*", LookIn:=xlValues)
If Not Myfind Is Nothing Then
FirstAddress = Myfind.Address
MySchicht = Right(Myfind, Len(Myfind) - (Len(MyArr(k)) + 1))
If InStr(1, MySchicht, "S.")  0 Then
MySchicht = Left(MySchicht, Len(MySchicht) - 1) & "chicht"
End If
GoTo Schichtauswertung
find_again:
NextFind = True
Do
Set Myfind = .FindNext(Myfind)
If Not Myfind Is Nothing Then
If FirstAddress = Myfind.Address Then Exit Do
MySchicht = Right(Myfind, Len(Myfind) - (Len(MyArr(k)) + 1)) & "chicht" ' _
vbCrLf
GoTo Schichtauswertung
Return_Nextfind:
End If
Loop While Not Myfind Is Nothing And Myfind.Address  FirstAddress
NextFind = False
End If
End With
Next k
NextFind = False
GoTo show_result
Schichtauswertung:
Set MyRange = ActiveSheet.Range(Cells(Myfind.Row, 3), Cells(Myfind.Row, 33))
For Each Cell In MyRange
Debug.Print Cell.Value
If Cell.Text = 0 Then
myMSG = myMSG & "Am " & Day(Cells(1, Cell.Column).Value) & " " & Monat & " kein " & MyArr( _
_
k) & " in " & MySchicht & vbCrLf
ElseIf Cell.Text = "" And Cells(1, Cell.Column).Text  "" Then
CntLeer = CntLeer + 1
End If
Next Cell
If CntLeer  0 Then
myMSG = myMSG & "In " & MySchicht & " fehlen fuer " & MyArr(k) & " " & CntLeer & " eintraege! _
_
" & vbCrLf
CntLeer = 0
End If
If NextFind = True Then
GoTo Return_Nextfind
Else
GoTo find_again
End If
show_result:
If Len(myMSG)  7 And Len(myMSG) 

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Vorschlag aber keine Lösung
13.10.2010 09:39:59
Tino
Hallo,
sammle die Daten in einem Array,
sortiere dieses mit QuickSort (findet man im Netz),
führe dieses zu einem entsprechenden String zusammen und
übergeben diesen String an die Msgbox.
Ich werde dies aber jetzt nicht machen,
weil ich Deine Datei nicht nachbauen möchte um Deinen Code erst mal zum laufen zu bringen.
Vielleicht kann Dirk dies für Dich umsetzen, er kennt bestimmt Deine Datei.
Gruß Tino
AW: Vorschlag aber keine Lösung
13.10.2010 09:47:37
Heinz
Hallo Tino
Recht herzlichen Dank für Deine Hilfestellung.
Na dann mache ich mich mal an die Arbeit.
Werde sehen was dabei rauskommt.
Gruß
Heinz
Anzeige
AW: Vorschlag aber keine Lösung
13.10.2010 15:32:59
Dirk
Hallo heinz,
Koennte man mit 3 Zeiligem Array machen. Dazu am Anfang vom Makro
Dim MyValArr(31,3)
Dann nach Zeile Schichtauswertung: folgenden Code:
Set MyRange = ActiveSheet.Range(Cells(Myfind.Row, 3), Cells(Myfind.Row, 33))
MyMsg=""
for each Cell in MyRange
If Cell.text = 0 then
MyValArr(Day(Cells(1, Cell.Column).Value),k)="Am " & Day(Cells(1, Cell.Column).Value) & " " & _
Monat & " kein " & MyArr( k) & " in " & MySchicht
ElseIf Cell.Text = "" And Cells(1, Cell.Column).Text "" Then
CntLeer = CntLeer + 1
End If
Next Cell
If CntLeer 0 Then
myMSG = myMSG & "In " & MySchicht & " fehlen fuer " & MyArr(k) & " " & CntLeer & " eintraege!" & _
vbCrLf
CntLeer = 0
End If
If NextFind = True Then
GoTo Return_Nextfind
Else
GoTo find_again
End If
for i=1 to 31
for k=1 to 3
if MyValArr(i,k) "" then
MyMSG=MyMSG & MyValArr(i,k)
MyValArr(i,k)=""
end if
next k
next i
Dann mit Zeile Show_result: fortsetzen
Gruss
Dirk aus Dubai
Anzeige
AW: Vorschlag aber keine Lösung
13.10.2010 19:39:58
Heinz
Hallo Dirk
Danke für Deine Hilfe.
Gruß
Heinz
AW: Vorschlag aber keine Lösung
14.10.2010 06:46:41
Dirk
Hallo Heinz,
habe noch was vergessen. Du musst die 5te Zeile von un ten noch folgendermassen aender:
MyMSG=MyMSG & vbcrlf & MyValArr(i,k)
Damit sollte Dein MyMSG string auch Zeilenumbrueche am Ende jeder Zeile haben.
Gruss
Dirk aus Dubai
AW: Vorschlag aber keine Lösung
14.10.2010 13:43:04
Heinz
Hallo Dirk
Wenn ich deinen abgeänderten Code einfüge, kommt immer das alle Schichten besetzt sind.
Auch wenn es nicht so ist.
Gruß
Heinz
AW: Vorschlag aber keine Lösung
14.10.2010 15:33:37
Dirk
Hallo!
Habe die das geanderte Makro per email gesendet. Fehler war in falsch gesetzter Sprungmarke und Cell.text andstelle von cell.value.
Gruss
Dirk aus Dubai
Anzeige
AW: Vorschlag aber keine Lösung
14.10.2010 19:00:10
Heinz
Hallo Dirk
Du bist der GRÖSSTE !!
Recht herzlichen Dank!
Funktioniert wunderbar
Gruß
Heinz

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige