Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1480to1484
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

Code-Verbesserung

Code-Verbesserung
10.03.2016 14:39:25
Locean
Hey Folks, (ich mal wieder)
ich bin nun nach langem, gerade auch durch eure Hilfe, mit meinem Projekt fertig, zumindest wenn man überhaupt mit einem solchen Projekt (Personaleinsatzplanung) fertig werden kann. Denn bei mir tun sich wieder neue Ideen auf. Ich würde aber gerne meine Projekt-Codes um einiges verkürzen, da ich mir sicher bin, ich habe nicht für alles die ultimative und kürzeste Lösung. Teilweise braucht Excel halt doch recht lange um gewisse Codes zu durchlaufen.
Hier bitte ich euch wieder einmal um Unterstützung und falls ich es damit zu weit treiben sollte, kann ich das verstehen, sagt es dann bitte einfach, aber ich finde keine einfacheren Lösungen mehr im Netz. Es geht hier also rein um das Verkürzen von Code-Bausteinen.
Vielen Dank schonmal im Voraus.
Hier mal der erste Code:
Sub MA1()
Application.ScreenUpdating = False
If Sheets("Arbeitszeitnachweis").ComboBox2.Value = Sheets("Arbeitszeitnachweis").Range("A23")   _
_
Then
Sheets("AZN-AVR").Activate
Sheets("AZN-AVR").visible = True
If Sheets("Arbeitszeitnachweis").ComboBox1.Value = Sheets("Arbeitszeitnachweis").Range("A2")  _
Then
Sheets("Dienstplan").Range("C5:G35").Copy
Sheets("AZN-AVR").Range("C10:G40").PasteSpecial Paste:=xlValue
Sheets("Dienstplan").Range("H5:H35").Copy
Sheets("AZN-AVR").Range("H10:H40").PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
_
_
False, Transpose:=False
Sheets("Arbeitszeitnachweis").Range("B22").Copy
Sheets("AZN-AVR").Range("B3:B3").PasteSpecial Paste:=xlValue
Sheets("Dienstplan").Range("A2:A2").Copy
Sheets("AZN-AVR").Range("D5:D5").PasteSpecial Paste:=xlValue
Sheets("Dienstplan").Range("A3:A3").Copy
Sheets("AZN-AVR").Range("G5:G5").PasteSpecial Paste:=xlValue
Sheets("Dienstplan").Range("A5:A5").Copy
Sheets("AZN-AVR").Range("A10:A10").PasteSpecial Paste:=xlValue
Sheets("Dienstplan").Range("I3:I3").Copy
Sheets("AZN-AVR").Range("I8:I8").PasteSpecial Paste:=xlValue
Sheets("Dienstplan").Range("K5:K35").Copy
Sheets("AZN-AVR").Range("P10:P40").PasteSpecial Paste:=xlValue
Sheets("Dienstplan").Range("L5:L35").Copy
Sheets("AZN-AVR").Range("Q10:Q40").PasteSpecial Paste:=xlValue
Sheets("Arbeitszeitnachweis").visible = False
End If
End If
If Sheets("Arbeitszeitnachweis").ComboBox2.Value = Sheets("Arbeitszeitnachweis").Range("A24")   _
_
Then
Sheets("AZN-AVR
Hier sollen die Daten aus Dienstplan in einen Arbeitszeitnachweis übernommen werden. Da aber zwischendurch Spalten gesperrt bleiben müssen, kann ich nicht einen kompletten Bereich direkt übernehmen.
Ich freue mich schon auf Lösungen, wenn machbar.
Vielen Dank
Gruß Locean

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

Betreff
Datum
Anwender
Anzeige
AW: Code-Verbesserung
10.03.2016 15:26:57
Michael
Hallo Locean!
Deinen Code schaue ich mir jetzt nicht durch, aber bzgl.
Da aber zwischendurch Spalten gesperrt bleiben müssen, kann ich nicht einen kompletten Bereich direkt übernehmen.
Schau Dir einmal die Möglichkeiten bei Worksheets.Protect hinsichtlich userinterfaceonly an (VBA-Hilfe). Oder entferne den Blattschutz einfach direkt im Makro vor Tabellenoperationen und setze ihn danach wieder.
LG
Michael

AW: Code-Verbesserung
10.03.2016 15:39:57
Locean
Hallo Michael,
die Worksheets.protect Variante ist bereits eingebaut und funktioniert auch super. Leider dauert der Code-Durchlauf einfach nur etas lange, daher dachte ich es gibt bestimmt eine Möglichkeit den Code zu verkürzen und somit evtl. das Ganze etwas zu beschleunigen. Der genannte Code wird nämlich bis Sub20 fortgesetzt.
Liebe Grüße Locean

Anzeige
AW: Code-Verbesserung
10.03.2016 16:04:24
Michael
Hallo Locean!
die Worksheets.protect Variante ist bereits eingebaut und funktioniert auch super.
Dann spricht aber nichts dagegen, dass Du auf vollständige Bereiche referenzierst. Du meintest, dass Du das nicht tun kannst, weil Bereiche gesperrt bleiben müssen.
es gibt bestimmt eine Möglichkeit den Code zu verkürzen
Gibt es auf jeden Fall, bspw.
Sheets("AZN-AVR").Activate - brauchst Du nicht
Sheets("AZN-AVR").Visible = True - brauchst Du nicht
Und bzgl.
Sheets("Dienstplan").Range("C5:G35").Copy
Sheets("AZN-AVR").Range("C10:G40").PasteSpecial Paste:=xlValue

ließe sich sicher auch was machen, bspw. Werte aus einem Bereich direkt in einen anderen Schreiben (ohne Copy).
Weiters könntest Du auch überlegen ob Du gewisse Operationen (Kopiervorgänge... ) in eigenständige Prozeduren auslagerst, und in Deiner Hauptprozedur dann nur die benötigten Bereiche etc. übergibst. dann wird der gesamte Code schon lesbarer.
Außerdem könntest Du mit Tabellenblatt-Codenamen arbeiten, damit Du nicht immer eine Litanei an Sheets("XXX")... im Code benötigst.
So wie ich es jetzt sehe steckt die Lösung zur Kürzung des Codes nicht unbedingt in anderen Code-Methoden sondern in einer besseren Struktur Deines Codes bzw. Deiner Tabellen/Arbeitsmappe insgesamt.
Wie gesagt, sich da jetzt aber einzuarbeiten, ohne Kenntnis Deines Projekts, ist für niemanden leicht; ich mag mich da grad nicht eingraben, evtl. steigt ja noch jemand anderer ein.
Tipp von mir: Optimiere selbständig jeden Teilschritt. Überlege immer was wo (isoliert vom Ganzen) passieren soll, und versuche dafür effizienten Code zu schreiben.
LG
Michael
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige