It all depends on HOW you want to print. From Excel, you have the complication that most printing is done at the Worksheet level, not the top-level document.

Make sure that you add a reference to "Acrobat Distiller" ("acrodist.exe") to your project, and then you can use this.

[vba]Sub ConvertWorkSheetToPDF(Optional InputWS As Worksheet, _
Optional PDFfilepath As String, Optional PDFfilename As String)

Dim objDist As New ACRODISTXLib.PdfDistiller


'**if no worksheet object, branch code to use ActiveSheet
If InputWS Is Nothing Then GoTo UseActivesheet


'If no file Path, use the parent Workbook path
If PDFfilepath = Empty Then
PDFfilepath = InputWS.Parent.Path & "\"
Else
If Not Right(PDFfilepath, 1) = "\" Then PDFfilepath = _
PDFfilepath & "\"
End If

'if no file name, build a name from workbook and sheet names
If PDFfilename = Empty Then PDFfilename = _
Left(InputWS.Parent.Name, Len(InputWS.Parent.Name) - 4) _
& " - " & InputWS.Name

'Print the worksheet as a postscript file (.ps)
InputWS.PrintOut Copies:=1, preview:=False, printtofile:=True, _
PrToFileName:=PDFfilepath & PDFfilename & ".ps", _
collate:=True, ActivePrinter:="Adobe PDF"
GoTo ConvertPS

UseActivesheet:
PDFfilepath = Environ("USERPROFILE") & "\Desktop\"

PDFfilename = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) _
& " - " & ActiveSheet.Name

'Print the worksheet as a postscript file (.ps)
ActiveSheet.PrintOut Copies:=1, preview:=False, printtofile:=True, _
PrToFileName:=PDFfilepath & PDFfilename & ".ps", _
collate:=True, ActivePrinter:="Adobe PDF"

ConvertPS:
'**Convert .ps file to .pdf and clean up
'use the Distiller to convert the .ps file to a .pdf
objDist.FileToPDF PDFfilepath & PDFfilename & ".ps", _
PDFfilepath & PDFfilename & ".pdf", ""

'delete the intermediate files
Kill (PDFfilepath & PDFfilename & ".ps")
Kill (PDFfilepath & PDFfilename & ".log")

'cleanup
Set objDist = Nothing
End Sub[/vba]

Also, you MUST have the default settings for your "Adobe PDF" printer set to:
Un-check the 'Do not send fonts to "Adobe PDF" ' box.

As far as I know, there is no way to change this setting programatically.