Bitte um Hilfe bei VBA Programmierung

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Bitte um Hilfe bei VBA Programmierung
von: oliver guettler
Geschrieben am: 26.05.2015 23:14:02

Ich habe seit einer Woche folgendes Problem, ich möchte aus einer Kombinationsliste mit Dienstlegenden (Dienstplan) das Passende finden und ausgeben.
In Zelle J22 bis N22 sollen Dienste vorgegeben werden können, in J24 bis N24 sollen die passenden Dienste ausgegeben werden. Dabei soll die Stundenzahl berücksichtigt werden-zusätzlich fehlt mir die Möglichkeit zB a0 zu vergleichen und falls schon vorhanden(zB Dienstplan) weiterzusuchen.
Anbei ist die Datei.
to bis t4 ist die Eingabe aus den Zellen J22 bis N22,
Stundenmax ist die Zelle Q24, wenn in
J22 bis N22 "-" ist, kann irgend ein Dienst passend zur Kombinationsliste eingesetzt werden.
a0 bis a4 ist aus der Kombinationsliste.
Wenn man mit der Datei ein wenig rumspielt sollte erkannt werden können was ich meine-ist per schreiben schwer zu erklären.
Ich habe einen festen Logik-Knoten in der Birne-Bitte Bitte helft mir!
lg Oliver
https://www.herber.de/bbs/user/97856.xlsm

Bild

Betrifft: AW: Bitte um Hilfe bei VBA Programmierung
von: fcs
Geschrieben am: 27.05.2015 15:18:46
Hallo Oliver,
irgendwie ist mir dein Ansatz die Vorgabewerte mit den Werten in den Zeilen zu vergleichen zu kompliziert.
Außerdem hast du schon 2 Versionen von Makro kombi in deiner Datei - eine im Modul, eine unter Tabelle1.
ich würde es wie folgt anpacken. So hast du die Möglichkeit eine Fundstelle zu übernehmen, und kannst ggf. auch weiter suchen.
Gruß
Franz

Sub kombiNeu()
  Dim arrVorgabe(1 To 5) As String
  Dim Zeile As Long, Spalte As Long
  Dim StundenMax As Double, Sollstunden As Double
  Dim wksKombi As Worksheet
  Dim bolTreffer As Boolean
  Dim strErgebnis As String
  
  Set wksKombi = Worksheets("Kombinationen")
  With wksKombi
    'Vorgabewerte einlesen
    arrVorgabe(1) = .Cells(22, 10).Text
    arrVorgabe(2) = .Cells(22, 11).Text
    arrVorgabe(3) = .Cells(22, 12).Text
    arrVorgabe(4) = .Cells(22, 13).Text
    arrVorgabe(5) = .Cells(22, 14).Text
    Sollstunden = .Cells(22, 16)
    StundenMax = .Cells(24, 17)
    'Inhalte in Ergebniszellen löschen
    .Range(.Cells(24, 10), .Cells(24, 16)).ClearContents
    'Kombinationen durchsuchen und vergleichen
    For Zeile = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
      'Ist-Stunden in Zeile mit Max-Stunden vergleichen
      If StundenMax < .Cells(Zeile, 7) Then
        'do nothing
      Else
        'Dienste in Zeile auf Übereinstimmung mit Vorgaben prüfen
        bolTreffer = True
        For Spalte = 1 To 5
          If arrVorgabe(Spalte) <> "-" _
            And arrVorgabe(Spalte) <> .Cells(Zeile, Spalte).Text Then
              bolTreffer = False
              Exit For
          End If
        Next
        
        If bolTreffer = True Then
            strErgebnis = "| " & .Cells(Zeile, 1) & " | " & .Cells(Zeile, 2) _
              & " | " & .Cells(Zeile, 3) & " | " & .Cells(Zeile, 4) _
              & " | " & .Cells(Zeile, 5) & " |" & vbLf _
              & "Ist-Stunden: " & .Cells(Zeile, 7) & vbLf _
              & "Zeile: " & Zeile
            If MsgBox(strErgebnis & vbLf & vbLf & "Ergebnis eintragen?", _
                  vbQuestion + vbYesNo, _
                  "Dienstplan-Kombi") = vbYes Then
              
                  .Cells(24, 10) = .Cells(Zeile, 1)
                  .Cells(24, 11) = .Cells(Zeile, 2)
                  .Cells(24, 12) = .Cells(Zeile, 3)
                  .Cells(24, 13) = .Cells(Zeile, 4)
                  .Cells(24, 14) = .Cells(Zeile, 5)
                  .Cells(24, 15) = Zeile
                  .Cells(24, 16) = .Cells(Zeile, 7)
            End If
            If MsgBox("Weitersuchen?", _
                  vbQuestion + vbYesNo, _
                  "Dienstplan-Kombi") = vbNo Then Exit For
        End If
      End If
    Next Zeile
  End With
End Sub


Bild

Betrifft: AW: Vielen vielen Dank
von: oliver guettler
Geschrieben am: 27.05.2015 23:52:22
Vielen Dank für die rasche Antwort, habs jetzt folgendermaßen geschafft- speichere den Index des passenden Dienstes wenn Bedingungen erfüllt sind.
Dein Ansatz mit String finde ich die viel schönere Lösung, meinen Code werde ich daher Schritt für Schritt ausmisten.
lg Oliver

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Bitte um Hilfe bei VBA Programmierung"