Visual Basic, проверьте, существует ли лист в другой книге

Вопрос:

Я действительно новичок в Visual Basic, и я тоже не знаю ни одного python. Я пытаюсь написать код, который может проверить, существует ли рабочий лист в книге…

Sub sheetexist()
If Len(Dir(("C:\My Data\Performance Spreadsheets\[ABCD - Performance.xls]Jun 14"))) Then
MsgBox "Sheet exist"
Else
MsgBox "Sheet does not exist"
End If
End Sub

ABCD имеет лист для июня 14, однако код возвращает только «Лист не существует», есть ли другой способ проверить листы в других книгах?

Лучший ответ:

Я думаю, что вы неправильно используете функцию Dir.

Самый простой способ проверить, существует ли лист, — это обработка ошибок.

Function SheetExists(wbPath as String, shName as String)
    Dim wb as Workbook
    Dim val

    'Assumes the workbook is NOT open
    Set wb = Workbooks.Open(wbPath)
    On Error Resume Next
    val = wb.Worksheets(shName).Range("A1").Value
    SheetExists = (Err = 0)

    'Close the workbook
    wb.Close

End Function

Вызвать функцию, подобную этой, из ячейки листа:

=SheetExists("C:\My Data\Performance Spreadsheets\ABCD - Performance.xls", "Jun 14")

Или из VBA:

Debug.Print SheetExists("C:\My Data\Performance Spreadsheets\ABCD - Performance.xls", "Jun 14")

Не открывая книгу, вы можете использовать здесь код.

Это вызовет ошибку, если какая-либо часть формулы не может оценить (например, если вы передаете имя несуществующего листа, неправильный путь к файлу и т.д., Error 2023:

Private Function GetInfoFromClosedFile(ByVal wbPath As String, _
    wbName As String, wsName As String, cellRef As String) As Variant
Dim arg As String
    GetInfoFromClosedFile = ""
    If Right(wbPath, 1) <> "\" Then wbPath = wbPath & "\"
    If Dir(wbPath & "\" & wbName) = "" Then Exit Function
    arg = "'" & wbPath & "[" & wbName & "]" & _
        wsName & "'!" & Range(cellRef).Address(True, True, xlR1C1)
    On Error Resume Next
    GetInfoFromClosedFile = ExecuteExcel4Macro(arg)
End Function

Назови это:

Sub Test()
Dim path As String
Dim filename As String
Dim sheetName As String
Dim cellAddress As String

path = "c:\users\you\desktop"

filename = "file.xlsx"

sheetName = "Jun 14"

cellAddress = "A1"

Dim v As Variant  'MUST BE VARIANT SO IT CAN CONTAIN AN ERROR VALUE

v = GetInfoFromClosedFile(path, filename, sheetName, cellAddress)
If IsError(v) Then MsgBox "Sheet or filename doesn't exist!"


End Sub

Оцените статью
TechArks.Ru
Добавить комментарий