A napokban ki akartam nyomtatni egy igencsak hosszú diasort. Egész pontosan 28 kétórás előadás anyaga várt arra, hogy kijöjjön a lézernyomtatóból. "Természetesen" a diák háttere kék színű, ezen pedig sárga és fehér színű szövegek és ábrák szerepelnek. Egy teljes toner ráment volna az 593 dia nyomtatására, ha mindegyik háttere csupa fekete lenne.
Szerencsére a PowerPoint 2007 tud szürkerányalatosan nyomtatni. Ez általában egy jó megoldás, de most nem tűnt járható útnak, mivel a képekre írt szövegekkel, CorelDraw ábrákkal, piros alapon kék nyilakkal nem tud mit kezdeni.
Ha a PowerPoint automatikus átalakítása nem jó, kénytelen vagyok kézzel megcsinálni. Persze nem egyesével, mert 593 dia mégiscsak sok. Az volt a gondolatom, hogy a diamintán kattintok párat és csodák csodájára tökéletes lesz minden. Persze, ha a prezentáció a nagykönyv szerint készült volna, ez segített volna, de közel sem ez volt a helyzet. Arra mindenesetre jó ez, hogy a diák háttereit fehérre, a címdiák címeit pedig feketére állítsam. Ez viszont még nagyon-nagyon kevés. Megmaradnak a rajzok, egyéb szövegek, amik színei a sötét háttérhez idomulnak. Ideje volt a VBA-hoz nyúlni.
A kód nem sok magyarázatot igényel. Lényegében végigsöpör az összes dia összes alakzatán és a szövegek színét feketére állítja (plusz eltűnteti az árnyékolásait, mert nem mutat jól lézernyomtatóval nyomtatva), a fehér vonalakat feketére, a színes vonalakat (100,100,100) színűre állítja, hasonlóan átszínezi a fekete kitöltésű alakzatokat is. Persze lehetne az explicit meghatározott (100,100,100) szín helyett az eredeti színtől függő az új szín, de erre itt nem volt szükség.
Sub Atszinez()
On Error Resume Next
Dim dia As Slide, alakzat As Shape
UserForm1.Show False
Dim i As Integer
i = 0
For Each dia In ActivePresentation.Slides
dia.Select
i = i + 1
UserForm1.Label1.Caption = i & "/" & ActivePresentation.Slides.Count
UserForm1.ProgressBar1.Value = (i * 100) / ActivePresentation.Slides.Count
UserForm1.Repaint
For Each alakzat In dia.Shapes
With alakzat.TextFrame.TextRange.Font
.Color.RGB = RGB(0, 0, 0)
.Shadow = False
End With
If alakzat.Line.ForeColor.RGB = RGB(255, 255, 255) Then
alakzat.Line.ForeColor.RGB = RGB(0, 0, 0)
Else
If alakzat.Line.ForeColor.RGB <> RGB(0, 0, 0) Then
alakzat.Line.ForeColor.RGB = RGB(100, 100, 100)
End If
End If
If alakzat.Fill.ForeColor.RGB = RGB(0, 0, 0) Then
alakzat.Fill.ForeColor.RGB = RGB(255, 255, 255)
Else
If alakzat.Line.ForeColor.RGB <> RGB(255, 255, 255) Then
alakzat.Line.ForeColor.RGB = RGB(50, 50, 50)
End If
End If
Next alakzat
Next dia
UserForm1.Hide
End Sub
A dőlt betűs, szürke részek azért kerültek bele, hogy valami visszajelzés is legyen a makró futásáról. Egy egyszerű UserFormot hoztam létre egy Progressbarral és egy Labellel, valahogy úgy, mint bal oldali képen.
Ez a kód a munka jelentős részét elvégzi helyettünk. Utána kb. 10 perc alatt a maradék módosításokat meg tudtam tenni kézzel. A megoldás nem tökéletes, de a cél az volt, hogy 3-5 óra helyett 1 órán belül nyomtatható legyen a prezentáció, ez sikerült.
Az illusztrációul szolgáló diák dr. Szirmay-Kalos László honlapjáról származnak.
Utolsó kommentek