Prozedur zu groß - Visual Basic- Ecxel 2007

Hallo,
als Anfänger habe ich mich an die Bearbeitung eines Programms in VBA herangewagt. Nun ist mein Latein am Ende. Das Programm soll für 18 Mannschaften die Ergebnisse (Punkte und Tore) aufnehmen. Die ersten Schritte bis 5 Mannschaften liefen einwandfrei. Nun habe ich das Programm auf die 18 Mannschaften fertig geschrieben und bekomme die Meldeun „Prozedur zu groß!“ Nach 2/3 des Programms habe ich Call Prozeur1 anschließend End Sub, danach Sub Prozedur1() eingetragen. Der Erfolg war, dass mir ein Fehler in der Programmierung ( gelb) angezeigt wird. Wie kann ich das Problem lösen?
Ich arbeite mit Exel 2007.
Im Internet habe ich einen Hinweis lesen können, der mit IF und select Anweisung in einem anderen Modul gegeben worden ist. Konnte aber keinen Arbeitsgang feststellen, der mir als Unterlage dienen könnte, wie ich diesen Weg beschreiten muss.
Für die Unterstützung bedanke ich mich recht herzlich.
Gruß Bernhard

Hallo,

Wie kann ich das Problem lösen?

indem Du den Code verbesserst.
Wo Du hunderte Zeilen hast, genügt sicher eine intelligente Schleife.

Zeig mal ein Stück vom Code, verwende dabei bitte den ‚pre‘-Tag. Dann können Dir die Experten sicher sagen, wie man das richtig macht.

Gruß Rainer
[MOD]

Hallo Rainer,
als blutiger Anfänger kann ich mit der Bitte ein Teil des Programms in’pre’-Tag senden nichts anfangen.
Ich hoffe, dass ich mit dem u.a. Programmteil das Problem aufzuzeigen und nicht unnötig mehr Arbeit dadurch entstanden ist. Wenn ja, dann bitte ich um etwas Nachsehen!
Für die Unterstützung danke ich.-
Gruß Bernhard
Sub HoleInfo(Reihe,Spalte)
'Sieg für Heimmannschaft
If TextBox1.Value = „1“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „2“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „3“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „4“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „5“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „6“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „7“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „8“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „9“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „10“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „11“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „12“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „13“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „14“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „15“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „16“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „17“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „18“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“

'verloren Heimmannschaft
If TextBox1.Value = „1“ And TextBox3.Value TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „2“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „3“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „4“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „5“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „6“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „7“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „8“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „9“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „10“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „11“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „12“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „13“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „14“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „15“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „16“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „17“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „18“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“

'Sie für Gastmannschaft
If TextBox2.Value = „1“ And TextBox3.Value

Hallo Bernhard,

als blutiger Anfänger kann ich mit der Bitte ein Teil des
Programms in’pre’-Tag senden nichts anfangen.

ich werde die pre-tags verwenden, wenn Du auf ‚Antworten und zitieren‘ klickst, siehst Du sie.

Ich nehme mal nur die ersten beiden Blöcke aus Deinem Code …

Sub HoleInfo(Reihe,Spalte)
'Sieg für Heimmannschaft
If TextBox1.Value = "1" And TextBox3.Value \> TextBox4.Value Then TextBox5.Value = "3"
If TextBox1.Value = "2" And TextBox3.Value \> TextBox4.Value Then TextBox5.Value = "3"
If TextBox1.Value = "3" And TextBox3.Value \> TextBox4.Value Then TextBox5.Value = "3"
If TextBox1.Value = "4" And TextBox3.Value \> TextBox4.Value Then TextBox5.Value = "3"
If TextBox1.Value = "5" And TextBox3.Value \> TextBox4.Value Then TextBox5.Value = "3"
If TextBox1.Value = "6" And TextBox3.Value \> TextBox4.Value Then TextBox5.Value = "3"
If TextBox1.Value = "7" And TextBox3.Value \> TextBox4.Value Then TextBox5.Value = "3"
If TextBox1.Value = "8" And TextBox3.Value \> TextBox4.Value Then TextBox5.Value = "3"
If TextBox1.Value = "9" And TextBox3.Value \> TextBox4.Value Then TextBox5.Value = "3"
If TextBox1.Value = "10" And TextBox3.Value \> TextBox4.Value Then TextBox5.Value = "3"
If TextBox1.Value = "11" And TextBox3.Value \> TextBox4.Value Then TextBox5.Value = "3"
If TextBox1.Value = "12" And TextBox3.Value \> TextBox4.Value Then TextBox5.Value = "3"
If TextBox1.Value = "13" And TextBox3.Value \> TextBox4.Value Then TextBox5.Value = "3"
If TextBox1.Value = "14" And TextBox3.Value \> TextBox4.Value Then TextBox5.Value = "3"
If TextBox1.Value = "15" And TextBox3.Value \> TextBox4.Value Then TextBox5.Value = "3"
If TextBox1.Value = "16" And TextBox3.Value \> TextBox4.Value Then TextBox5.Value = "3"
If TextBox1.Value = "17" And TextBox3.Value \> TextBox4.Value Then TextBox5.Value = "3"
If TextBox1.Value = "18" And TextBox3.Value \> TextBox4.Value Then TextBox5.Value = "3"

'verloren Heimmannschaft
If TextBox1.Value = "1" And TextBox3.Value 

... Und schreibe mal etwas, das exakt identisch ist:



    
    Private Sub tst()
     Dim i As Integer
     For i = 1 To 18
     If TextBox1.Value = CStr(i) And TextBox3.Value \> TextBox4.Value Then TextBox5.Value = "3"
     If TextBox1.Value = CStr(i) And TextBox3.Value 
    
    Nur ein wenig kürzer.
    
    Bekommst Du jetzt die anderen Blöcke da selbt mit hinein?
    
    Gruß Rainer

Hallo Bernhard,

mir ist da noch etwas aufgefallen …
Willst Du da etwa nur prüfen, ob der Inhalt der Textbox1 > 0 ist?
Dann kannst Du das auch schreiben …

Option Explicit

Private Sub CommandButton1\_Click()
 If TextBox1.Value \> 0 Then
 If TextBox3.Value \> TextBox4.Value Then TextBox5.Value = "3"
 If TextBox3.Value 

Gruß Rainer

Prozedurgröße in Excel Vba und Vb

Willst Du da etwa nur prüfen, ob der Inhalt der Textbox1 > 0
Private Sub CommandButton1_Click()
If TextBox1.Value > 0 Then
If TextBox3.Value > TextBox4.Value Then TextBox5.Value
= „3“
If TextBox3.Value http://www.xlam.ch/xlimits/visualbasic.htm

da wird von 64 KB kompilierten Code pro Prozedur gesprochen. Wenn ich das richtig überflogen habe gilt das sowohl für Vb als auch für VBA.
Allerdings habe ich Null Plan wieviele Bytes deine zig If-Abfragen kompiliert verschlingen.

@Rainer, schau dich mal bei http://www.xlam.ch/xlimits/index.htm um und sage mir wieviele Menschenjahre es braucht um soetwas zu erstellen?
Meiner Schätzung nach muß Philipp von Wartburg 500 Jahre alt sein *lächel*
Ich habe größte Hochachtung vor seiner Leistung für Andere.

Gruß
Reinhard

Hallo Reinhard,

da du dich ja drum kümmerst habe ich mich noch gar nicht damit
beschäftigt:smile:

mach ruhig. :smile: Bis jetzt wurde noch kein VBA-Spezialist gebraucht außer …

Mir fällt nur in deinem Code auf daß
If TextBox3.Value = TextBox4.Value
nicht behandelt wird. K.A. ob das nötig ist.

… TextBox3.Value = … > … http://www.xlam.ch/xlimits/visualbasic.htm

da wird von 64 KB kompilierten Code pro Prozedur gesprochen.
Wenn ich das richtig überflogen habe gilt das sowohl für Vb
als auch für VBA.
Allerdings habe ich Null Plan wieviele Bytes deine zig
If-Abfragen kompiliert verschlingen.

@Rainer, schau dich mal bei
http://www.xlam.ch/xlimits/index.htm um und sage mir wieviele
Menschenjahre es braucht um soetwas zu erstellen?
Meiner Schätzung nach muß Philipp von Wartburg 500 Jahre alt
sein *lächel*
Ich habe größte Hochachtung vor seiner Leistung für Andere.

ich habe die richtige Stelle nicht gefunden.

Aber 64K-Code schreiben? Das habe ich auch schon getan. :smile: Vor 20 Jahren auf dem ‚Commodore plus 4‘ in Assembler. *gg* das hat 10 Wochen gedauert.

Gruß Rainer

Noch mal Hallo,

Mir fällt nur in deinem Code auf daß
If TextBox3.Value = TextBox4.Value
nicht behandelt wird. K.A. ob das nötig ist.

Ja, das ist nötig, ich hab’s nur nicht mit behandelt.
Es geht um die Auswertung von Fussballergebnissen. Bei a = b gibts einen Punkt. Die ‚0‘ war verloren, die ‚3‘ gewonnen.

Gruß Rainer

Hallo Rainer,
das gesamte Programm soll folgende Aussage machen:
In Textbox1 und Textbox 2 :
wird eine Startnummer für eine Mannschaft geschrieben, wonach dann der Name der Mannschaft
z. B. 1 = Köln und 2= Nürnberg .
Textbox3 und Textbox4 steht das Spielergebnis: z. B. 3:1
If Textbox1.value =“1” and textbox3.value >textbox4. Value then textbox3.value =”3”
Textbox 5 wird nach Prüfung bei Sieg die Punktzahl 3 – wenn verloren dann „0“ eingetragen.
Textbox6 : entsprechend „0“ bzw „3“ auf das Tabellenblatt übertragen.
Der nächste Block:
In Textbox7 und Textbox8 werden die Tore eingetragen, die dann für den Verlierer gedreht werden;
für die Siegmannschaft werden 3:1 – für die Verlierer 1:3 in das Tabellenblatt übertragen.
So ist das gesamte Programm für 18 Mannschaften aufgebaut worden.
Ich habe es auch schon so probiert, wie Du es als Muster mir mitgeteilt hast. Leider hatte ich damit keinen Erfolg.
Ich werde es aber noch einmal probieren und hoffe, dass ich dadurch einige Programmzeilen und damit das Programm kleiner machen kann.
Vielleicht ist es verständlicher, wenn ich das gesamte Programm anhänge, dann sieht man wie es gehen soll.
Für Deine Unterstützung bedanke ich mich.
Nachfolgend die Gesamtübersicht und hoffe, dass es nicht zu ermüdend für Dich wird!
Es grüßt Bernhard

Sub HoleInfo(Reihe, Spalte)
'Sieg für Heimmannschaft
If TextBox1.Value = „1“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „2“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „3“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „4“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „5“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „6“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „7“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „8“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „9“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „10“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „11“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „12“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „13“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „14“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „15“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „16“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „17“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“
If TextBox1.Value = „18“ And TextBox3.Value > TextBox4.Value Then TextBox5.Value = „3“

'verloren Heimmannschaft
If TextBox1.Value = „1“ And TextBox3.Value TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „2“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „3“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „4“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „5“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „6“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „7“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „8“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „9“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „10“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „11“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „12“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „13“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „14“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „15“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „16“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „17“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“
If TextBox2.Value = „18“ And TextBox3.Value > TextBox4.Value Then TextBox6.Value = „0“

'Sie für Gastmannschaft
If TextBox2.Value = „1“ And TextBox3.Value

VBA …
Hallo Bernhard,

jetzt wird’s zu viel Excel für mich. :smile:
Um den ganzen Code ‚richtig‘ zu ändern, müsste ich den einladen und das Ergebnis testen. Ich habe aber kein Excel. :smile:

Reinhard wird sich den Code ansehen …

Gruß Rainer

Hallo Reinhard,

da du dich ja drum kümmerst habe ich mich noch gar nicht damit
beschäftigt:smile:

jetzt ist der vollständige Code da, zu viel Excel für mich.
Siehst Du Dir das bitte mal an? Da kann nicht mer viel Code übrig bleiben. :smile:

Gruß Rainer

Bundesligaauswertung

jetzt ist der vollständige Code da, zu viel Excel für mich.
Siehst Du Dir das bitte mal an? Da kann nicht mer viel Code
übrig bleiben. :smile:

Hallo Rainer,

das schon, aber der ganze Aufbau ist doch marode:frowning:

Anstatt in einem Auswahlfeld einen Vereinsnamen auszuwählen muß man sich da wohl die Nummern alle Vereine merken und die dann eingeben.
Da ist ja schon der Grundansatz sehr Userunfreundlich.

Ja, den Code habe ich gesehen. Wird mir schwindlig dabei:smile:

Gefühlte 500 Codezeilen beim Runterscrollen a 80 Bytes sind ja schon 40 KB.
May be, kompiliert ragt es über die 64 KB Grenze heraus *nixweiß*

So, zum Thema.
@Bernhard
Wie wäre es mit einem grundsätzlichen neuen Ansatz?

Erstelle mal eine Beispielmappe mit 4 Blättern.
In 3 Blättern (quasi für 3 Spieltage) stehen in Spalten getrennt die Mannschaften und die Ergebnisse.
Im 4ten Blatt dann die Gesamtauswertung für die Saison wie du sie dir vorstellst.

Lade das dann hoch mit FAQ:2606

Aber vorher mache bitte noch etwas wichtiges, google mal nach
Bundesliga.xls, Fußballliga.xls, Ligaasuwertung.xls u.ä. Wörter.
Von Excel-Lösungen zu der Problematik wimmelt es im Internet.

Auch im Archiv von w-w-w war das Thema schon oft Thema.

Gruß
Reinhard

Hallo Reinhard,

das schon, aber der ganze Aufbau ist doch marode:frowning:

deshalb ist Bernhard ja hier.

Anstatt in einem Auswahlfeld einen Vereinsnamen auszuwählen
muß man sich da wohl die Nummern alle Vereine merken und die
dann eingeben.
Da ist ja schon der Grundansatz sehr Userunfreundlich.

Bernhard hat sich einen Weg gesucht, auf dem er gehofft hat zu einem richtigen Ergebnis zu kommen und den er auch gehen kann.

Dabei hat er sich wohl verlaufen und Du wirst jetzt gebeten den Lotsen zu geben.

Ein anderer Weg, der bequemer ist und auch noch von einer schöneren Landschaft umrahmt ist, kommt sicher gut. :smile:

Gruß Rainer

Hallo Rainhard,
noch einmal recht herzlich Dank für Deine Unterstützung.
Gruß Bernhard

Danke
hallo Bernhard,

Hallo Rainhard,

Danke deshalb, weil deshalb habe ich eben sehr gelacht :smile:

noch einmal recht herzlich Dank für Deine Unterstützung.

Gerne, aber ich warte auf deine.

Gruß
Reinhard