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

Ablaufdokumentation

Ablaufdokumentation
13.01.2018 15:09:23
Sascha
Hallo. Ich könnte etwas Hilfe gebrauchen. Für eine geplante Umschulung möchte ich programmieren üben und habe mir ein kleines Projekt vorgenommen wie hier zu sehen: https://www.herber.de/bbs/user/118929.xlsx
Wichtig ist mir der Verlauf, die Reihenfolge der Werte, die nur dann als fertiggestellt angezeigt werden und in die Liste waagerecht eingetragen werden, wenn bestimmte Bedingung vorher erfüllt ist. Ich habe schon einmal Varianten dieses Formulars erstellt wo Zeilennummern ausgegeben wurden im Bezug zum gefunden Wert.
Aber das jetzige Formular überfordert mich, weil die Steuerung der einzelnen zu lesenden Zellen nach oben hin gesteuert wird und stück für Stück nach oben wandert und an verschachtelten Bedingungen geknüpft ist. Es sieht so einfach aus, habe aber keine Idee...
Start ist Zeile A999.
Dann schrittweise eine Zeile hoch A998.
Wenn diese Zelle nicht leer ist, dann diese Zelle prüfen auf bestimmten Wert und wenn dieser Wert da ist und in der Zelle vorher bestimmte Werte vorliegen, dann diesen Wert
in die waagerechte Liste als fertig eintragen.
In der waagerechten Liste dann in die nächste Spalte springen, da ja in der ersten etwas steht.Soll nicht überschrieben werden, so dass ein Produkttionsverlauf sichtbar ist.
Wenn ein Produkt fertig ist, soll die Zeilennummer angegeben werden.
Ist diese Ablaufdokumentation überhaupt mit Excel realisierbar oder sollte ich das mit Java umsetzen und wenn mit Java, wie würdet Ihr das machen. Vielen Dank für eure Tipps im Voraus.

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ablaufdokumentation
13.01.2018 18:09:52
fcs
Hallo Sascha,
man kann es in Excel-VBA lösen.
Es ist für einen Anfänger aber schon sehr ambitioniert.
Du solltest dich über kleinere Projekte an verschiedene Excelfunktionen und VBA-Funktionalitäten herantasten.
Ich hab hier mal eine VBA-Programmierung für dich als Studienobjekt programmiert.
https://www.herber.de/bbs/user/118936.xlsm
Gruß
Franz
AW: Ablaufdokumentation
15.01.2018 12:27:54
Sascha
Hallo Franz,
vielen Dank für diese tolle Vorlage. Ich muss zugeben, dass diese Vorlage eine Herausforderung ist, aber zum Lernen und Probieren "gold wert".
Habe die letzte Nacht VBA-Grundlagen überflogen und werde fleissig lernen. Da ich gerade das Makro endlich starten konnte , habe ich gleich getestet, was man machen kann, wie sich Veränderungen an deinen Code auswirken und was ich gerne verbessern möchte.
Folgende Verbesserungswünsche:
Bei Ausführung des Makros wird alles korrrekt angezeigt, aber ich möchte 2 Dinge ändern -
1. Das Makro soll interaktiv sein bzw. immer aktiv sein. Wenn ich Produktnummern eintrage oder lösche, soll sich das in der waagerechten Sortierung auswirken, indem Einträge dort gelöscht werden.
Bisher bleiben dort alle Werte stehen inkl. der Farbmarkierung.
2. Eine Idee wäre, das komplette Makro immer wieder im intervall automatisch zu starten. Bei jedem Start könnte man die waagerechten Zellen löschen . Könnte mir vorstellen, dass der Pc und Software dadurch eine hohe Auslastung erfährt - also evtl. wenig sinnvoll.
b) Zweite Idee: Das Makro in eine Schleife einbetten und auf neue gefüllte Zellen warten, bevor Makro ausgeführt wird.
Ist der Lösungsansatz korrekt oder gibt es eine sinnvollere Lösungen?
Hoffe es ist nicht zu dreist, auf einen Lösungsvorschlag von dir in Form einer Vorlage zu hoffen, die meinen Horizont etwas erweitert?
Mir fällt an mir auf, dass die ganzen Lehrbeispiele und Syntaxvorgaben meist ohne Lehrerfolg bei mir sind und eine gute Vorlage eine Art interaktivität mit dem zu lernenden Stoff bietet. Im Prinzip spielt man mit der Vorlage, passt diese an und bei Fehlern sucht man gezielter und motivierter nach Lösungen in der Lehrlitaratur. Was soll ich sagen? Gute Vorlagen studieren macht Spass, macht ein wenig Angst vor all dem, was man noch nicht versteht - aber man kommt voran . DANKE IM VORAUS!!!
Gruss
Sascha
Anzeige
AW: Ablaufdokumentation
15.01.2018 17:17:07
fcs
Hallo Sascha,
das Löschen der Altwerte zum Verlauf kann man in das Auswerte-Makro problemlos integerieren. Man muss "nur" die letzte benutzte Zelle noch ermitteln -andere benötigte Infos sind in den vorhandenen Makro-Anweisungen schon ermmitelt.
Für die automatische Aktualisierung kann man ein Ereignismakro erstellen, dass auf Eingaben in Spalte A reagiert. Siehe unten.
Alternativ könnte man mit OnTime arbeiten, um in regelmäßigen Zeitabständen die Auswertung zu starten - hier muss man dann aber besonders genaudarauf achten, dass im Auswerte-Makro die Objekte korrekt und vollständig referenziert sind.
z.B. muss
Set wksData = ActiveSheet
ersetzt werden durch
ThisworkBook.Worksheets("Tabelle1")
Denn die OnTime-Anweisungen werden auch ausgeführt, wenn andere Arbeitsmappen aktiv sind.
Zusätzlich muss man dafür sorgen, dass dass die OnTime-Anweisung vor dem Schliessen der Datei deaktiviert wird.
Ich hab beim Testen der Aktualisierung festgestellt, dass dass Färben eines fertigen Produkts noch nicht 100% funktioniert, wenn die Produkte einer Produktgruppe mehrfach komplettiert sind.
Hier hab ich das Makro nochmals angepasst.
Gruß
Franz
'Ereignismakro unter dem Codemodul des Tabellenblatts "Tabelle1"
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row > 1 And Target.Column = 1 Then
Call Auswertung
End If
End Sub

Sub Auswertung()  'Update 2018-01-15
Dim Zeile As Long, Spalte As Long, Zeile_L As Long
Dim k As Long
Dim arrProdGrp() As Long
Dim tmpSplit, j As Integer
Dim wksData As Worksheet
Dim zeiNr As Long
Dim varProdNr As Variant
Set wksData = ActiveSheet
With wksData
'Produkte der Produktgruppen in Spalte C einlesen
'letzte Zeile mit Inhalt in Spalte C
Zeile_L = .Cells(.Rows.Count, 3).End(xlUp).Row
If Zeile_L >= 2 Then 'es sind Daten vorhanden
'Datenarray für Produktgruppen dimensioneren
ReDim arrProdGrp(2 To Zeile_L, 1 To 3)
For Zeile = 2 To Zeile_L
'Prüfen, ob Zelle mit Produkten leer ist
If Trim(.Cells(Zeile, 3).Text)  "" Then
'Einträge für Produkte am Komma trennen - erzeugt ein Daten-Array aus den  _
Werten
tmpSplit = Split(.Cells(Zeile, 3).Text, ",")
'Werte aus dem Array in das Roduktgruppen-Array übertragen und dabei in  _
Zahlen _
umwandeln - nicht nummerische Text werden dabei in 0 umgewandelt
For j = 0 To Application.WorksheetFunction.Min(2, UBound(tmpSplit))
arrProdGrp(Zeile, j + 1) = Val(tmpSplit(j))
Next
End If
Next Zeile
End If
'Zeile für Eintrag der Zeilennummer mit dem Produkt in Spalte A
'letzte Zeile mit Inhalt in Spalte B  , Inhalt = Zeilennummer
zeiNr = .Cells(2, 2).End(xlDown).Row
'Produkt-Nummern in Spalte A von letzter Zeile nach Zeile  2 abarbeiten
Spalte = 3 'Spalte C - rechts davon werden übereinstimmende Produkt-Nrn eingetragen
'alte Daten und Zellfüllungen löschen
'letzte verwendete Spalte
With .UsedRange
k = .Column + .Columns.Count - 1
End With
With .Range(.Cells(2, Spalte + 1), .Cells(zeiNr, k))
.ClearContents
.Interior.ColorIndex = xlColorIndexNone
End With
For Zeile = .Cells(.Rows.Count, 1).End(xlUp).Row To 2 Step -1
varProdNr = .Cells(Zeile, 1).Value
'Produktnummer prüfen
Select Case varProdNr
Case 100, 111
'nachste Nummer überspringen
Zeile = Zeile - 1
Case Else
'Produktnummer in den Produktgruppen suchen
For k = LBound(arrProdGrp, 1) To UBound(arrProdGrp, 1)
For j = LBound(arrProdGrp, 2) To UBound(arrProdGrp, 2) '1 to 3
If varProdNr = arrProdGrp(k, j) Then
Spalte = Spalte + 1
.Cells(k, Spalte).Value = varProdNr
.Cells(zeiNr, Spalte).Value = Zeile
GoTo NextProdukt
End If
Next
Next
NextProdukt:
End Select
Next Zeile
'Komplette Produktgruppe markieren
Dim arrProd() As Long
Dim bolDrei() As Boolean, SpaMax As Long
'eingetragene Produkte ab Spalte D (4) in Array einlesen
ReDim arrProd(LBound(arrProdGrp, 1) To UBound(arrProdGrp, 1), 4 To Spalte)
For Zeile = LBound(arrProdGrp, 1) To UBound(arrProdGrp, 1)
For j = 4 To Spalte
arrProd(Zeile, j) = .Cells(Zeile, j)
Next
Next
'Produktgruppen abarbeiten
For Zeile = LBound(arrProdGrp, 1) To UBound(arrProdGrp, 1)
Do
ReDim bolDrei(1 To 3) 'Werte zurücksetzen
SpaMax = 4            'Wert zurücksetzen
'Produkte in Produktgruppen abarbeiten
For k = 1 To 3
'Produkt in Produktgruppe mit eingetragen Werten in Zeile vergleichen
For j = 4 To Spalte
If arrProdGrp(Zeile, k) = arrProd(Zeile, j) _
And arrProdGrp(Zeile, k)  0 Then
If SpaMax 

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige