View Single Post
  #19   Report Post  
Posted to microsoft.public.word.newusers,microsoft.public.word.vba.general
Graham Mayor Graham Mayor is offline
external usenet poster
 
Posts: 19,312
Default help with macros

I cannot reproduce the problem in Word 2003. I have cross posted to the vba
forum to see if anyone has any ideas.
The command is supposed to re-call the form document so that it can be
protected again after the labels have been created.
--

Graham Mayor - Word MVP

My web site www.gmayor.com
Word MVP web site http://word.mvps.org


vandy wrote:
Hi Graham,

I separated the printing process and tested it . It works.

When i run the getcontent macro seperately i am getting a run time
error


Run-time error '5941' The requested member of the collection does not
exist.

When i press debug. it points out to the command

windows(sName).Activate . Once i stop the degugger the new document
with the labels pops up and i can print the labels i need. How to get
over this problem now.

thanks for your patience

"Graham Mayor" wrote:

Separate the printing process from the label creation process. This
will allow you to edit the label document before you print it. If
your recorded printing macro works use that instead - but don't
forget to add in the code to return to the previous state.

Sub GetContent()
Dim f1, f2, f3, f4, f5, f6, f7, sLayout As String
Dim strLabel As String
Dim sName As String
Dim bProtected As Boolean

'Unprotect the file
If ActiveDocument.ProtectionType wdNoProtection Then
bProtected = True
ActiveDocument.Unprotect Password:=""
End If
'get the filename of the form document
sName = ActiveDocument.FullName
'Get the field content
f1 = ActiveDocument.FormFields("Text1").Result
f2 = ActiveDocument.FormFields("Text2").Result
f3 = ActiveDocument.FormFields("Text3").Result
f4 = ActiveDocument.FormFields("Text4").Result
f5 = ActiveDocument.FormFields("Text5").Result
f6 = ActiveDocument.FormFields("Text6").Result
f7 = ActiveDocument.FormFields("Text7").Result
'assemble the content with associated text
sLayout = "PRODUCT DESCRIPTION " & f1 & " COMPONENT " & f2 _
& vbCr & "MPI No " & f3 & " DRAWING# " & f4 _
& " REV NO " & f5 & " ASSEMBLY DWG " & f6 _
& vbCr & "TOT QTY " & f7
'Pick the label type
strLabel = InputBox("Label stock number?", "Labels", 5263)
'Create the label
Application.MailingLabel.CreateNewDocument Name:=strLabel,
Address:=sLayout Windows(sName).Activate

'Reprotect the form document.
If bProtected = True Then
ActiveDocument.Protect _
Type:=wdAllowOnlyFormFields, NoReset:=True, Password:=""
End If
End Sub

Sub PrintTheLabels()
'Print the labels
sTray = Options.DefaultTray
Options.DefaultTray = "Drawer 1"
Dialogs(wdDialogFilePrint).Show
Options.DefaultTray = sTray
Dim sTray As String
End Sub


--

Graham Mayor - Word MVP

My web site www.gmayor.com
Word MVP web site http://word.mvps.org

vandy wrote:
Hi Graham,

Thanks a ton for your code. I have been trying different
combinations all day to get around the printer problem. As
suggested I ran the printtray code seperately and it is printing
from "Drawer 1" without error. when i combine it with the
getcontent code the printer stalls and i have to physically undo
the stackbypass option and select LTR on the printer. The funny
part is when i go to select option button on the printer pop up i
see default tray as drawer 1.

Now the label sheet appears on a new document I am unable to delete
labels that i dont require. Since the same label is listed for the
full page. I am forced to give the print command to complete the
macro. Any suggestions. Thanks for all your help.



"Graham Mayor" wrote:

Oops - triplicate - I don't know how that happened

--

Graham Mayor - Word MVP

My web site www.gmayor.com
Word MVP web site http://word.mvps.org


Graham Mayor wrote:
You have to walk before you can run

First clean up the mess from the crash -
http://www.gmayor.com/what_to_do_when_word_crashes.htm

You are going wrong by using the wrong bit of macro code. The one
you have used intercepts the envelope/label dialog. The posted
macro has already used that and the label has been created. All
you need is to set the printer and tray and pop up the print
dialog.

Your modifications seem to suggest that the same printer is used
throughout. That being the case there is no need to change it. You
can change the Tray (are you sure that "Drawer 1" is the correct
command? Record the action in a temporary macro if you are not
sure) and change it back. The additions below pop up the print
dialog so you can print as many labels as required or change the
tray further if required.
Sub GetContent()
Dim f1, f2, f3, f4, f5, f6, f7, sLayout As String
Dim strLabel As String
Dim sTray As String
Dim sName As String
Dim bProtected As Boolean

'Unprotect the file
If ActiveDocument.ProtectionType wdNoProtection Then
bProtected = True
ActiveDocument.Unprotect Password:=""
End If
'get the filename of the form document
sName = ActiveDocument.FullName
'Get the field content
f1 = ActiveDocument.FormFields("Text1").Result
f2 = ActiveDocument.FormFields("Text2").Result
f3 = ActiveDocument.FormFields("Text3").Result
f4 = ActiveDocument.FormFields("Text4").Result
f5 = ActiveDocument.FormFields("Text5").Result
f6 = ActiveDocument.FormFields("Text6").Result
f7 = ActiveDocument.FormFields("Text7").Result
'assemble the content with associated text
sLayout = "PRODUCT DESCRIPTION " & f1 & " COMPONENT " & f2 _
& vbCr & "MPI No " & f3 & " DRAWING# " & f4 _
& " REV NO " & f5 & " ASSEMBLY DWG " & f6 _
& vbCr & "TOT QTY " & f7
'Pick the label type
strLabel = InputBox("Label stock number?", "Labels", 5263)
'Create the label
Application.MailingLabel.CreateNewDocument Name:=strLabel,
Address:=sLayout
'Print the labels
sTray = Options.DefaultTray
Options.DefaultTray = "Drawer 1"
Dialogs(wdDialogFilePrint).Show
Options.DefaultTray = sTray
'Switch back to the form document
Windows(sName).Activate

'Reprotect the form document.
If bProtected = True Then
ActiveDocument.Protect _
Type:=wdAllowOnlyFormFields, NoReset:=True, Password:=""
End If
End Sub



vandy wrote:
Hello Graham,

Thanks for the document giving me an option for selecting the
tray. I am new woking with macros and have attempted to add the
code with the exisiting macro you gave me.
I am running into run time errors.

I am getting the users input to print the labels and assuming
that this macro will print from drawer 1 thus choosing the tray
and if not than it print out from drawer 2.



Sub GetContent()
Dim f1, f2, f3, f4, f5, f6, f7, sLayout As String
Dim strLabel As String
Dim bProtected As Boolean

Dim sCurrentPrinter As String
Dim sTray As String
Dim sQuery As String

'Unprotect the file
If ActiveDocument.ProtectionType wdNoProtection Then
bProtected = True
ActiveDocument.Unprotect Password:=""
End If
'Get the field content
f1 = ActiveDocument.FormFields("Text1").Result
f2 = ActiveDocument.FormFields("Text2").Result
f3 = ActiveDocument.FormFields("Text3").Result
f4 = ActiveDocument.FormFields("Text4").Result
f5 = ActiveDocument.FormFields("Text5").Result
f6 = ActiveDocument.FormFields("Text6").Result
f7 = ActiveDocument.FormFields("Text7").Result
'assemble the content with associated text
sLayout = "PRODUCT DESCRIPTION " & f1 & " COMPONENT " & f2 _
& vbCr & "MPI No " & f3 & " DRAWING# " & f4 _
& " REV NO " & f5 & " ASSEMBLY DWG " & f6 _
& vbCr & "TOT QTY " & f7
'Pick the label type
strLabel = InputBox("Label stock number?", "Labels", 5263)
'Create the label
Application.MailingLabel.CreateNewDocument Name:=strLabel,
Address:=sLayout 'Reprotect the document.
If bProtected = True Then
ActiveDocument.Protect _
Type:=wdAllowOnlyFormFields, NoReset:=True, Password:=""
End If



sQuery = MsgBox("Print Labels?", vbYesNo, "Labels")
If sQuery = vbYes Then 'Answer is print labels

ActivePrinter = "\\numetServer\Canon5000ps downstairs" 'Set the
required printer

Options.DefaultTray = "Drawer 1" 'set labels to Tray 1
End If

If sQuery = vbNo Then 'Answer is regular document
ActivePrinter = "\\numetServer\Canon5000ps downstairs" 'Set the
required printer
Options.DefaultTray = "Drawer 2" 'Set labels to Tray 2
End If

With Dialogs(wdToolsEnvelopesAndLabels)
sCurrentPrinter = ActivePrinter 'Save the current printer
sTray = Options.DefaultTray 'Save the current tray
'ask the user whether labels are required
.DoNotSetAsSysDefault = True
.Execute
Dialogs(wdDialogToolsEnvelopesAndLabels).Show 'Pop up the wizard
dialog ActivePrinter = sCurrentPrinter 'Put the printer back as
it was at the start Options.DefaultTray = sTray 'Put the tray
back as it was at the start DoNotSetAsSysDefault = True
.Execute
End With
End Sub

window shuts down and word autosaves my document. Where am i
going wrong.

Thanks for the help.


"Graham Mayor" wrote:

You can select the label tray from the print dialog - you should
also be able to edit the tray from the envelope/label dialog -
options.
You can do any of this by macro if you know the parameters - see
the examples for selectring alternative printers and/or trays at
http://www.gmayor.com/fax_from_word.htm

--

Graham Mayor - Word MVP

My web site www.gmayor.com
Word MVP web site http://word.mvps.org



vandy wrote:
Hello Graham,

This macro code works beautifully. The labels are getting
printed the way it should be. I am still trying to overcome a
printer word problem.

In word during mail merge when you select avery shipping label
option the Laser and ink jet tray shows systemBypass to allow
manual feed.

When i run this macro the printer detects labels are being
printed and gives an error.I manually select auto paper size A4
and the data is printed. I tried putting the label in the tray
but it did not work either. It flashes with Staybypass option.
Is there any way a default paper tray can be selected. We use
printers in remote location and are looking at getting a
dedicated printer for this purpose.

Can the user select the tray from which he wants to print might
be that way we can work around this problem.

"Graham Mayor" wrote:

To overcome the variables try the following:

1. The revised version below creates a new label document, so
you can print as many labels as you like on whatever printer
you have available.
2. The default label size is 5263, but you can insert another
number if you change this.
3. See 1
4. Run the macro from a toolbar button or better still on exit
from the last form field. The macro will then unlock and lock
the form. 5. It doesn't matter what you call the form field
bookmarks as long as the names are echoed in the macro Text1
to