Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Prozedur zu groß

Prozedur zu groß
13.01.2015 16:42:01
Jens
Hallo Zusammen, bin dabei per VbA automatisch aus einer Excel Datei eine Powerpoint Presentation zu erstellen. Dies klapp auch eigentlich mit dem Code, jedoch ist nun meine Prozedur zu groß. Hab es schon mit Call Funktion probiert. Leider bekomm ich es damit nicht hin! Hier ein ganz kleiner Teil der Prozedure.
Sub XLSM_TO_PPT0() ' If UserForum = Gate 0
Dim strPfad As String
Dim strpotx As String
Dim pptapp As Object
Dim pptPres As Presentation
strPfad = "A:\ABLAGE\NBD Standardisierung (Jens Böven)\Präsentation\"
strpotx = "at_Vorlage.potx"
Set pptapp = New PowerPoint.Application
pptVorlage = strPfad & strpotx
pptapp.Presentations.Open Filename:=pptVorlage, untitled:=msoTrue
Set pptPres = pptapp.ActivePresentation
'============================================================================================ _
pptPres.Slides(1).Select ' Frontpage
pptPres.Slides(1).Shapes("Rectangle 2").TextFrame.TextRange.Characters.Text = Range(" _
customer1").Value & "-" & Range("model").Value
pptPres.Slides(1).Shapes("Textfeld 7").TextFrame.TextRange.Characters.Text = Range("PrgMgr") _
.Value
pptPres.Slides(1).Shapes("Textfeld 8").TextFrame.TextRange.Characters.Text = Range(" _
Function").Value
pptPres.Slides(1).Shapes("Textfeld 10").TextFrame.TextRange.Characters.Text = Range("date0") _
.Value
pptPres.Slides(1).Shapes("Textfeld 9").TextFrame.TextRange.Characters.Text = Range(" _
location").Value
pptPres.Slides(1).Shapes("Abgerundetes Rechteck 1").TextFrame.TextRange.Characters.Text =  _
Range("Gate1").Value
If Range("Gate1") = ("Gate can be passed") Then
pptPres.Slides(1).Shapes("Abgerundetes Rechteck 1").Fill.ForeColor.RGB = RGB(0, 128, 0)
Else
pptPres.Slides(1).Shapes("Abgerundetes Rechteck 1").Fill.ForeColor.RGB = RGB(255, 0, 0)
End If
'=========================================================================================== _
pptPres.Slides(2).Select ' Program Overview
pptPres.Slides(2).Shapes("Textfeld 4").TextFrame.TextRange.Characters.Text = Range(" _
customer1").Value
pptPres.Slides(2).Shapes("Textfeld 9").TextFrame.TextRange.Characters.Text = Range("sop"). _
Value
pptPres.Slides(2).Shapes("Textfeld 11").TextFrame.TextRange.Characters.Text = Range(" _
lifetime").Value
pptPres.Slides(2).Shapes("Textfeld 12").TextFrame.TextRange.Characters.Text = Range(" _
Volumes_L").Value
pptPres.Slides(2).Shapes("Textfeld 13").TextFrame.TextRange.Characters.Text = Range(" _
Volumes_Y").Value
pptPres.Slides(2).Shapes("Textfeld 14").TextFrame.TextRange.Characters.Text = Range(" _
element1").Value & "," & Range("element2").Value & "," & Range("element3").Value & "," & Range("element4").Value & "," & Range("element5").Value
pptPres.Slides(2).Shapes("Textfeld 15").TextFrame.TextRange.Characters.Text = Range(" _
Customer_Plant").Value
pptPres.Slides(2).Shapes("Textfeld 16").TextFrame.TextRange.Characters.Text = Range(" _
Customer_Development").Value
'=========================================================================================== _
pptPres.Slides(3).Select ' Milestone
pptPres.Slides(3).Shapes("Textfeld 210").TextFrame.TextRange.Characters.Text = Range(" _
Nomination").Value
pptPres.Slides(3).Shapes("Textfeld 211").TextFrame.TextRange.Characters.Text = Range(" _
PT_Design_Freeze").Value
pptPres.Slides(3).Shapes("Textfeld 209").TextFrame.TextRange.Characters.Text = Range(" _
Serial_Design_Release").Value
pptPres.Slides(3).Shapes("Textfeld 212").TextFrame.TextRange.Characters.Text = Range(" _
Parts_100").Value
pptPres.Slides(3).Shapes("Textfeld 213").TextFrame.TextRange.Characters.Text = Range("PPAP") _
.Value
pptPres.Slides(3).Shapes("Textfeld 214").TextFrame.TextRange.Characters.Text = Range("Built" _
).Value
pptPres.Slides(3).Shapes("Textfeld 215").TextFrame.TextRange.Characters.Text = Range("sop_c" _
).Value
pptPres.Slides(3).Shapes("Textfeld 208").TextFrame.TextRange.Characters.Text = Range(" _
Gate_0").Value
pptPres.Slides(3).Shapes("Textfeld 207").TextFrame.TextRange.Characters.Text = Range(" _
Gate_1").Value
pptPres.Slides(3).Shapes("Textfeld 203").TextFrame.TextRange.Characters.Text = Range(" _
Gate_2").Value
pptPres.Slides(3).Shapes("Textfeld 204").TextFrame.TextRange.Characters.Text = Range(" _
Gate_3").Value
pptPres.Slides(3).Shapes("Textfeld 205").TextFrame.TextRange.Characters.Text = Range(" _
Gate_4").Value
pptPres.Slides(3).Shapes("Textfeld 206").TextFrame.TextRange.Characters.Text = Range(" _
Gate_5").Value
pptPres.SaveAs strPfad & ("GatePresentation") & "_" & Range("customer1") & "_" & Range(" _
projectcode") & "_" & ("Gate 1") & "_" & Range("PrgMgr") & ".ppt"
pptPres.Close
Set pptPres = Nothing
Set pptapp = Nothing
End Sub
Vielleicht kann mir einer Helfen! Danke
Gruß Jens

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Deine Prozedur ist wohl nur deshalb zu groß, ...
13.01.2015 20:42:27
Luc:-?
…Jens,
weil sie, auch wo es möglich wäre, unzyklisch linear ist, also einfach „geradeaus“ pgmiert (bzw aufgezeichnet?) wurde.
Ansonsten kann so etwas (normalerweise bei sehr komplexen Projekten) durchaus vorkommen. Dann muss man die ProzedurBefehle auf mehrere abzuarbeitende Prozeduren, die aus einer HptProzedur nacheinander aufgerufen wdn, verteilen.
Gruß, Luc :-?

Anzeige
Deine Prozedur ist wohl nur deshalb zu groß, ...
14.01.2015 07:44:36
Jens
Genau das ist meine Frage! Wie kann ich mehrere Kleine Prozeduren erstellen. Hab das versucht aber Powerpoint wurde nicht durch das excel sheet gefüllt. Vielleicht hast du ja ein Tipp für mich Luc:? !
Gruß Jens

AW: Deine Prozedur ist wohl nur deshalb zu groß, ...
14.01.2015 09:53:45
Ralf
Hallo Jens,
ich bin ebenfalls schon an die 64k Grenze gestoßen, obwohl alles handprogrammiert war.
Ich bin dann so vorgegangen, wie Luc geschrieben hat.
Wiederkehrenden Code kann man gut in weitere Subs oder Functions packen.
Wenn der Code aus Aufzeichnungen stammt, ist der Optimierungsbedarf meist extrem.
Falls du den Aufwand kurzfristig gering halten möchtest, kann du ganze Teile des Codes einfach in ein Sub schieben. Evtl. ist dazu erst einmal die Dimensionierung globaler Variablen notwendig (was man sonst vermeiden sollte).
Bspw. kann man aufgezeichneten Code auch folgendermaßen beikommen. Oft stehen Zeilen drin wie:
Range("A1).Select
Selection.MacheIrgendWas
Ersetzen durch:
Range("A1").MacheIrgendWas
Das spart viel Zeit bei der Ausführung und haufenweise Code.
Ralf
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige