Hallo iedereen,
Ik heb een Excel bestand met daarin een rapport dat allerlei kleuren bevat. Bij het printen van het bestand wil ik dat de kleuren van cellen wordt veranderd. Hiervoor heb ik een knop gemaakt met daarachter een stukje VBA code. Deze code is verdeeld in de volgende delen:
1. Kopieren van het huidige werkblad naar een tijdelijk werkblad (gemaand 'temporary print sheet')
2. Vervangen van kleuren op basis van huidige kleuren
3. Printen
4. Tijdelijke werkblad verwijderen
1. Kopieren van het huidige werkblad naar een tijdelijk werkblad
2. Vervangen van kleuren op basis van huidige kleuren
3. Printen
4. Tijdelijke werkblad verwijderen
Als ik bovenstaande code uitvoer, dan krijg ik de volgende foutcode:
Maar als ik 'deel 2' van de code kopieer en onder een nieuwe knop zet en vervolgens uitvoer in het actieve werkblad, werkt alles perfect.
Hoe kan ik mijn code aanpassen, zodat het werkt zoals ik wil?
Ik heb een Excel bestand met daarin een rapport dat allerlei kleuren bevat. Bij het printen van het bestand wil ik dat de kleuren van cellen wordt veranderd. Hiervoor heb ik een knop gemaakt met daarachter een stukje VBA code. Deze code is verdeeld in de volgende delen:
1. Kopieren van het huidige werkblad naar een tijdelijk werkblad (gemaand 'temporary print sheet')
2. Vervangen van kleuren op basis van huidige kleuren
3. Printen
4. Tijdelijke werkblad verwijderen
1. Kopieren van het huidige werkblad naar een tijdelijk werkblad
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| Private Sub PrintButton_Click() Dim PercRange As Range, Thing 'Inform user about copying on the statusbar Application.StatusBar = "Removing colors from report and prepare for a print-preview..." 'Copy active worksheet Worksheets(ActiveSheet.name).Copy After:=Worksheets(Worksheets.Count) 'empty clipboard Application.CutCopyMode = False 'Rename worksheet to "temporary print sheet" ActiveWorkbook.ActiveSheet.name = "temporary print sheet" |
2. Vervangen van kleuren op basis van huidige kleuren
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| '<= Replace colors => 'Set percRange to whole active worksheet Set PercRange = Range("A1", ActiveWorkbook.ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell)) 'Begin loop For Each Thing In PercRange 'Select case on colorinder of cell color Select Case Thing.Interior.ColorIndex Case 55 'Dark blue With Thing.Interior .ColorIndex = 48 '48=dark grey .Pattern = xlSolid 'Solid color End With Case 47 'Light blue With Thing.Interior .ColorIndex = 15 '15=light grey .Pattern = xlSolid 'Solid color End With Case 34 'Very Light blue With Thing .Interior.ColorIndex = 2 '2=white .Borders.ColorIndex = 1 .Interior.Pattern = xlSolid 'Solid color End With Case 44 'Light yellow With Thing.Interior .ColorIndex = 2 '2=white .Pattern = xlSolid 'Solid color End With End Select 'Continue loop Next |
3. Printen
Visual Basic:
1
2
| 'Print preview ActiveWorkbook.ActiveSheet.PrintPreview |
4. Tijdelijke werkblad verwijderen
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
| '<= Delete temporary worksheet => 'Turn off delete alert Application.DisplayAlerts = False 'Delete worksheet ActiveWorkbook.ActiveSheet.Delete 'Turn on delete alert Application.DisplayAlerts = True 'you give control of the statusbar back to Excel Application.StatusBar = False End Sub |
Als ik bovenstaande code uitvoer, dan krijg ik de volgende foutcode:
En blijft de uitvoering 'hangen' op de volgende regel:Fout 1004 tijdens uitvoering:
Methode Range van het object _Worksheet is mislukt
Visual Basic:
1
| Set PercRange = Range("A1", ActiveWorkbook.ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell)) |
Maar als ik 'deel 2' van de code kopieer en onder een nieuwe knop zet en vervolgens uitvoer in het actieve werkblad, werkt alles perfect.
Hoe kan ik mijn code aanpassen, zodat het werkt zoals ik wil?