Thema Datum  Von Nutzer Rating
Antwort
08.10.2014 13:14:49 Nicolai
NotSolved
08.10.2014 16:19:31 jhs
NotSolved
08.10.2014 16:22:44 Nicolai
NotSolved
08.10.2014 19:25:33 Gast55410
NotSolved
09.10.2014 07:34:23 Nicolai
NotSolved
09.10.2014 08:44:08 Gast57398
Solved
Rot VBA-Prozedur zu groß
09.10.2014 11:34:57 jhs
Solved
09.10.2014 12:37:24 Nicolai
NotSolved
16.10.2014 10:36:25 TSR
NotSolved

Ansicht des Beitrags:
Von:
jhs
Datum:
09.10.2014 11:34:57
Views:
722
Rating: Antwort:
 Nein
Thema:
VBA-Prozedur zu groß

Hallo Nicolai,

leider bin ich nicht eher zu einem Zwischenbericht gekommen. Zu der Fehlermeldung hat sich ja mein Vorredner schon geäußert, es fehlt einfach die Zuweisung mit Set. Im Codemodul der Form haben allerdings die folgenden beiden Formulierungen dieselbe Wirkung:

UserForm2.OptionButton1.Value
' oder
OptionButton1.Value

Explizit auf die UserForm referenzieren müsstest du nur in einem allgemeinen Modul oder einem Klassenmodul (inkl. Tabellenblatt oder DieseArbeitsmappe).

Im Übrigen bringt das in Bezug auf die Größe der Prozedur fast nichts. Nebenbei gesagt, könnte man diesen Abschnitt am Anfang bis auf die MsgBox ganz weglassen, wenn die Variable akennz bereits imChange-Event der OptionButtons belegt wird. Dazu müsste sie natürlich auf Modulebene deklariert werden, damit sie in allen Prozeduren bekannt ist:

Option Explicit

Dim akennz As Integer

Private Sub OptionButton1_Change()
If OptionButton1 Then akennz = 1
End Sub

' usw. für alle OptionButtons

Bevor ich auf andere Probleme eingehe, möchte ich sagen, dass ich von einer Quick-and-dirty-Lösung à la Splittung des Codes nicht viel halte. Natürlich könnte man z. B. die Behandlung von akennz = 1 ... 15 in eine separate Prozedur Private Sub Teil1(ak As Integer) auslagern, und analog für akennz = 16 ... 29 in eine Sub Teil2 (beide ebenfalls im Codemodul der Form). In der Click-Prozedur des CommandButtons müsste man dann, ggf. nach einleitenden Prüfungen usw. nur noch einen bedingten Aufruf der einen oder anderen Prozedur platzieren:

If akennz < 16 Then
  Teil1 akennz
Else
  Teil2 akennz
End If

Es muss nur dafür gesorgt werden, dass in den ausgelagerten Prozeduren alle relevanten Variablen bekannt sind, was aber kein Problem sein sollte, da diese, soweit ich sehe alle der aktiven Tabelle oder TextBoxen der Form entnommen werden. Eine wirklich gute Lösung ist das allerdings IMO nicht.

Ich habe gestern erst mal folgende Optimierungen vorgenommen, die den Code zwar verkleinern, aber leider nicht unter das Limit von 64 KB:

- auskommentierte Codeteile gelöscht

- Codeformatierung optimiert und vereinheitlicht (Leerzeilen, Einrückungen)

- die überflüssige Vielzahl verschiedener Variablen inkl. der dazugehörigen Deklarationen und Zuweisungen drastisch reduziert

- immer wiederkehrende identische Codeteile vereinfacht.

Eine wirkliche Lösung wäre nur die Auslagerung des Codes für die Behandlung der verschiedenen Werte von akennz und dessen Aufruf in einer Select Case-Struktur mit akennz als Testausdruck. Leider konnte ich diesen Code noch nicht ausführlich analysieren, aber offenbar gibt es vom Typus her mindestens zwei verschiedene Grundstrukturen, die sich innerhalb des jeweiligen Typs auch abhängig vom Wert von akennz noch in Details unterscheiden. Wenn es gelänge, den betreffenden Code soweit zu vereinheitlichen, dass man nur zwei externe Prozeduren, ggf. mit Übergabe mehrerer Parameter aufrufen muss, wäre das Problem gelöst. Aber bis dahin ist es noch ein weiter Weg...

Gruß Jürgen

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
08.10.2014 13:14:49 Nicolai
NotSolved
08.10.2014 16:19:31 jhs
NotSolved
08.10.2014 16:22:44 Nicolai
NotSolved
08.10.2014 19:25:33 Gast55410
NotSolved
09.10.2014 07:34:23 Nicolai
NotSolved
09.10.2014 08:44:08 Gast57398
Solved
Rot VBA-Prozedur zu groß
09.10.2014 11:34:57 jhs
Solved
09.10.2014 12:37:24 Nicolai
NotSolved
16.10.2014 10:36:25 TSR
NotSolved