У меня есть пользовательская форма, которую я создал, чтобы выбрать несколько листов для печати и выбрать принтер для печати.На следующем рисунке показана форма, в которой левое поле со списком - ListBox1, а правое поле со списком - ListBox2.

Связано с этой пользовательской формой У меня есть следующееsubs:
Dim a As Boolean
Private Sub CommandButton1_Click()
'Print Button
Dim msg As String, msg2 As String
Dim i As Integer
For X = 1 To ListBox1.ListCount - 1 'Starts at 1 instead of 0 to exclude "Select All"
If ListBox1.Selected(X) = True Then
msg = msg & ListBox1.List(X) & vbCrLf 'List of Selected sheets for message box
End If
Next X
msg2 = ListBox2.Value
Response = MsgBox("The following items will be printed with " & msg2 & vbCrLf & vbCrLf & msg, vbOKCancel, "Press OK to Print")
If Response = vbOK Then
' Application.DisplayAlerts = False
Application.Visible = 1
For i = 1 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
Application.ScreenUpdating = 0
Sheets(ListBox1.List(i)).PrintOut ActivePrinter:=ListBox2.Value
End If
Next i
' Application.DisplayAlerts = True
Unload Me
ElseIf Response = vbCancel Then
End If
End Sub
Private Sub CommandButton2_Click()
'Cancel Button
Unload Me
End Sub
Private Sub UserForm_Initialize()
Dim myWorksheet As Worksheet
With ListBox1
.MultiSelect = fmMultiSelectMulti
.ListStyle = fmListStyleOption
.AddItem "Select All"
For Each myWorksheet In Worksheets
If myWorksheet.Visible = xlSheetVisible Then
'add each visible worksheet to the listbox
.AddItem myWorksheet.Name
End If
Next myWorksheet
End With
Dim X As Long, Printers As Object, arrPrinters As Variant
With CreateObject("WScript.Network")
For X = 1 To .EnumPrinterConnections.Count Step 2
ListBox2.AddItem .EnumPrinterConnections(X)
Next
End With
End Sub
Private Sub ListBox1_Change()
If a = True Then Exit Sub
With Me.ListBox1
If .ListIndex = 0 Then
'stop recursion
a = True
For i = 1 To .ListCount - 1
.Selected(i) = .Selected(0)
Next i
a = False
Else
.Selected(0) = False
End If
End With
End Sub
В моей книге 37 страниц, и у меня всего 10 принтеров.Есть ли способ, с помощью которого я могу запретить поиску принтеров в книге до тех пор, пока она не откроется (и не выполнит поиск в фоновом режиме, чтобы данные могли по-прежнему вводиться в книгу во время поиска), или это более длительное время загрузки, что присуще поиску?принтеры?