Выбор выпадающего списка в пользовательской форме из одной книги вызывает проблемы с активированным листом

#excel #vba

#excel #vba

Вопрос:

У меня есть две рабочие книги, MacroBook.xlsm содержит код и пользовательские формы, содержащиеся в нем. OtherBook.xlsx не имеет кода VBA и действует только с помощью кода.

У меня есть пользовательская форма, содержащая выпадающий список и 2 кнопки. Кнопка 1 запускает функцию, которая копирует данные из другой книги во временный лист в MacroBook, получает все уникальные элементы из диапазона, а затем удаляет временный лист.

 Function GetListOfEditors(ws As Worksheet) As Variant

    Dim i As Integer
    i = ufAddToDraftWorking.iEdDestRow

    Dim rng As Range, rng2 As Range
    Dim data As Variant
    Dim lRow As Integer

    'Create a temp sheet to store data
    Call CreateSheet("TempSheet")

    'Copy complete list of editors to temp sheet
    ws.Range(Cells(2, 4), Cells(i - 1, 5)).Copy ThisWorkbook.Worksheets("TempSheet").Range("A1")

    'Use worksheet function to remove duplicates from both columns
    Set rng = ThisWorkbook.Worksheets("TempSheet").UsedRange
    rng.RemoveDuplicates Columns:=Array(1, 2), Header:=xlNo

    ThisWorkbook.Worksheets("TempSheet").Activate

    'Store updated data
    lRow = ThisWorkbook.Worksheets("TempSheet").UsedRange.Rows.Count

    Set rng2 = ThisWorkbook.Worksheets("TempSheet").Range(Cells(1, 1), Cells(lRow, 2))
    data = rng2

    'Delete Temp Sheet
    ThisWorkbook.Worksheets("TempSheet").Delete

    'Return List of Unique Editors
    GetListOfEditors = data

End Function
  

Затем этот диапазон сохраняется в выпадающем списке в пользовательской форме. На данный момент в фокусе на экране находится другая книга. Как только я выбираю пользовательскую форму, например, щелкаю по выпадающему списку, макробук теперь в фокусе.

Нажатие кнопки Далее в пользовательской форме вносит некоторые изменения на лист в другой книге. Во время этого макроса книга все еще находится в фокусе.

 Sub AddApprover(ApproverName As String)

    Dim wbDraftPricing As Workbook
    Dim wsEditorSheet As Worksheet

    Dim i As Integer

    i = ufAddToDraftWorking.iEdDestRow

    Debug.Print Application.ScreenUpdating
    If FileHandler.IsWorkBookOpen(Globals.DraftWorkingFormulasPath) = True Then
        Set wbDraftPricing = Workbooks(FileHandler.FileNameFromPath(Globals.DraftWorkingFormulasPath))
    Else
        Set wbDraftPricing = OpenDraftWorkingFile()
    End If

   'OtherBook is still not put into focus here 
    Set wsEditorSheet = wbDraftPricing.Worksheets("Editor List")
    wbDraftPricing.Activate
    wsEditorSheet.Activate

    With wsEditorSheet

        'Add Approver from dropdown list on userform
        .Cells(i, 5) = ApproverName
        .Cells(i, 12) = .Cells(i, 4)
        'Add Vlookups to get correct naming from sharepoint
        .Cells(i, 16).Formula = "=VLOOKUP(D" amp; i amp; ",V:W,2,FALSE)"
        .Cells(i, 17).Formula = "=VLOOKUP(E" amp; i amp; ",V:W,2,FALSE)"

    End With

    wbDraftPricing.Activate
    wsEditorSheet.Select

End Sub
  

Если я затем выберу OtherBook на панели задач, это, очевидно, попадет в фокус. Однако проблема заключается в щелчке на этом листе. Если я попытаюсь выбрать ячейку в OtherBook, то на самом деле будет выбрана ячейка в MacroBook. Этот эффект переносится на нажатие кнопки закрытия в другой книге, фактически закрывающей макробук.

Чтобы исправить это, я должен щелкнуть в пользовательской форме, затем щелкнуть в MacroBook, затем я могу открыть OtherBook и выбрать ячейки как обычно.

В функции AddApprover я отметил комментарием, где я ожидал, что в центре внимания окажется другая книга, но этого не происходит.

Любая помощь или объяснение, почему это происходит, были бы весьма признательны.