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