Активируйте лист Excel, используя пользовательскую форму Excel - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь активировать электронную таблицу, используя пару списков.lstWorkbooks хранит название рабочей книги.lstSheets - это список рабочих листов для выбранной рабочей книги в lstworksheets.Моя проблема с выбором значений из этого списка приводит к случайному поведению.

Пожалуйста, смотрите мой код ниже

Dim xlApp As Excel.Application
Dim wbk As Workbook

Private Sub lstSheets_AfterUpdate()
    ActiveWorkbook.Sheets(lstSheets.Value).Activate
End Sub

Private Sub lstWorkbooks_AfterUpdate()
    Me.lstSheets.Clear
        For Each wbk In xlApp.Workbooks
            If wbk.Name = Me.lstWorkbooks.Value Then
                Dim sh As Worksheet
                For Each sh In wbk.Worksheets
                    If sh.Visible = xlSheetVisible Then Me.lstSheets.AddItem sh.Name
                Next sh
                Exit For
            End If
        Next wbk
    Windows(lstWorkbooks.Value).Activate
End Sub

Private Sub UserForm_Activate()
    Set xlApp = GetObject(, "Excel.Application")
    For Each wbk In xlApp.Workbooks
        If wbk.Name <> "Personal.xlsb" Then Me.lstWorkbooks.AddItem wbk.Name
    Next wbk
End Sub

Любая помощь здесь, чтобы она приводила к желаемому поведению, ценится

1 Ответ

0 голосов
/ 12 ноября 2018

У вас есть

 Private Sub lstSheets_AfterUpdate()
     ActiveWorkbook.Sheets(lstSheets.Value).Activate
 End Sub

, но в листах листов может быть список листов из любой открытой рабочей книги.Вы не можете предполагать, что лист находится на активной рабочей книге.Сначала необходимо убедиться, что рабочая книга активна, поскольку пользователь мог активировать другую рабочую книгу между выбором рабочей книги и выбором листа.

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

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