Code Optimierung
31.07.2015 07:58:34
Markus
ich hatte vor kurzem schon den Beitrag eingestellt, jedoch noch keine Rückmeldung bekommen und weiß nicht, ob er ein wenig untergegangen ist. Daher stelle ich mein Anliegen nochmals ein. Nepumuk hatte mir vorab geholfen, eine Dropdownliste dynamisch anstatt statisch mit Werten zu füllen.
Thematisch geht es um eine Inputbox, die jetzt mit bestimmten Werten einer Spalte gefüllt wird. Je nach Auswahl wird eine andere Funktion geöffnet, die aber auf einen bestimmten Eingabewert reagiert. Die Dynamik der Dropdownliste ist somit zwar nett und war mir auch wichtig (allein, um das Verständnis zu bekommen), hilft aber eben nur bedingt weiter im Moment.
KS steht für Kostenstellen, von denen ca. 20 Stück in der Liste stehen.
Hier der alte Beitrag:
Die Dynamik der Liste hilft mir schonmal für zukünftige Projekte, bei dem aktuellen gibt es jedoch noch einen Zeilenlastigen Stolperstein.
Die Auswahl der KS wird ja durch "Ok" bestätigt und dadurch eine noch statische Funktion aufgerufen:
Private Sub OKCommandButton_Click()
'Wertet die Auswahl der ComboBox aus
If KSAuswahlComboBox.Value = 3405 Then
Unload Me
Call AuswahlfunktionZeile1
End If
'der selbe Code folgt dann für alle weiteren KS, ist aber definiert und dadurch statisch! _
End Sub
Zur Hintergrundinformation:Die Auswahl der KS dient dazu, aus einem anderen Tabellenblatt die dazu passenden Daten aus einem bestimmten Jahr zu kopieren.
Die Anzahl der Codezeilen hierzu ist leider immens und statisch, sodass ich bei Änderung der KS (neue Nummer, oder komplett neue KS) den ganzen Code entweder anpassen oder kopieren und anpassen muss.
Hier der Code der "AuswahlFunktion1" nur für ein Jahr:
Public Sub AuswahlfunktionZeile1() 'Öffnet Inputbox zur Eingabe der Daten
Dim s As Variant
Dim p As String
Dim rg As Range
s = InputBox("Bitte geben Sie das gewünschte Jahr ein.", "Eingabefeld für: " & _
Application.UserName)
If s = "" Then 'Falls der Benutzer auf Abbrechen klickt, schließt sich so die _
Inputbox
Exit Sub
End If
If s = 2010 Then
MsgBox "Aus diesem Jahr sind keine Daten hinterlegt.", vbOKOnly, "Keine Daten"
End If
If s = 2013 Then
MsgBox "Aus diesem Jahr sind keine Daten hinterlegt.", vbOKOnly, "Keine Daten"
End If
If s = 2014 Then
MsgBox "Aus diesem Jahr sind keine Daten hinterlegt.", vbOKOnly, "Keine Daten"
End If
'Muss für spätere Jahre angepasst werden
If s = 2021 Then
MsgBox "Für dieses Jahr ist die Programmierung noch nicht erfolgt." & Chr(13) & " _
Bitte
kontaktieren Sie einen Mitarbeiter, der sich mit VBA-Programmierung auskennt.",
vbOKOnly, "Programmierung fehlt"
End If
'Auswahl, ob B1 oder B2, anschließend werden alle Daten aus der Tabelle "Daten" kopiert und in _
_
_
der Leistungsübersicht eingefügt
If s = 2011 Then
p = MsgBox("Stammen Ihre Daten von 2011 aus der Bewertung B1?" & Chr(13) & "Wählen Sie ' _
_
_
Nein',
falls Ihre Daten B2 entstammen", vbYesNo, "Auswahl der Bewertung B1 oder B2")
If p = vbYes Then
Worksheets("Daten").Range("B5").Copy
Worksheets("Leistungsübersicht").Range("D4").PasteSpecial xlPasteFormulas ' _
Kopieren der
Daten aus "Daten" und Zellfärbung
If Worksheets("Leistungsübersicht").Range("D4").Value >= 0.85 Then
Worksheets("Leistungsübersicht").Range("D4").Interior.Color = vbGreen
End If
If Worksheets("Leistungsübersicht").Range("D4").Value = 0.75 Then
Worksheets("Leistungsübersicht").Range("D4").Interior.Color = vbYellow
End If
If Worksheets("Leistungsübersicht").Range("D4").Value = 0.85 Then
Worksheets("Leistungsübersicht").Range("D4").Interior.Color = vbGreen
End If
If Worksheets("Leistungsübersicht").Range("D4").Value = 0.75 Then
Worksheets("Leistungsübersicht").Range("D4").Interior.Color = vbYellow
End If
If Worksheets("Leistungsübersicht").Range("D4").Value
Das ist nur der Code von einem Jahr. Insgesamt gibt es momentan 8 Jahre (2011,2012,2015-2020) und dadurch unglaublich viel Code, denn es gibt ja auch zusätzlich mehrere übergeordnete Kostenstellen, die alle wieder Daten für diese Jahre haben (bzw haben werden).
Mein Wunsch ist es, dass das ganze dynamisch funktioniert und ich nicht mehr tausende an Codezeilen habe.
Vielleicht ist es jetzt zu viel Arbeit, alles nochmal umzuschreiben. Falls dem so ist, sagt mir einfach bescheid :) Wie bereits gesagt wusste ich mir am Anfang nicht besser zu helfen, als alles einzeln und statisch aufzuführen.
Hier endet der Beitrag. Ich würde mich über Rückmeldung freuen, ganz egal ob über Anregungen, Hilfe oder einfach die Meldung, dass das jetzt zu aufwendig wäre umzuschreiben :)
Vielen Dank und ein schönes Wochenende,
Markus