Выбор Combobox на пользовательской форме из одной рабочей книги вызывает проблемы с активированным листом - PullRequest
2 голосов
/ 19 марта 2019

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

У меня есть пользовательская форма, содержащая ComboBox и 2 кнопки.Кнопка 1 запускает функцию, которая копирует данные из OtherBook во временный лист в 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

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

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

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" & i & ",V:W,2,FALSE)"
        .Cells(i, 17).Formula = "=VLOOKUP(E" & i & ",V:W,2,FALSE)"

    End With

    wbDraftPricing.Activate
    wsEditorSheet.Select

End Sub

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

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

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

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

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