Hallo clag,
Datei habe ich noch nicht getestet, aber das Makro hab ich mir angeschaut.
Sa sag mal, wieviele Jahre beschäftigst Du dich eigentlich schon mit Basic?
kritisches betrachten und kommentieren ist erwünscht.
Na dann wolln ma mal!
Wenn es um das komprimieren eines Makrocode geht, hast Du schon fast eine 1 verdient. Aber das ist kein Grund zum Jubeln, da sich dadurch der Code sehr schwer lesen lässt und in folge dessen die Note 1 ohne Belang, ohne Wert ist.
Code: Alles auswählen
oCellRange = oLogSheet.getCellRangeByName("A3:C260") : ocellRange.clearContents(63)
Autsch!
Geht doch einfacher.
Code: Alles auswählen
oLogSheet.getCellRangeByName("A3:C260").clearContents(63)
Klar kann man mehrere Zeilen durch den Doppelpunkt (:) in eine Zeile packen, aber das erhöht in deinem Falle überhaupt nicht die lesbarkeit.
Code: Alles auswählen
if nSheets > 1 then : mAllSheetNames = oCollect.getsheets.elementNames()
for i=1 to UBound( mAllSheetNames) : oCollect.Sheets.removebyname(mAllSheetNames(i))
next : end if : nSheets = oCollect.getsheets.count
Da verlier ich sehr schnell den Überblick, und die Lust weiter zu lesen!
Auch wenn man durch den Doppelpunkt Schleifen und Zähler -{"For ... Next" / "If ... Then"}- in eine Zeile packen kann, so ist das schwer zu lesen.
Hier mal ein Beispiel aus der Toolsammlung von AOO wie es besser aussieht.
Code: Alles auswählen
If a <> -1 Then
If Vartype(TargetProperties(a).Value) <> 9 Then
If TargetProperties(a).Value <> oContent(i).Value Then
oContent(i).Value = TargetProperties(a).Value
bDoReplace = True
End If
Else
If Not EqualUnoObjects(TargetProperties(a).Value, oContent(i).Value) Then
oContent(i).Value = TargetProperties(a).Value
bDoReplace = True
End If
End If
End If
Da sieht man sofort auf den ersten Blick was wozu gehört. Das ist eine klare Strukrur.
Der Doppelpunkt lässt sich aber z.B. prima für mehrdimensionale Arrays nutzen.
Beispiele:
Code: Alles auswählen
btnicoArray(0,0) = "CommandButton1" : btnicoArray(1,0) = "Abbruch.png"
btnicoArray(0,1) = "CommandButton3" : btnicoArray(1,1) = "Korrektur.png"
Oder
Code: Alles auswählen
FaLi(0, 0) = "&H000000" : FaLi(1, 0) = "Schwarz" : FaLi(2, 0) = "&H000000" : FaLi(3, 0) = "Schwarz"
FaLi(0, 1) = "&H000080" : FaLi(1, 1) = "Blau" : FaLi(2, 1) = "&H00005A" : FaLi(3, 1) = "Blau -30%"
Was hast Du davon wenn Du deinen Code durch den Doppelpunkt so sehr komprimierst? Was bringt dir das? Warum muss das so sein?
Bei der Zelladressierung habe ich mir folgendes angewöhnt.
1.
Adressierungen die ich nicht durch eine "For ... Next", oder ähnliches, manipulieren muss, werden mit getCellRangeByName geschrieben.
2.
Adressierungen die ich mittels einer "For ... Next", oder ähnliches, manipulieren muss, werden mit getCellByPosition geschrieben. Ausnahmen bestätigen die Regel, so das auch getCellRangeByName angewendet werden kann.
3.
Nach möglichkeit werden die Variablendefinitionen für die Zelladressierungen alle am Anfang einer Sub aufgelistet.
Aber einen Pluspunkt hast Du dir dennoch verdient, und zwar für die optische Trennung der einzelnen Subs

.
Eins kannst Du mir aber ruhig glauben, ich weiß selber wie schwer das alles ist.
Gruß
balu