xbww
asked on
Printer.Print does not work in Access VB
I am trying to print to the printer with VB in Access 2002. Have read that the following command will work...
printer.print "test"
printer.EndDoc
When I try this I get the following error...
"Object does not support this property or method"
The error occurs when I try to run the code.
I am thinking that a reference should be checked off under "tools->references" but I can't find anything that works. Also, I will need to be able to turn bold on and off so if you know how, that would be nice too.
printer.print "test"
printer.EndDoc
When I try this I get the following error...
"Object does not support this property or method"
The error occurs when I try to run the code.
I am thinking that a reference should be checked off under "tools->references" but I can't find anything that works. Also, I will need to be able to turn bold on and off so if you know how, that would be nice too.
ASKER
I need to print directly to the printer without using a form or datasheet. I dont think DoCmd can do that..?
Fir this you can use:
Open "LPT1" For Output As #1 ' Open file for output.
Print #1, "This is a test" ' Print text to file.
Print #1, ' Print blank line to file.
Print #1, "Zone 1"; Tab ; "Zone 2" ' Print in two print zones.
Print #1, "Hello" ; " " ; "World" ' Separate strings with space.
Print #1, Spc(5) ; "5 leading spaces " ' Print five leading spaces.
Print #1, Tab(10) ; "Hello" ' Print word at column 10.
Close #1
Nic;o)
Open "LPT1" For Output As #1 ' Open file for output.
Print #1, "This is a test" ' Print text to file.
Print #1, ' Print blank line to file.
Print #1, "Zone 1"; Tab ; "Zone 2" ' Print in two print zones.
Print #1, "Hello" ; " " ; "World" ' Separate strings with space.
Print #1, Spc(5) ; "5 leading spaces " ' Print five leading spaces.
Print #1, Tab(10) ; "Hello" ' Print word at column 10.
Close #1
Nic;o)
ASKER
Thanks nico but I already print to file and it works well in many situations. But, in this situation I need to make some text "bold". I realize that I could embed PCL commands within the file but that wont work either. The bold text is random in the file. I am printing thousands of pages. I need to print directly to the printer so that I can turn bold on and off when required. If I can print directly to the printer, then I can complete the entire project in about 15 minutes. Now u see my motivation :)
The question was asked (and answered) on the forum regarding printing to the printer object directly. It has been indicated before that this is very easy to do. For some reason my system does not let me print to the printer object. This is the main problem I am trying to overcome.
Why can I NOT use the following commands?
printer.print "test"
printer.EndDoc
Why am I getting the following error?
"Object does not support this property or method"
The question was asked (and answered) on the forum regarding printing to the printer object directly. It has been indicated before that this is very easy to do. For some reason my system does not let me print to the printer object. This is the main problem I am trying to overcome.
Why can I NOT use the following commands?
printer.print "test"
printer.EndDoc
Why am I getting the following error?
"Object does not support this property or method"
first check whether the default printer is installed or not. The code u r using is perfect.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thanks rock, it looks like the answer to my question is the same as my question. Print.print does NOT work in VBA. I am using Access XP 2002.
So, the question now is...what is the best way to format output for the printer WITHOUT using controls on a report or form in MS Access. The suggestion to write an HTML file is certainly valid, but after a little more diggin I think the better option for me is to print to a blank report object (almost just like printing to the printer itself). Here is some code I found...
Dim rpt As Report
Dim strMessage As String
Dim intHorSize As Integer, intVerSize As Integer
Set rpt = Me
strMessage = "DisplayMessage"
With rpt
'Set scale to pixels, and set FontName and
'FontSize properties.
' .ScaleMode = 3
.FontName = "Courier New"
.FontSize = 24
End With
' Horizontal width.
intHorSize = rpt.TextWidth(strMessage)
' Vertical height.
intVerSize = rpt.TextHeight(strMessage)
' Calculate location of text to be displayed.
rpt.CurrentX = (rpt.ScaleWidth / 2) - (intHorSize / 2)
rpt.CurrentY = (rpt.ScaleHeight / 2) - (intVerSize / 2)
' Print text on Report object.
For x = 1 To 10
rpt.Print strMessage & Str$(x)
rpt.CurrentX = (rpt.ScaleWidth / 2) - (intHorSize / 2)
Next x
Just place the code in the format event of the detail area of a report. The report is not bound to any data.
So, the question now is...what is the best way to format output for the printer WITHOUT using controls on a report or form in MS Access. The suggestion to write an HTML file is certainly valid, but after a little more diggin I think the better option for me is to print to a blank report object (almost just like printing to the printer itself). Here is some code I found...
Dim rpt As Report
Dim strMessage As String
Dim intHorSize As Integer, intVerSize As Integer
Set rpt = Me
strMessage = "DisplayMessage"
With rpt
'Set scale to pixels, and set FontName and
'FontSize properties.
' .ScaleMode = 3
.FontName = "Courier New"
.FontSize = 24
End With
' Horizontal width.
intHorSize = rpt.TextWidth(strMessage)
' Vertical height.
intVerSize = rpt.TextHeight(strMessage)
' Calculate location of text to be displayed.
rpt.CurrentX = (rpt.ScaleWidth / 2) - (intHorSize / 2)
rpt.CurrentY = (rpt.ScaleHeight / 2) - (intVerSize / 2)
' Print text on Report object.
For x = 1 To 10
rpt.Print strMessage & Str$(x)
rpt.CurrentX = (rpt.ScaleWidth / 2) - (intHorSize / 2)
Next x
Just place the code in the format event of the detail area of a report. The report is not bound to any data.
cool, as long as you get your desired result,
your code looks quite straightforward as well,
your code looks quite straightforward as well,
xbww - I tried the same code you posted there, but I keep getting a type mismatch error at runtime for:
Set rpt = Me
Am I missing something really easy or stupid here?
Set rpt = Me
Am I missing something really easy or stupid here?
rpt has been declared as a report
where r u running this code?
in a form, module or report
where r u running this code?
in a form, module or report
ASKER
Code is run in a report.
Specifically...place the code in the 'on format' event of the detail area of a report. The report is not bound to any data.
Specifically...place the code in the 'on format' event of the detail area of a report. The report is not bound to any data.
Docmd.Printout
The following example prints two collated copies of the first four pages of the active form or datasheet:
DoCmd.PrintOut acPages, 1, 4, , 2