Ich habe eine Excel-Tabelle, die Satellitenbilder für Helikopterlandeplätze herunterlädt und sie in Registerkarten mit dem Standortcode platziert. Es gibt 166, um genau zu sein, jeder von denen hat 2 statische Kartenbilder für insgesamt 332 Bilder und ich muss sie auf verschiedene Arten manipulieren.Speicher bei der Bearbeitung von Bildern zu reduzieren Excel VBA
Ich habe kein Problem, sie herunterzuladen und zu platzieren, aber wenn ich sie manipuliere, habe ich keinen Speicher mehr. Die Manipulationen sollen unseren Piloten helfen, nachts besser zu sehen, wenn sie auf die Karten schauen, da sie auf einem Bildschirm angezeigt werden.
Ich tippte den folgenden Code und es funktioniert bis etwa Blatt 100 und dann habe ich aus RAM aufgrund der Beschränkung auf eine 32-Bit-Excel. Gibt es eine Möglichkeit, die Menge an Speicher zu reduzieren?
Public Sub SwitchtoNight()
Dim oWS As Worksheet
For i = 5 To ThisWorkbook.Sheets.Count
Set oWS = ThisWorkbook.Sheets(i)
With oWS
.Shapes("GoogleMap1").Fill.PictureEffects.Insert(msoEffectSaturation).EffectParameters(1).Value = 0 'Saturation
.Shapes("GoogleMap1").Fill.PictureEffects.Insert(msoEffectBrightnessContrast).EffectParameters(1).Value = -0.35 'Brightness
.Shapes("GoogleMap1").Fill.PictureEffects.Insert(msoEffectBrightnessContrast).EffectParameters(2).Value = 0.75 'Contrast
.Shapes("GoogleMap2").Fill.PictureEffects.Insert(msoEffectSaturation).EffectParameters(1).Value = 0 'Saturation
.Shapes("GoogleMap2").Fill.PictureEffects.Insert(msoEffectBrightnessContrast).EffectParameters(2).Value = 0.35 'Contrast
End With
Set oWS = Nothing
Next i
End Sub
Die Bilder sind über 400px X 400px hier ein Beispiel
Mit dem folgenden Code ist ich Blatt bekommen 140, bevor ich aus dem RAM laufen
Public Sub SwitchtoNight()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Dim oWS As Worksheet
For i = 5 To ThisWorkbook.Sheets.Count
Set oWS = ThisWorkbook.Sheets(i)
oWS.DisplayPageBreaks = False
With oWS
.Shapes("GoogleMap1").Fill.PictureEffects.Insert(msoEffectSaturation).EffectParameters(1).Value = 0: .Shapes("GoogleMap1").Fill.PictureEffects.Insert(msoEffectBrightnessContrast).EffectParameters(1).Value = -0.35: .Shapes("GoogleMap1").Fill.PictureEffects.Insert(msoEffectBrightnessContrast).EffectParameters(2).Value = 0.75
.Shapes("GoogleMap2").Fill.PictureEffects.Insert(msoEffectSaturation).EffectParameters(1).Value = 0: .Shapes("GoogleMap2").Fill.PictureEffects.Insert(msoEffectBrightnessContrast).EffectParameters(2).Value = 0.35
End With
Set oWS = Nothing
Next I
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Wie groß sind die Bilder (in MB oder Auflösung)? Können Sie einen Link zu einem Beispielbild posten? (Es muss nicht von der tatsächlichen Website sein, wenn das ein Problem ist) Ist das der gesamte Code? (oder öffnen Sie zufällig/schließen/manipulieren Excel oder andere Anwendungen programmatisch?) – ashleedawg
Ich habe ein Beispielbild hinzugefügt Ich glaube nicht, dass sie groß sind, da meine gesamte Arbeitsmappe mit den 322 Bildern nur 20 MB groß ist. und die Bilder sind 400 x 400 –
Ich manipuliere auch keine Programme. Das Excel-Blatt wird frisch geöffnet und verwendet nur 70 MB RAM, bevor dieser Code ausgeführt wird. –