Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[VBA Word] logo verwijderen voor afdrukken *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Wij hebben standaard sjablonen voor brieven en faxen. Nu willen wij dat wanneer men op een specifieke printer print de logo's en dergelijke uit worden gezet. Uit deze printer komt namelijk briefpapier.

Onderstaand script hebben we tot nu toe alleen zet het script in alle situaties de logo's uit. Het maakt niet uit welke printer we selecteren.


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
32
33
34
35
36
37
38
39
40
Public WithEvents oApp As Word.Application

Private Sub Class_Initialize()
' MsgBox "initialise"
End Sub

Private Sub oApp_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)

Dim StrPrinter As String

On Error GoTo Errorhandler
StrPrinter = Application.ActivePrinter
If Left(StrPrinter, 20) = "Xerox 7655 (Brief)" Or Left(StrPrinter, 8) = "Xerox 55 (Brief)" Then
' Logo's uit zetten
Uit
Else
' Is het een andere printer dan moeten ze aan staan
Aan

End If

Exit Sub


Errorhandler:
Dim Msg As String
Msg = "Fout opgetreden" & Chr(13) & "Foutnummer " & Str(Err.Number) _
& Err.Source & Chr(13) & Err.Description & vbNewLine _
& vbNewLine
MsgBox Msg

End Sub

Private Sub oApp_DocumentOpen(ByVal Doc As Document)
' MsgBox "Doc Open"
End Sub

Private Sub oApp_NewDocument(ByVal Doc As Document)
' MsgBox "New Doc"
End Sub

[ Voor 0% gewijzigd door Verwijderd op 02-04-2009 10:48 . Reden: codetags! ]


  • Dido
  • Registratie: Maart 2002
  • Nu online

Dido

heforshe

Wat is je vraag nu precies? Je code staat vol nutteloze subs (ze doen namelijk niets) en de enige code die wat nuttigs zou moeten doen lijk je weggeknipt te hebben.

Zet het eens tussen code-tags, en leg dan eens uit wat hier volgens jou moet gebeuren?

code:
1
2
3
4
5
6
7
8
StrPrinter = Application.ActivePrinter
If Left(StrPrinter, 20) = "Xerox 7655 (Brief)" Or Left(StrPrinter, 8) = "Xerox 55 (Brief)" Then
' Logo's uit zetten
Uit
Else
' Is het een andere printer dan moeten ze aan staan
Aan
End If

Met name de stukjes "Uit" en "Aan" lijken me namelijk geen VBa ;)

Overigens vergelijk je een string van 20 lang met een van 18, en vervolgens een van 8 met een van 16. Dat gaat ook al niet werken.

[ Voor 10% gewijzigd door Dido op 02-04-2009 09:51 ]

Wat betekent mijn avatar?


Verwijderd

zoals Dido opmerkt, de vergelijking met de printernaam klopt gewoon niet. verder veronderstel ik dat in je opzet de routine "Aan" overbodig is, enkel "Uit" is nodig, die hopelijk de nodige code bevat om het logo effectief te verwijderen/onzichtbaar te maken.
daarnaast doe je ook de instantiëring van deze gebeurtenisafhandelingsklassemodule neem ik aan, anders gebeurt er uiteraard niet veel.

Verwijderd

Topicstarter
Ik heb hem nu aangepast naar onderstaand script en lijkt het te werken.
Alleen moet men eerst de standaard printer wijzigen in Xerox 7655 (Brief) of Xerox 55 (Brief)
Is het verhaal van die standaard printer eruit te halen? Ik wil eigenlijk dat de macro "UIT" gaat draaien als men één van bovenstaande printers selecteert.

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
32
33
34
35
36
37
38
Public WithEvents oApp As Word.Application

Private Sub Class_Initialize()
' MsgBox "initialise"
End Sub

Private Sub oApp_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)

  Dim StrPrinter As String
  
  On Error GoTo Errorhandler
  StrPrinter = Application.ActivePrinter
  MsgBox Application.ActivePrinter
  If Left(StrPrinter, 18) = "Xerox 7655 (Brief)" Or Left(StrPrinter, 16) = "Xerox 55 (Brief)" Then
     ' Logo's aan zetten
     Uit
     
  End If
  
  Exit Sub
  
 
Errorhandler:
  Dim Msg As String
  Msg = "Fout opgetreden" & Chr(13) & "Foutnummer " & Str(Err.Number) _
        & Err.Source & Chr(13) & Err.Description & vbNewLine _
        & vbNewLine
  MsgBox Msg
   
End Sub

Private Sub oApp_DocumentOpen(ByVal Doc As Document)
' MsgBox "Doc Open"
End Sub

Private Sub oApp_NewDocument(ByVal Doc As Document)
' MsgBox "New Doc"
End Sub

Verwijderd

je moet altijd testen op de actieve printer, deze kan immers ook buiten word om gewijzigd worden. wat wel eventueel kan is de routine "uit" aan een werkbalkknop koppelen en dan hieraan code toevoegen die de juiste printer instelt. maar in dat geval zal je 2 uit-routines moeten maken, wegens 2 mogelijke printerkeuzes waar logoloos op afgedrukt wordt.