Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1604to1608
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
Klassenmodul - Prozedur zu groß
09.02.2018 14:01:44
Ludmila
Hallo,
in einem Klassenmodul habe ich 30 Case Anweisungen welche 70 CommandButton
steuern.
Bis gestern funktionierte alles einwandfrei.
Heute jedoch kam die Meldung "Prozedur zu groß"
Gibt es eine Einschränkung für Case- Anweisungen?
Danke!
Gruß, Ludmila

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Nee, aber für Prozedurgrößen! Teilen! orT
09.02.2018 18:01:19
Ludmila
Hallo Luc,
wie kann ich die Prozedurgröße feststellen?
Wie kann ich den ein Klassen-Modul teilen?
Die Anweisungen erfolgen über die Tag Eigenschaften der CommandButton.
Alle Button befinden sich in einer Userform.
Danke!
Gruß,Ludmila
Private Sub UserForm_Initialize()
lc = -1
For Each cnt In Me.Controls
If TypeOf cnt Is MSForms.CommandButton Then
lc = lc + 1
ReDim Preserve arrCmd(lc)
Set arrCmd(lc) = New clsCommandButton
arrCmd(lc).initCommand cnt
End If
Next
End Sub

Anzeige
Teilen? Indem du aus der Prozedur eine andere ...
09.02.2018 19:58:25
Luc:-?
…aufrufst, Ludmila,
die die Fortsetzung enthält. Dabei musst du natürlich alle benötigten Variablen mit übergeben, falls sie nicht bereits für die ganze Klasse definiert wurden.
Luc :-?
AW: The whole story!
09.02.2018 20:43:41
Gerd
Hallo Ludmilla,
wenn du nur 'nen Schnipsel zeigst, musst du dir wohl selbst helfen.
Neben Teilen könnte auch Eindampfen angesagt sein.
Gruß Gerd
AW: The whole story!
09.02.2018 23:15:00
Ludmila
Hallo Luc,
hallo Gerd,
wie Ihr ja seht bin ich eine Anfängerin.
So wie ich es verstehe müßte ich z.B. Case "cmdS3" dann mit Run "Makro1" versehen?
Klassenmodul clsCommandButton
Option Explicit
Option Compare Text
Public WithEvents myCom As MSForms.CommandButton
Public Function initCommand(btn As MSForms.CommandButton) As Object
Set initCommand = Nothing
Set myCom = btn
Set initCommand = Me
End Function

Private Sub myCom_Click()
Dim A As Variant, dZeit As Date, vA As Variant, dH As Double
Set wkb = Workbooks(sD): Set wksD = wkb.Worksheets("Data"): Set wksB = wkb.Worksheets("BT") _
: Set wksH = wkb.Worksheets("Help")
With uf
Select Case myCom.Tag
Case "cmdS3"
Hier kommen die verschiedenen Codes gesamt ca. 2000 Zeilen
case ....... bis cmdS30
end select
end with
Set wkb = Nothing: Set wksD = Nothing: Set wksB = Nothing
End Sub

Weiss nicht wie ich es besser aufzeigen soll, ohne den ganzen Code zu schreiben.
Danke!
Gruß, Ludmila
Anzeige
Normalerweise gehe ich nicht von 'Eindampfen' ...
10.02.2018 00:02:50
'Eindampfen'
…aus, Ludmila (& Gerd),
da meine Pgmm schon knapp genug sind, aber mitunter trotzdem die Limits überschreiten. Bei VBA-Anfängern ist das aber der Regelfall! Da es sich hier aber um ein Select Case-Konstrukt handelt, müsste man für einen derartigen Vorschlag wenigstens eine Case-Anweisung kennen (nicht gerade die kürzeste!). Ein Auslagern des gesamten Konstrukts scheint mir bei 2Tsd Zeilen auch wenig sinnvoll zu sein, so dass nur noch Teilen des Konstrukts infrage käme, bspw so:
Select Case myCom.Tag
Case "cmdS3"
'… bis Case "cmdS15"
Case Else: Call myCom_Part2(uf, myCom.Tag)
End Select
Private Sub myCom_Part2(uf As Object, myComTag$, …was_sonst_noch_benötigt_wird)
With uf
Select Case myComTag
Case "cmdS16"
'… bis Case "cmdS30"
End Select
End With 'usw
Morrn, Luc :-?
Anzeige
AW: Normalerweise gehe ich nicht von 'Eindampfen' ...
10.02.2018 00:24:46
'Eindampfen'
Hallo Luc,
vielen Dank für Deinen Vorschlag.
Es funktioniert.
Hoffe ich bringe Dich nicht um Deinen wohlverdienten Schlaf.
Gute Ncht!
Gruß, Ludmila
Nee, nee, hab' noch zu tun. Na dann... ;-) owT
10.02.2018 00:40:03
Luc:-?
:-?

122 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige