Пользовательская форма для навигации и выбора другой открытой рабочей книги - PullRequest
0 голосов
/ 04 октября 2018

У меня есть небольшая программа VBA, которая фактически является пользовательской формой, которая позволяет мне отображать все существующие рабочие листы одной открытой рабочей книги, над которой я работаю.С помощью этой пользовательской формы я могу выбрать другой лист, и, щелкнув лист с помощью этой пользовательской формы, он переориентирует меня на нужный лист.Теперь я попытался изменить часть этой программы, чтобы сделать то же самое, но со всеми открытыми книгами.Это означает, что если у меня открыто несколько рабочих книг, я хотел бы, чтобы моя пользовательская форма позволяла мне отображать все существующие открытые рабочие книги и, выбрав нужную рабочую книгу с помощью пользовательской формы, переориентирует меня на эту рабочую книгу (это означает, что выбранная рабочая книга в пользовательской формеактивирован и выбран).Проблема в том, что когда я запускаю код, у меня появляется сообщение об ошибке 424 VBA Run-error '424' Object Required Error…

PS: очень жаль формат моего кода, но мне не удается поставитьв правильном формате ..

Заранее благодарим за помощь Xavi

Здесь вы найдете оригинальный код, который работает для пользовательской формы, связанной с рабочим листом (этот работает):

Sub UserForm_Initialize()
    Dim n As Long
    Dim msg As String
    Dim i As Long
    Dim s As String
    Dim sht As Worksheet

    Do
        n = n + 1
        Me.ListBox1.AddItem Sheets(n).Name
    Loop Until n = Worksheets.Count

End Sub

Здесь вы найдете модифицированный код для пользовательской формы, связанный с книгой (этот не работает: ошибка времени выполнения 424):

Sub UserForm_Initialize()
    Dim n As Long
    Dim msg As String
    Dim i As Long
    Dim s As String
    Dim Wb As Workbook

    Do
        n = n + 1
        Me.ListBox1.AddItem Workbooks(n).Name
    Loop Until n = Worksbooks.Count

End Sub

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Могу ли я предложить простой цикл for?

Dim i As Long
For i = 1 To Application.Workbooks.Count
    Debug.Print Application.Workbooks(i).Name
Next

Затем, если у вас разные экземпляры Excel (разные объекты Application, чем тот, из которого получена ваша пользовательская форма), это станет немного сложнее.(Это, вероятно, не тот случай, если вы работаете в Excel 2010 или новее).Но, если это так, то требуется пара вызовов Win32 API и некоторые сведения об «окнах» Excel.В прошлом я нашел здесь ответы на свои вопросы: Может ли VBA охватить экземпляры Excel?

0 голосов
/ 04 октября 2018

Если нет причин для анализа фактического числа в вашем коде, то почему бы просто не зациклить листы напрямую?

Sub UserForm_Initialize()
    Dim ws As Worksheet

    For Each ws In ThisWorkbook.Worksheets
        Me.ListBox1.AddItem ws.Name
    Next ws

End Sub
...