getSheetByCodeName не работает должным образом, когда VBE не открыт - PullRequest
0 голосов
/ 04 июня 2019

Мой код работает отлично, когда VBE открыт на втором экране, но не удается найти лист, когда VBE закрыт, и отображает MsgBox.
Открываемая книга довольно большая и медленно открывается.
Я добавил DoEvents, но это, похоже, не имело значения.
Любая подсказка?

'some code.....
Set wbSrc = Workbooks.Open(filename:=filename, UpdateLinks:=False, ReadOnly:=True)
DoEvents
Set shSrc = getSheetByCodeName(wbSrc, "Sheet3")    
If shSrc Is Nothing Then
    MsgBox "Couldn't find sheet"
    Exit Sub
End If
'continues....


Function getSheetByCodeName(wb As Workbook, codeName As String) As Worksheet
'given wb object and codeName string, returns a ref to the sheet in wb that has that codeName
'returns Nothing if nothing found
    Dim sh As Worksheet
    For Each sh In wb.Sheets
        If sh.codeName = codeName Then
            Set getSheetByCodeName = sh
            Exit Function
        End If
    Next sh
    Set getSheetByCodeName = Nothing
End Function

1 Ответ

0 голосов
/ 05 июня 2019

Временный ответ (перед лучшим):
, поскольку пользователи будут менять имя листа каждый месяц, а поскольку getSheetByCodeName, похоже, создает проблему с этим конкретным файлом, я решил использовать

Set shSrc = wbSrc.Sheets(3)   'use index property

Это будет работать до тех пор, пока пользователи не переместят вкладку.

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