Вот мой оригинальный вопрос,
Как проверить, открыт ли "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.