Обратитесь к листу на неактивной книге - PullRequest
0 голосов
/ 30 декабря 2018

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

У меня есть следующий код:

Dim lastRow As Integer
Dim firstEmpty As Integer
Dim trackBook As Workbook
Dim trackSheet As Worksheet       

Set trackBook = Application.Workbooks.Item("Tracking Sheet.xlsx")
lastRow = Range("A" & Rows.Count).End(xlUp).Row

А теперьЯ хочу сослаться на лист на trackBook.Я попытался установить переменную:

Set trackSheet = trackBook.Worksheets("sheet1")

И я получаю ошибку времени выполнения 9: индекс за пределами допустимого диапазона.

Я также пытался сделать это без установки переменной рабочего листа:

firstEmpty = trackBook.Worksheet("sheet1").Range("A" & Rows.Count).End(xlUp).Row + 1

и я получаю ошибку времени выполнения 438. Объект не поддерживает это свойство или метод.

Что я делаю неправильно в обоих случаях, и мне следует это сделать?

Ответы [ 3 ]

0 голосов
/ 30 декабря 2018

Работа с Рабочими книгами. Открытый метод (Excel)

Пример

Option Explicit
Public Sub Example()
    Dim xlBook As Excel.Workbook
    Set xlBook = Workbooks.Open("C:\Temp\Book1.xlsm")

    Debug.Print xlBook.Sheets("Sheet1").Range("A1").Value

        xlBook.Close SaveChanges:=False
End Sub
0 голосов
/ 30 декабря 2018

Попробуйте приведенный ниже код, он немного длиннее, но имеет обработку ошибок для сценариев Workbook и Worksheet.

Dim trackBook As Workbook
Dim trackSheet As Worksheet
Dim lastRow As Long, firstEmpty As Long


' set the workbook object (if workbook is already open)
On Error Resume Next
Set trackBook = Workbooks("Tracking Sheet.xlsx")
On Error GoTo 0
If trackBook Is Nothing Then ' workbook is not open >> open it
    trackBook = Workbooks.Open(Filename:="C:\YourEntirePath\Tracking Sheet.xlsx")
End If

' set the worksheet object
On Error Resume Next
Set trackSheet = trackBook.Worksheets("sheet1")
On Error GoTo 0
If trackSheet Is Nothing Then
    MsgBox "Worksheet 'sheet1' doesn't exists in workbook, check sheet's name", vbCritical, "Worksheet Name Error"
    Exit Sub
End If

With trackSheet
    firstEmpty = .Cells(.Rows.Count, "A").End(xlUp).Row + 1 ' get first empty row in column A
End With
0 голосов
/ 30 декабря 2018

Этот синтаксис правильный:

Set trackSheet = trackBook.Worksheets("sheet1")

, а ошибка нижнего индекса вне допустимого диапазона указывает на то, что рассматриваемая книга не содержит лист с именем "sheet1".

Этот синтаксис неверный:

firstEmpty = trackBook.Worksheet("sheet1").Range...

и сообщение об ошибке указывает, что объект trackBook не содержит свойства или метода Worksheet (должно быть во множественном числе: Worksheets).

Я бызапустите под отладчиком, разбейте строку Set trackSheet = trackBook.Worksheets("sheet1") и проверьте свойство Worksheets в окне Watch.В частности, изучите названия каждого листа.

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