У меня есть две книги, в 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 окажется в фокусе, но этого не произошло.
Любая помощь или объяснение, почему это происходит, будет очень цениться.