2016-12-06 4 views
2

Я уже asked этот вопрос в MSDNКак переключиться на рабочий лист?

Как переключаться из редактора Visual Basic на лист во время выполнения?

Если процедура была не работает, я мог бы нажать кнопку Открыть Microsoft Excel (Alt + F11). Есть ли заявление VBA, которое делает то же самое?

Спасибо, Шейн.

Excel 2010 с пакетом обновления 2 (14.0.7173.5000) 64-разрядный

+0

Я вижу, что вы говорите, не уверен, что это возможно. Первоначально я предлагал метод «Активировать», но это не приведет к появлению окна Excel.Можете ли вы запустить метод из формы кнопки, которая фактически будет делать то же самое (и чередовать листы, если нужно использовать метод «Активировать») – AER

ответ

0

Первая I вас раздражает, повторяя, что вы получили от MSDN;). Затем я опишу, какие способы я нашел, чтобы вывести окна на передний план.

Я тоже не вижу необходимости делать то, что вы просите. Вы хотите отлаживать свой код, но для отладки я считаю необходимым (большую часть времени) видеть код во время его выполнения. Помещение окон бок о бок и использование F8 для перехода через код кажется лучшим вариантом.

Для нескольких сценариев я могу думать, что этого достаточно, чтобы запустить макрос из окна Excel (Alt + F8).


Теперь для фактического ответа: я не знаю о других версиях, но для меня просто активация окна не приносит его на передний план (Управление 2016, Windows 10). Я нашел следующую работу:

  • Использования AppActivate (вероятно, самый лучший метод, хотя я не хотел указать окна по имени)

    AppActivate Application.Caption 
    
  • Отправить ключи Alt + F11:

    Application.SendKeys "%{F11}" 
    

    однако вы, вероятно, должны проверить, находится ли окно excel спереди (или вы можете вернуть VBE). Единственный способ, которым я нашел использует систему API:

    'on top of your module 
    Declare Function GetForegroundWindow Lib "user32"() As Long 
    
    'in your sub 
    If GetForegroundWindow = Application.VBE.mainwindow.hwnd Then Application.SendKeys "%{F11}" 
    
  • Использование системной функции

    'on top of your module 
    Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long 
    
    'in your sub 
    SetForegroundWindow ThisWorkbook.Windows(1).hwnd 
    
  • Установка видимость ложной и истинной снова и приносит его на фронт для меня

    ThisWorkbook.Windows(1).Visible = False 
    ThisWorkbook.Windows(1).Visible = True 
    
+0

Мне очень жаль, что я так долго ответил. Я пробовал все ваши предложения, и единственное, что работает это: Application.SendKeys «% {F11}» Как уже упоминалось, если окно Excel уже впереди, он будет считать меня VBE, но я только собирался использовать его для отладки любым способом. Так что это будет делать то, что мне нужно. Спасибо за помощь. Шейн. –

3

Для отображения VBE:

Sub ShowVBE() 
    With Application.VBE.MainWindow 
     .Visible = True 
     .SetFocus 
    End With 
End Sub 

Чтобы активировать Workbook окно, сделать что-то вроде:

Sub ShowThisWorkbook() 
    With ThisWorkbook 
     .Activate 
     .Windows(1).Activate 
     .Windows(1).WindowState = xlMaximized 
     .Worksheets("Sheet2").Activate ' <-- Change to your desired Worksheet name here 
    End With 
End Sub 
+0

Активация окна рабочей книги или рабочей книги не выводит ее на передний план для меня (Office 2016) – arcadeprecinct

+0

@arcadeprecinct См. Редактирование моего кода для 'ShowThisWorkbook()', я должен был включить строку активации листа. Также добавлено, чтобы включить WindowState как Максимальное. – PatricK

Смежные вопросы