Поиск принтера в пользовательской форме приводит к увеличению времени загрузки - PullRequest
0 голосов
/ 21 марта 2019

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

enter image description here

Связано с этой пользовательской формой У меня есть следующее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 принтеров.Есть ли способ, с помощью которого я могу запретить поиску принтеров в книге до тех пор, пока она не откроется (и не выполнит поиск в фоновом режиме, чтобы данные могли по-прежнему вводиться в книгу во время поиска), или это более длительное время загрузки, что присуще поиску?принтеры?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...