Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1036to1040
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
Inhaltsverzeichnis

Grösse von Code in Modul erreicht

Grösse von Code in Modul erreicht
07.01.2009 23:20:10
Code
Hi Excelianer
Für Euch ein Klacks für mich zu koplex.
Habe ein Modul erstellt mit extrem vielen Copy Destinationen in der Zahl über 900. Jetzt bringt VBA, dass die 64 KB Grenze erreicht ist. Und dabei muss ich noch mind. 400 Copy Dest... noch einsetzen.
Wie kann ich den Begriffen:
- Copy Destination
- Sheets
- Range
- Tabelle6
Kürzel geben.
So im Sinne By Val Range as ...Boolean etc. (Leider kenne ich mit diesen Begriffen nicht aus, bzw.
ich schnalle es nicht, bzw. kann die Unterscheidung nicht einordnen.
Für Eure Hilfe würde ich mich sehr freuen.
Gruß
Ulrich

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Grösse von Code in Modul erreicht
07.01.2009 23:29:31
Code
Hallo,
die Grenze gilt für eine einzelne Prozedur, nicht für ein Modul. Die habe ich noch nie geschafft.
Ich vermute mal, dass dein Code ziemlich viel Überflüssiges enthält.
Auszug?
Gruß
Dierk
AW: Grösse von Code in Modul erreicht
07.01.2009 23:36:00
Code
Hi Dierk
Danke.
Hier ein Auszug davon. Geht bis Z und danach a1 bis z1 und danach 1e bis 22e. Also ziemlich viel.
Option Explicit
Sub Copy()
'Vorjahreszahlen übertragen von Einzelblätter A..B..etc. zu Hauptblatt "DatenUForm"
'A
Sheets("A").Range("A9:A14").Copy Destination:=Sheets("DatenUForm").Range("H2:H7")
Sheets("A").Range("A17:A22").Copy Destination:=Sheets("DatenUForm").Range("H8:H13")
Sheets("A").Range("A26:A34").Copy Destination:=Sheets("DatenUForm").Range("H14:H22")
Sheets("A").Range("A38:A41").Copy Destination:=Sheets("DatenUForm").Range("H23:H26")
Sheets("A").Range("A45:A49").Copy Destination:=Sheets("DatenUForm").Range("H27:H31")
Sheets("A").Range("A53:A57").Copy Destination:=Sheets("DatenUForm").Range("H32:H36")
Sheets("A").Range("A69:A73").Copy Destination:=Sheets("DatenUForm").Range("H37:H41")
Sheets("A").Range("A77:A81").Copy Destination:=Sheets("DatenUForm").Range("H42:H46")
Sheets("A").Range("A85:A89").Copy Destination:=Sheets("DatenUForm").Range("H47:H51")
'B
Sheets("B").Range("A9:A14").Copy Destination:=Sheets("DatenUForm").Range("H52:H57")
Sheets("B").Range("A18:A23").Copy Destination:=Sheets("DatenUForm").Range("H58:H63")
Sheets("B").Range("A27:A32").Copy Destination:=Sheets("DatenUForm").Range("H64:H69")
'C
Sheets("C").Range("A9:A14").Copy Destination:=Sheets("DatenUForm").Range("H70:H75")
Sheets("C").Range("A18:A23").Copy Destination:=Sheets("DatenUForm").Range("H76:H81")
Sheets("C").Range("A27:A32").Copy Destination:=Sheets("DatenUForm").Range("H82:H87")
Sheets("C").Range("A36:A41").Copy Destination:=Sheets("DatenUForm").Range("H88:H93")
'C1
Sheets("C1").Range("A9:A14").Copy Destination:=Sheets("DatenUForm").Range("H94:H99")
Sheets("C1").Range("A18:A23").Copy Destination:=Sheets("DatenUForm").Range("H100:H105")
'D
Sheets("D").Range("A9:A14").Copy Destination:=Sheets("DatenUForm").Range("H106:H111")
Sheets("D").Range("A18:A22").Copy Destination:=Sheets("DatenUForm").Range("H112:H116")
Sheets("D").Range("A26:A29").Copy Destination:=Sheets("DatenUForm").Range("H117:H120")
Sheets("D").Range("A33:A35").Copy Destination:=Sheets("DatenUForm").Range("H121:H123")
Sheets("D").Range("A39:A41").Copy Destination:=Sheets("DatenUForm").Range("H124:H126")
Sheets("D").Range("A45:A47").Copy Destination:=Sheets("DatenUForm").Range("H127:H129")
Sheets("D").Range("A51:A53").Copy Destination:=Sheets("DatenUForm").Range("H130:H132")
'D1
Sheets("D1").Range("A9:A17").Copy Destination:=Sheets("DatenUForm").Range("H133:H141")
'E
Sheets("E").Range("A9:A17").Copy Destination:=Sheets("DatenUForm").Range("H142:H150")
'F
Sheets("F").Range("A9:A14").Copy Destination:=Sheets("DatenUForm").Range("H151:H156")
Sheets("F").Range("A18:A23").Copy Destination:=Sheets("DatenUForm").Range("H157:H162")
Sheets("F").Range("A27:A32").Copy Destination:=Sheets("DatenUForm").Range("H163:H168")
Sheets("F").Range("A36:A41").Copy Destination:=Sheets("DatenUForm").Range("H169:H174")
Sheets("F").Range("A45:A50").Copy Destination:=Sheets("DatenUForm").Range("H175:H180")
'F1
Sheets("F1").Range("A9:A14").Copy Destination:=Sheets("DatenUForm").Range("H181:H186")
Sheets("F1").Range("A18:A23").Copy Destination:=Sheets("DatenUForm").Range("H187:H192")
'G
Sheets("G").Range("A9:A14").Copy Destination:=Sheets("DatenUForm").Range("H193:H198")
Sheets("G").Range("A18:A23").Copy Destination:=Sheets("DatenUForm").Range("H199:H204")
Sheets("G").Range("A27:A32").Copy Destination:=Sheets("DatenUForm").Range("H205:H210")
Sheets("G").Range("A36:A41").Copy Destination:=Sheets("DatenUForm").Range("H211:H216")
Sheets("G").Range("A45:A50").Copy Destination:=Sheets("DatenUForm").Range("H217:H222")
Sheets("G").Range("A54:A58").Copy Destination:=Sheets("DatenUForm").Range("H223:H227")
Sheets("G").Range("A69:A74").Copy Destination:=Sheets("DatenUForm").Range("H228:H233")
Sheets("G").Range("A78:A83").Copy Destination:=Sheets("DatenUForm").Range("H234:H239")
'H
Gruß
Ulrich
Anzeige
AW: Grösse von Code in Modul erreicht
07.01.2009 23:57:00
Code
Hallo,
auf die Schnelle:
'A
Sheets("A").Range("A9:A14, A17:A22,A26:A34,A38:A41,A45:A49,A53:A57,A69:A73,A77:A81,A85:A89").Copy _
Sheets("DatenUForm").Cells(Rows.Count, 7).End(xlUp).Offset(1, 0)
'B
Sheets("B").Range("A9:A14,A18:A23,A27:A23").Copy _
Sheets("DatenUForm").Cells(Rows.Count, 7).End(xlUp).Offset(1, 0)
etc.
Gruß
Dierk
AW: Grösse von Code in Modul erreicht
08.01.2009 00:15:35
Code
Hi Dierk
Zum Glück habe ich ein Testblatt erstellt. Ging voll daneben. Der Uebetrag auf das DatenUForm fängt nicht bei Zeile H2 an sondern bei G33 und beim nächsten Copy von Blatt B kommt nichts aber fängt wieder mit Blatt A an. Einfach unter dem Ende von Blatt A bzw. im Blatt DatenUForm.
Ich glaube, dass ist mir zu hoch. Wenn es Dir nichts ausmacht, würde ich lieber die Variante mit den Kürzel für all diese Begriffe nehmen. Habe bemerkt, dass wenn ich den Code um etwa 20 Zeilen kürze passt es wieder.
Gruß
Ulrich
Anzeige
AW: Grösse von Code in Modul erreicht
08.01.2009 03:15:00
Code
Hallo Ulrich,
ich hatte das Problem bisher zwar auch nie und ich denke, dass es sicherlich elegantere Loesungen gibt, aber Du kannst es mal so versuchen:
Am Anfang vom Code:
dim ziel as worksheet
set ziel = sheets("DatenUForm")
Jede Zeile dann: (Bsp.)
Sheets("A").Range("A9:A14").Copy ziel.Range("H2:H7")
Das spart einige Zeichen, und wenn ich richtig verstanden hab, ist es das, was Du ja willst - Zeichen sparen! Das "destination:=" kannst Du uebrigens auch immer weglassen!
Vielleicht reicht das ja.
Viele Gruesse
Rainer
AW: Grösse von Code in Modul erreicht
08.01.2009 11:55:00
Code
Hi
um Zeichen zu sparen kanns du mit der WITH-Klammer arbeiten,
ebenso ist es nicht notwendig, "Destination" hinzuschreiben, wenn ein Befehl Parameter verlangt, müssen diese nur dann expizit angeben werden, wenn sie nicht in der vorgesehenen Reihenfolge angegeben werden.
außderdem reicht es, wenn man beim kopieren von Daten nur die erste Zelle angibt.
das ganze sieht dann so aus:

With Sheets("DatenUForm")
'A
Sheets("A").Range("A9:A14").Copy .Range("H2")
Sheets("A").Range("A17:A22").Copy .Range("H8")
Sheets("A").Range("A26:A34").Copy .Range("H14")
End with


das sollte schon mal eine ausreichende verkleinerung der Daten bringen.
noch weiter verkürzen könnt man das ganze über Schleifen, dazu müssten aber die zu koperenden Zellbereiche auf jedem Blatt gleich sein, das könnte dann etwa so aussehen:


dim i as long
dim Bereich(9) as string
Bereich(1) = "A9:A14"
Bereich(2) = "A17:A22"
Bereich(9) = "A85:A89"
With Sheets("DatenUForm")
'A
For i = 1 to 9
Sheets("A").Range(Bereich(i)).Copy .Cells(rows.count, "H").end(xlup).offset(1,0)
next
'B
For i = 1 to 3
Sheets("B").Range(Bereich(i)).Copy .Cells(rows.count, "H").end(xlup).offset(1,0)
next
'C
For i = 1 to 4
Sheets("C").Range(Bereich(i)).Copy .Cells(rows.count, "H").end(xlup).offset(1,0)
next
End with


wenn man auch noch die Blätter in Indexvariablen ablegt und die anzahl der Durchläufe Pro Blatt, lässt sich das ganze nochmal verkürzen:


dim i as long, x as long
dim sh(3) as Worksheet
dim Anz(3) as long
dim Bereich(9) as string
Bereich(1) = "A9:A14"
Bereich(2) = "A17:A22"
Bereich(9) = "A85:A89"
set sh(1) = Sheets("A")
Set sh(2) = Sheets("B")
Set sh(3) = Sheets("C")
Anz(1) = 9
Anz(2) = 3
Anz(3) = 4
For x = 1 to 3
for i = 1 to Anz(x)
sh(x).Range(Bereich(i)).Copy Sheets("DatenUForm").cells(rows.count, "H").end(xlup).offset(1, _
0)
next i
next x


und dann wirds richtig kurz.
aber das funktioniert nur, wenn alle Blätter gleich strukuriert sind.
Gruß, Daniel

Anzeige
AW: Grösse von Code in Modul erreicht
08.01.2009 19:15:00
Code
Hi Wuxinese, Hi Daniel
Es wäre so tool den Code von Daniel einzusetzen. Leider sind die einzelnen Tabellenblätter nicht gleich.
Kann sie auch nicht anpassen weil vorgegeben vom Werk.
Wie kann ich den Namen -Sheets- noch verkürzen und bei Range als -rng- bringt er mir einen Fehler.
Hoffe damit, daß es genügend verkleinert werden kann.
ps. es sind 861 Zeil insgesamt
Nochmals Danke, Danke an Euch beide für Eure Hilfe.
Gruß
Ulrich
Sub Copy()
Dim ziel As Worksheet
Dim rng As Range
Set ziel = Sheets("DatenUForm")
'Vorjahreszahlen übertragen von Einzelblätter A..B..etc. zu Hauptblatt "DatenUForm"
'A
Sheets("A").rng("A9:A14").Copy ziel.rng("H2:H7")
Sheets("A").rng("A17:A22").Copy ziel.rng("H8:H13")
Sheets("A").rng("A26:A34").Copy ziel.rng("H14:H22")
Sheets("A").rng("A38:A41").Copy ziel.rng("H23:H26")
Sheets("A").rng("A45:A49").Copy ziel.rng("H27:H31")
Sheets("A").rng("A53:A57").Copy ziel.rng("H32:H36")
Sheets("A").rng("A69:A73").Copy ziel.rng("H37:H41")
Sheets("A").rng("A77:A81").Copy ziel.rng("H42:H46")
Sheets("A").rng("A85:A89").Copy ziel.rng("H47:H51")
'B
Sheets("B").rng("A9:A14").Copy ziel.rng("H52:H57")
Sheets("B").rng("A18:A23").Copy ziel.rng("H58:H63")
Sheets("B").rng("A27:A32").Copy ziel.rng("H64:H69")
'C
Sheets("C").rng("A9:A14").Copy ziel.rng("H70:H75")
Sheets("C").rng("A18:A23").Copy ziel.rng("H76:H81")
Sheets("C").rng("A27:A32").Copy ziel.rng("H82:H87")
Sheets("C").rng("A36:A41").Copy ziel.rng("H88:H93")
'C1
Sheets("C1").rng("A9:A14").Copy ziel.rng("H94:H99")
Sheets("C1").rng("A18:A23").Copy ziel.rng("H100:H105")
'D
Sheets("D").rng("A9:A14").Copy ziel.rng("H106:H111")
Sheets("D").rng("A18:A22").Copy ziel.rng("H112:H116")
Sheets("D").rng("A26:A29").Copy ziel.rng("H117:H120")
Sheets("D").rng("A33:A35").Copy ziel.rng("H121:H123")
Sheets("D").rng("A39:A41").Copy ziel.rng("H124:H126")
Sheets("D").rng("A45:A47").Copy ziel.rng("H127:H129")
Sheets("D").rng("A51:A53").Copy ziel.rng("H130:H132")
'D1
Sheets("D1").rng("A9:A17").Copy ziel.rng("H133:H141")
'E
Sheets("E").rng("A9:A17").Copy ziel.rng("H142:H150")
'F
Sheets("F").rng("A9:A14").Copy ziel.rng("H151:H156")
Sheets("F").rng("A18:A23").Copy ziel.rng("H157:H162")
Sheets("F").rng("A27:A32").Copy ziel.rng("H163:H168")
Sheets("F").rng("A36:A41").Copy ziel.rng("H169:H174")
Sheets("F").rng("A45:A50").Copy ziel.rng("H175:H180")
'F1
Sheets("F1").rng("A9:A14").Copy ziel.rng("H181:H186")
Sheets("F1").rng("A18:A23").Copy ziel.rng("H187:H192")
'G
Sheets("G").rng("A9:A14").Copy ziel.rng("H193:H198")
Sheets("G").rng("A18:A23").Copy ziel.rng("H199:H204")
Sheets("G").rng("A27:A32").Copy ziel.rng("H205:H210")
Sheets("G").rng("A36:A41").Copy ziel.rng("H211:H216")
Sheets("G").rng("A45:A50").Copy ziel.rng("H217:H222")
Sheets("G").rng("A54:A58").Copy ziel.rng("H223:H227")
Sheets("G").rng("A69:A74").Copy ziel.rng("H228:H233")
Sheets("G").rng("A78:A83").Copy ziel.rng("H234:H239")
'H
Sheets("H").rng("A9:A13").Copy ziel.rng("H240:H244")
Sheets("H").rng("A17:A21").Copy ziel.rng("H245:H249")
Sheets("H").rng("A25:A29").Copy ziel.rng("H250:H254")
Sheets("H").rng("A33:A37").Copy ziel.rng("H255:H259")
Sheets("H").rng("A41:A45").Copy ziel.rng("H260:H264")
Sheets("H").rng("A49:A53").Copy ziel.rng("H265:H269")
Sheets("H").rng("A69:A73").Copy ziel.rng("H270:H274")
Sheets("H").rng("A77:A81").Copy ziel.rng("H275:H279")
etc.
Anzeige
AW: Grösse von Code in Modul erreicht
08.01.2009 22:35:59
Code
Hi
die Range kannst du so nicht verkürzen.
was mir jetzt noch einfallen würde, das Macro zu verkürzen wäre folgendes, hier mal für das Tabellenblatt
"B" und "C", die anderen dann entsprechend

Set ziel = Sheets("DatenUForm")
Sheets("B").Range("A9:A14,A18:A23,A27:A32").Copy Ziel.Range("H52")
Sheets("C").Range("A9:A14,A18:A23,A27:A32,A36:A41").Copy Ziel.Range("H70")
...


der String innerhalb der RANGE-Anweisung darf maxmial 256 Zeichen lang sein, daß müsste so für 40 Einzelne Bereiche ausreichen.
Gruß, Daniel

AW: Grösse von Code in Modul erreicht
08.01.2009 22:54:04
Code
Hi Daniel
Habe Deine erste Variante genommen und das Modul in zwei Teile geteilt. Die ersten 400 Zeilen ins erste Modul und die restlichen 461 Zeilen ins zweite Modul. Am Ende des Moduls 1 mit Verweis auf Modul 2.
Es Klappt yepp.................... bin ich froh. DAANNNNNNNKKKKKKEEEEEEEEEEEEEEEEEEEEE. Daniel
Gruß
Ulrich
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige