ActiveWindow.NewWindow Windows («aFile.xlsm: 1»). Активировать не работает в Excel 365 - PullRequest
0 голосов
/ 17 января 2019

Вот мой оригинальный вопрос,

Как проверить, открыт ли "afile.xlsm: 2" VBA

Я создаю рабочую книгу в Excel 2013, и вышеуказанное решение работает. Office обновлен до «Office 365». Я заметил, что после «Excel 365» открывает новое окно, оно вызывает открытые окна «aFile.xlsm - 1» & «aFile.xlsm - 2» по сравнению с «aFile.xlsm: 1» & «aFile.xlsm: 2"

Поскольку в моем отладчике в строке указано «Ошибка времени выполнения» 9 «Подстрочный индекс вне диапазона»

Windows("aFile.xlsm:1").Activate

, я пытался изменить свой код VBA, чтобы он распознавал «aFile.xlsm - 1» и «aFile.xlsm - 2», но без преобладания.

Function AlreadyOpen(sFname As String) As Boolean
    Dim wkb As Workbook
    'Dim sFname As String
    sFname = "aFile.xlsm:2"
    On Error Resume Next
    Set wkb = Workbooks(sFname)
    AlreadyOpen = Not wkb Is Nothing
    Set wkb = Nothing
End Function

... опущено, что я считаю ненужным кодом, связанным с этим вопросом.

Dim sFilename As String

sFilename = "aFile.xlsm:2"

If AlreadyOpen(sFilename) Then
    Sheets("Sheet2").ListObjects("Table24").Range.AutoFilter Field:=5, Criteria1:=SearchString
Else
    If myButton.Text = "SITE" Then
    Sheets("Sheet1").Select
    ActiveWindow.NewWindow
    Windows("aFile.xlsm:1").Activate
    Windows("aFile.xlsm:2").Activate
    Windows.Arrange ArrangeStyle:=xlVertical
    Sheets("Sheet2").Select
    ActiveWindow.Zoom = 55

    ActiveSheet.ListObjects("Table24").Range.AutoFilter Field:=5, Criteria1:=SearchString
    End If
End If
Exit Sub

End Sub

Как можно заставить этот код работать в Excel 2013 и Excel 365? Я бы предпочел не компилировать;

computername = Environ("computer name") 'Get computer name
username = Environ("user name") 'Get user name 

в операторах if.

1 Ответ

0 голосов
/ 17 января 2019

Может быть стоит запустить это, пока у вас открыты оба окна

Dim w As Window
For Each w In Application.Windows
    Debug.Print w.Caption
Next w

А затем просто скопируйте / вставьте результаты из вашего окна Immediate в соответствующие области вашего кода VBA, поскольку в заголовке окна могут быть символы, которые вы не можете различить.

Кроме того, если вы хотите пойти по более динамичному маршруту, вы можете сделать что-то вроде

Dim w As Window
For Each w In Application.Windows
    If w.Caption LIKE "*aFile*2*" Then '<- the same would be used for "*aFile*1*"
        w.Activate
        Exit For
    End if
Next w

Будет работать так же.

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