stdole.SavePicture Bild

Bild

Betrifft: stdole.SavePicture Bild von: ransi
Geschrieben am: 22.02.2005 18:08:40



      
Guten Abend

habe ein problem mit folgendem code:

Option Explicit

Sub Bilder_als_gif()
Dim Bild
Dim Dummy_Bar As CommandBar
Dim Dummy_Button As CommandBarButton
Dim i As Integer
Dim pfad1 As String
Dim pfad2 As String
Dim pfad3 As String
Dim pfad4 As String
Dim pfad5 As String
Dim speicherpfad As String 'zum abspeichern der bilder
pfad1 = ThisWorkbook.Path & "\1-1000\" '5 Pfade weil ich glaube das
'5000 dateien in einem Ordner zuviel sind.
'Die ordner sind z.B. so benannt "1001-2000"
pfad2 = ThisWorkbook.Path & "\1001-2000\"
pfad3 = ThisWorkbook.Path & 
"\2001-3000\"
pfad4 = ThisWorkbook.Path & 
"\3001-4000\"
pfad5 = ThisWorkbook.Path & 
"\4001-5000\"
DoEvents 
'gibt es noch was ähnliches ??
On Error Resume Next
CommandBars(
"egal").Delete 'falls schon vorhanden
Set Dummy_Bar = CommandBars.Add(Name:="egal")
For i = 1 To 5000 'wenn ich hier die 1000er schritte von hand ändere z.B.
'for i = 1001 to 2000
'und mit den geänderten werten den code neu starte kriege ich die gewählten dahin wo sie hin sollen.
     Select Case i 'Auswahl für die 5 Verzeichnisse.Alle 1000 kommt der nächste Ordner.
          Case 1 To 1000: speicherpfad = pfad1
          
Case 1001 To 2000: speicherpfad = pfad2
          
Case 2001 To 3000: speicherpfad = pfad3
          
Case 3001 To 4000: speicherpfad = pfad4
          
Case 4001 To 5000: speicherpfad = pfad5
     
End Select
Set Dummy_Button = Dummy_Bar.Controls.Add 'temporär wird später wieder gelöscht
     With Dummy_Button
          .FaceId = i
          
Set Bild = .Picture
          stdole.SavePicture Bild, speicherpfad & i & 
".gif"
          
Set Bild = Nothing
          Dummy_Button.Delete
     
End With
Next i
CommandBars(
"egal").Delete ' weil temporär
End Sub

der code soll mir 
"alle" FaceIDs als .gif abspeichern.
da ich nicht weiss wieviele es gibt habe ich erstmal 5000 angenommen.
Vom prinzip her läuft der code.
das problem kommt 
in der schleife nicht immer beim selben "i".
es kommt folgende Fehlemeldung:

"Microsoft Excel hat ein Problem festgestellt und muss beendet werden !"
Mit der üblichen Bitte nach Hause telefonieren zu dürfen.
senden \ nicht senden 

dann wird excel beendet und neu gestartet.
Meine Frage ist ist nun ob das ein Excelproblem ist oder evtl. meine Rechenleistung nicht ausreicht ?
Wie kann ich den code zum laufen bringen ohne das excell abstürzt?

danke schonmal

ransi 


     Code eingefügt mit Syntaxhighlighter 3.0


Bild


Betrifft: AW: stdole.SavePicture Bild von: Dave
Geschrieben am: 22.02.2005 18:31:00

Wieso wird der Button laufend gelöscht? Reicht doch, wenn er in jedem Durchlauf eine andere FaceId´bekommt.

Dave

Set Dummy_Bar = CommandBars.Add(Name:="egal")
'============================================
Set Dummy_Button = Dummy_Bar.Controls.Add(1)
'============================================
For i = 1 To 5000
'for i = 1001 to 2000
'und mit den geänderten werten den code neu starte kriege ich die gewählten dahin wo sie hin sollen.
Select Case i 'Auswahl für die 5 Verzeichnisse.Alle 1000 kommt der nächste Ordner.
Case 1 To 1000: speicherpfad = pfad1
Case 1001 To 2000: speicherpfad = pfad2
Case 2001 To 3000: speicherpfad = pfad3
Case 3001 To 4000: speicherpfad = pfad4
Case 4001 To 5000: speicherpfad = pfad5
End Select

With Dummy_Button
.FaceId = i
Set Bild = .Picture
stdole.SavePicture Bild, speicherpfad & i & ".gif"
Set Bild = Nothing
End With
Next i


Bild


Betrifft: AW: stdole.SavePicture Bild von: ransi
Geschrieben am: 22.02.2005 18:51:46

hallo dave

Danke für dein interesse.
Hast recht.
wollte mit "Dummy_Button.Delete" erreichen das nicht plötzlich eine bar mit 5000
Buttons da ist. Dein Variante ist besser. Müll zu prodzuieren den man später wieder entsorgen muss (wie bei mir)ist schlechter als ihn erst gar nicht zu produzieren.
habs geändert, aber das problem besteht weiterhin.
Hast du oder sonst jemand noch eine Idee ??

ransi


Bild


Betrifft: AW: stdole.SavePicture Bild von: Dave
Geschrieben am: 22.02.2005 19:24:53

Kein Befund, hab gerade mal alle 7104 (Excel XP) icons und noch dazu die masks in Dateien gespeichert.

Dave


Bild


Betrifft: AW: stdole.SavePicture Bild von: ransi
Geschrieben am: 22.02.2005 19:27:36

ransi

ohne programmabbruch ??
habe nur 128MB arbeitsspeicher.
kanns daran liegen ?

ransi


Bild


Betrifft: AW: stdole.SavePicture Bild von: Dave
Geschrieben am: 22.02.2005 19:34:05

Glaub ich nicht, dass das am RAM liegt. Teil doch mal die Aktion in verschiedene
Makros von je 1000 Duchläufen auf.

Dave


Bild


Betrifft: 5 mal starten von: ransi
Geschrieben am: 24.02.2005 20:10:46

hallo dave

5 makros die sich nur hier unterscheiden:

angepasster code name
angepasste speicherpfade
und
"for i= 1 to 1000"
"for i= 1001 to 2000"
.
.
.
einzeln gestartet gehts.

mit diesem code wieder nicht:

Public

Sub mal5()
     Call eins
     Call zwei
     Call drei
     Call vier
     Call fuenf
End Sub


trotzdem danke für deine hilfe.

ransi


Bild


Betrifft: "Frage noch offen" vergessen o.T. von: ransi
Geschrieben am: 22.02.2005 19:25:08




Bild


Betrifft: geschlossen o.T. von: ransi
Geschrieben am: 24.02.2005 20:11:29




 Bild

Beiträge aus den Excel-Beispielen zum Thema "Blattschutz"