Prozedur zu groß!

M

maniblu

Hey Leute,

Ich habe ein großes Problem und bin aber leider totaler Anfänger und hoffe ihr könnt mir helfen.

Ich habe ein total großes Programm, welches über Excel verschiedene Teile von einen Link einliest, zusammen setzt und ihn wieder in einer Tabelle in unterschiedlichen Spalten ausgibt, diesen kann man über Excel ändern und dadurch gibt er zu einer bestimmten Zeit einen bestimmten Wert zurück.

Alles hat gepasst und auch funktioniert, bis auf die Tatsache, dass er schreibt "Prozedur zu groß".

Jetzt wollte ich es einfach in unterschiedliche Funktionen unterteilen, also
Einlesen 1 Funktion und Ausgabe 2 Funktion und das ganze wird in meiner Hauptprozedur aufgerufen. NUR funktioniert dass leider nicht da er mir die ganzen Werte die ich in die Funktionen kopiert habe nicht mehr ins Hauptprogramm zurück.
Also bei meiner Funktion Einlesen bleiben die eingelesen Teile in den Variablen, kann sie aber nur in eben in der Funktion verwenden und nicht in meinem Hauptprogramm....Hoffe ihr nkönnt das so halbwegs verstehen.....

Hoffe so sehr, dass ihr mir helfen könnt, bin schon total verzweifelt....
Vielen Dank, maniblu
 
könnten wir ev, wenn wir sehen würden wie du das mit den Funktion gelöst hast.

Poste nicht die ganzen Funktionen. Es reichen die folgenden Zeilen

- Kopfzeile der Funktion
- Setzen des Return-Value
- AUfruf der Funktion
 
Ich hab einfach geschrieben:

Public Sub einlesen()

Application.Goto reference:=Worksheets("Config").Range("B74") '
anfrage = ActiveCell.FormulaLocal
Application.Goto reference:=Worksheets("Config").Range("B75")
link = ActiveCell.FormulaLocal
Application.Goto reference:=Worksheets("Config").Range("B76")
archiv = ActiveCell.FormulaLocal
Application.Goto reference:=Worksheets("Config").Range("B77")
state = ActiveCell.FormulaLocal
Application.Goto reference:=Worksheets("Config").Range("B78")
zeichen = ActiveCell.FormulaLocal
Application.Goto reference:=Worksheets("Config").Range("B79")
zeichen2 = ActiveCell.FormulaLocal
.
.
.
.Und so geht das ganze noch 20 mal weiter....

Dann hab ich noch

Public Sub output()

If monat = "1" Then
If objekt <> "" And typ <> "" Then
For d = 1 To 31
datumneu = "1/" & d & "/2010"
For i = 11 To 12
Application.Goto reference:=Worksheets("Config").Range("A" & i)
zeit = ActiveCell.FormulaLocal
Application.Goto reference:=Worksheets("Config").Range("B" & i)
zeit1 = ActiveCell.FormulaLocal
Application.Goto reference:=Worksheets("Config1").Range("B" & i)
ActiveCell.Formula = anfrage & link & objekt & archiv & typ & zeichen2 & zeichen & datumneu & zeit & zeichen2 & zeichen & datumneu & zeit1 & state
Next i
Application.Goto reference:=Worksheets("Config1").Range("C" & 12)
ActiveCell.Copy
Application.Goto reference:=Worksheets("Day").Range("B" & 11 + d)
ActiveCell.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Next d
Else
For i = 11 To 34
Application.Goto reference:=Worksheets("Config1").Range("B" & i)
ActiveCell.Formula = ""
Next i
End If

End Sub Und das wieder holt sich dann noch genau 60 mal

Und das dachte ich ruf ich dann einfach mit Calloutput auf im Hauptprogramm....
 
Bitte den Code formatiert in [code=vb]mein Code[/code] setzen.
So wie er jetzt da steht kann man das Ding kaum lesen
 
Visual Basic:
Public Sub einlesen()

Application.Goto reference:=Worksheets("Config").Range("B74") '
anfrage = ActiveCell.FormulaLocal                              
Application.Goto reference:=Worksheets("Config").Range("B75")  
link = ActiveCell.FormulaLocal                                  
Application.Goto reference:=Worksheets("Config").Range("B76")   
archiv = ActiveCell.FormulaLocal                               
Application.Goto reference:=Worksheets("Config").Range("B77")   
state = ActiveCell.FormulaLocal                                
Application.Goto reference:=Worksheets("Config").Range("B78")  
zeichen = ActiveCell.FormulaLocal                            
Application.Goto reference:=Worksheets("Config").Range("B79")  
zeichen2 = ActiveCell.FormulaLocal

.Und so geht das ganze noch 20 mal weiter....

Visual Basic:
Public Sub output()

If monat = "1" Then
        If objekt <> "" And typ <> "" Then          
            For d = 1 To 31                        
                datumneu = "1/" & d & "/2010"     
                    For i = 11 To 12
                        Application.Goto reference:=Worksheets("Config").Range("A" & i) 
                        zeit = ActiveCell.FormulaLocal                                 
                        Application.Goto reference:=Worksheets("Config").Range("B" & i)
                        zeit1 = ActiveCell.FormulaLocal                                 
                        Application.Goto reference:=Worksheets("Config1").Range("B" & i) 
                       ActiveCell.Formula = anfrage & link & objekt & archiv & typ & zeichen2 & zeichen &  datumneu & zeit & zeichen2 & zeichen & datumneu & zeit1 & state  
                    Next i
                        Application.Goto reference:=Worksheets("Config1").Range("C" & 12)  
                        ActiveCell.Copy                                                    
                        Application.Goto reference:=Worksheets("Day").Range("B" & 11 + d)   
                        ActiveCell.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
                        False, Transpose:=False                                            
            Next d
        Else
            For i = 11 To 34
                Application.Goto reference:=Worksheets("Config1").Range("B" & i)
                ActiveCell.Formula = ""
            Next i
        End If
                         
End Sub
Und das wieder holt sich dann noch genau 60 mal
 
Und diese 2 wollte ich eben im Hauptprogramm wieder mit Call....auffrufen.

Tut mir leid, dass habe ich übersehen.....
 
Sind diese Varibalen als global deklariert oder wie weiss das Programm was in monat, objekt etc. stehen soll?
 
Also ich kann deinen Code noch nicht so ganz verstehen, vermute aber das man vieles davon kürzen bzw. zusammenfassen könnte.

Kannst du uns ein bisschen was darüber sagen was du machen willst.

Gruß Thomas
 
Ja die Variablen sind global defeniert.

Das ist ja auch nur ein Teil von dem Programm, aber ich hätte es eben gerne so, wie ich es euch gezeigt habe, ausgelagert.

Also dass waren jetzt 2 Funktionen, wie ich es mir vorgestellt hätte, das Programm zu teilen damit nicht mehr diese Fehlermeldung kommt, Prozedur zu Groß.
 
Zurück