Excel VBA和VB6打印机

我有下面的代码,这个代码是用VB6编写的,但我无法打开窗体或检查任何引用。

Private Sub PopulatePrinterCombo(cmbDestination As ComboBox) Dim objPrinter As Printer 'a printer in the Printers collection object 'Add the printers to the combo box For Each objPrinter In printers cmbPrinter.AddItem objPrinter.DeviceName Next 'Set current selection to the default printer cmbDestination.Text = Printer.DeviceName End Sub 

我目前正在复制代码到Excel VBAmacros,问题是Dim objPrinter As Printer代码,我不断收到一条错误消息,说:“用户定义的types没有定义”,我需要一个引用来添加VBA能够得到声明一个variables为“打印机”或什么的选项?

我的第二个问题是,我不完全理解“打印机”在For Each objPrinter In printersFor Each objPrinter In printers ,什么是“打印机”? 有人可以向我解释

谢谢

第2部分

我现在试图打印文件,我有以下作为我的代码:

  'Initialize values intDraftsPrinted = 0 If objDraftPaths.Count > 1 Then Else intSelectedDraftCount = CountSelectedDrafts End If 'prompt user to make sure intMsgBoxResponse = MsgBox("You selected " & intSelectedDraftCount & " part numbers. After removing duplicates" & vbNewLine & "there were " & objDraftPaths.Count & " unique draft files found." & vbNewLine & "Do you want to print these files?", vbYesNo, "TD Printer") If intMsgBoxResponse <> vbYes Then intSelectedDraftCount = 0 'So the following for loop will not entered Else intSelectedDraftCount = objDraftPaths.Count End If For i = 1 To intSelectedDraftCount booSuccess = False 'open the draft file Set objDraftDocument = OpenSolidEdgeDraft(objDraftPaths.Item(i)) If objDraftDocument Is Nothing Then 'could not open file MsgBox "Could not open the following draft file:" & vbNewLine & _ objDraftPaths.Item(i), vbExclamation, "Solid Edge Error" Else 'Print the draft file For Each objSheet In objDraftDocument.Sheets strSheetSize = DetermineSheetSize(objSheet) If strSheetSize <> "" Then 'Determine orientation If InStr(1, strSheetSize, "90") <> 0 Then 'Print as landscape intOrientation = vbPRORLandscape Else 'Print as portrait intOrientation = vbPRORPortrait End If 'Specify Sheet Size Select Case Left(strSheetSize, 1) Case "A" intPaperSize = VBRUN.PrinterObjectConstants.vbPRPSLetter Case "B" intPaperSize = VBRUN.PrinterObjectConstants.vbPRPS11x17 Case "C" intPaperSize = VBRUN.PrinterObjectConstants.vbPRPSCSheet Case "D" intPaperSize = VBRUN.PrinterObjectConstants.vbPRPSDSheet Case "E" intPaperSize = VBRUN.PrinterObjectConstants.vbPRPSESheet Case Else intPaperSize = VBRUN.PrinterObjectConstants.vbPRPSLetter End Select 'Enable error handling On Error Resume Next 'Activate the current sheet objSheet.Activate If Err Then 'Could not activate sheet MsgBox "An error occurred while attempting to print: " & vbNewLine & objDraftPaths.Item(i) & vbNewLine & "The error was:" & vbNewLine & "Error Number: " & Err.Number & vbNewLine & "Error Description: " & Err.Description, vbExclamation, "Solid Edge Error" Err.Clear Else 'Print to the printer specified by the combo box objDraftDocument.PrintOut cmbPrinter.Text, 1, intOrientation, intPaperSize, , , , igPrintSelected If Err Then 'Could not print document MsgBox "An error occurred while attempting to print: " & vbNewLine & objDraftPaths.Item(i) & vbNewLine & "The error was:" & vbNewLine & "Error Number: " & Err.Number & vbNewLine & "Error Description: " & Err.Description, vbExclamation, "Solid Edge Error" Err.Clear Else booSuccess = True End If End If 'Disable error handling On Error GoTo 0 End If Next 'Close the file objDraftDocument.Close False intDraftsPrinted = intDraftsPrinted + 1 End If Next i 'Dereference objects Set objSheet = Nothing Set objDraftDocument = Nothing 'Set objDraftPaths = Nothing PrintSelectedDrafts = intDraftsPrinted 

现在问题出现时,我碰到这样一行: intOrientation = vbPRORLandscape在VBA中的intOrientation = vbPRORLandscape ,它不能识别“vbPRORLandscape”以及下一行“vbPRORPortrait”。 有没有办法解决这个问题?

此外,我有一种感觉VBRUN.PrinterObjectConstants.vbPRPSLetter和其余的这些行可能无法正常工作。 它在VB6中工作。

谢谢

看来Printers Collection在MS Access VBA环境中是可用的,但是我不相信它是Excel VBA环境的内在。

我使用Windows Script Host的WshNetwork对象列出可用的打印机。 我使用下面的子例程来填充连接到系统的打印机列表的ComboBox。 为了使此代码正常工作,您需要将“Windows脚本宿主对象模型”引用添加到您的VBA项目中。 (菜单:工具>参考[从列表中select])

我添加了(j)循环来按字母顺序排列列表。

 Sub populatePrintersList() Dim nwo As New WshNetwork Dim i As Integer Dim j As Integer Dim bAdd As Boolean bAdd = True cmbPrinter.Clear For i = 0 To (nwo.EnumPrinterConnections.Count / 2) - 1 For j = 0 To cmbPrinter.ListCount - 1 If nwo.EnumPrinterConnections(i * 2 + 1) < cmbPrinter.List(j) Then cmbPrinter.AddItem nwo.EnumPrinterConnections(i * 2 + 1), j bAdd = False Exit For End If Next j If bAdd Then cmbPrinter.AddItem nwo.EnumPrinterConnections(i * 2 + 1): bAdd = True Next i cmbPrinter.ListIndex = 0 End Sub 

第2部分:

MSDN包含Worksheet.PrintOut方法的参考资料: Worksheet.PrintOut

有关Worksheet.PageSetup对象的方法和属性的深入文档也可以在MSDN上find: Worksheet.PageSetup

我build议使用这些资源来find大量的答案。