AW: EnableEvents zusammengeschrieben
15.01.2020 14:38:25
Daniel
hi
blöde Frage, warum nimmst du den Schutz nicht einfach raus, bevor du die Datei für uns hochlädst?
ein Problem ist die Anfängerhafte Programmierung im Makro des DropDownButtons.
es sollte sich inzwischen herumgesprochen haben, dass es in VBA nicht unbedingt notwendig ist, eine Zelle zu selektieren, bevor man sie bearbeitet und dass Code vom Recorder immer überarbeitet werden muss.
hier wird beispielsweise 6x das Selection.Change und das Change-Event durchlaufen, obwohl das wahrscheinlich nicht notwendig ist:
ActiveCell.FormulaR1C1 = "0"
Range("A11").Select
Selection.ClearContents
Range("A12").Select
Selection.ClearContents
Range("A13").Select
Selection.ClearContents
Range("A14").Select
Selection.ClearContents
Range("A15").Select
Selection.ClearContents
Range("A16").Select
Selection.ClearContents
dieser Block lässt sich in einer einzigen Zeile zusammenfassen:
Range("A1:A16").ClearContents
und dann wird das SelectionChange-Event gar nicht und das Change-Event einmal aufgerufen.
oder auch hier:
Range("c2").Select
ActiveCell.FormulaR1C1 = "=RAND()*10000"
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
warum nicht einfach
Range("C2").Value = Worksheetfunction.RandBetWeen(1, 10000)
(wobei man die Funktion dieser Zeile mal überdenken sollte)
das Prinzip solltest durchgehend anwenden, dh
- Zellen ohne vorherige Selektion direkt bearbeiten
- alle Zellen, die den gleichen Bearbeitungsschritt, Wert oder Formel bekommen, in einem Schritt füllen.
das klappt auch mit nicht zusammenhängenden Zellbereichen:
Range("C10").Select
ActiveCell.FormulaR1C1 = "0"
Range("C11").Select
ActiveCell.FormulaR1C1 = "0"
Range("C12").Select
ActiveCell.FormulaR1C1 = "0"
Range("C13").Select
ActiveCell.FormulaR1C1 = "0"
Range("C14").Select
ActiveCell.FormulaR1C1 = "0"
Range("C15").Select
ActiveCell.FormulaR1C1 = "0"
Range("C16").Select
ActiveCell.FormulaR1C1 = "0"
Range("D10").Select
ActiveCell.FormulaR1C1 = "0"
Range("D11").Select
ActiveCell.FormulaR1C1 = "0"
Range("D12").Select
ActiveCell.FormulaR1C1 = "0"
Range("D13").Select
ActiveCell.FormulaR1C1 = "0"
Range("D14").Select
ActiveCell.FormulaR1C1 = "0"
Range("D15").Select
ActiveCell.FormulaR1C1 = "0"
Range("D16").Select
ActiveCell.FormulaR1C1 = "0"
Range("d25").Select
ActiveCell.FormulaR1C1 = "0"
Range("d26").Select
ActiveCell.FormulaR1C1 = "0"
Range("D27").Select
ActiveCell.FormulaR1C1 = "0"
Range("d28").Select
ActiveCell.FormulaR1C1 = "0"
Range("D29").Select
ActiveCell.FormulaR1C1 = "0"
Range("d30").Select
ActiveCell.FormulaR1C1 = "0"
Range("d31").Select
ActiveCell.FormulaR1C1 = "0"
Range("D33").Select
ActiveCell.FormulaR1C1 = "0"
Range("D34").Select
ActiveCell.FormulaR1C1 = "0"
Range("d38").Select
ActiveCell.FormulaR1C1 = "0"
Range("B56").Select
ActiveCell.FormulaR1C1 = "0"
wird zu
Range("C10:D16,D25:D34,D38,D56")=0
Gruß Daniel