Я хочу скопировать информацию из ячеек в M79 в PAlysis.

Моя подписка PopulateFields находится в PAlysis.

Что не так с моей ссылкой на другой файл?

Sub PopulateFields()
    Dim Mur As Workbook, TOMS As Workbook, i As Integer, LastRow As Integer, j As Integer

    Set Mur = Workbooks("S:\M\ BPM\M79.xls")
    Set TOMS = Workbooks("S:\M\BPM\PAlysis.xlsm")
    Set TOMSPos = TOMS.Worksheets("Positions")
    Set TOMSAna = TOMS.Worksheets("Analysis")
    Set MurexWs = Murex.Worksheets("BB_Overview")

    LastRow = Murex.Cells(MurexWs.Rows.Count, 1).End(xlUp).Row

    j = 3
    For i = 3 To LastRow - 1
        If Mur.MurexWs.Cells(i, 2).Value = "Bond" Then
            Mur.MurexWs.Cells(j, 6).Copy TOMS.TOMSPos.Cells(i + 1, 1)
            j = j + 1
        Else
            j = j + 2
        End If
    Next i
 End Sub

В строке Set Mur = ... я получаю

Ошибка 9: нижний индекс вне допустимого диапазона.

0
user9078057 18 Окт 2018 в 15:28

2 ответа

Лучший ответ

Я предполагаю, что вы хотите открыть книги: вы должны использовать Workbooks.open. Это открывает книгу в Excel (в основном так же, как открытие ее через Файл-> Открыть в Excel)

Set Mur = Workbooks.open("S:\M\ BPM\M79.xls")

(не уверен насчет пробела перед BPM - проверьте, не опечатка ли это.

Если ваша книга уже открыта, команда будет

Set Mur = Workbooks("M79.xls")

Это синтаксис для коллекций VBA, где вы можете получить доступ к объекту либо по (числовому) индексу, либо по его имени . имя книги в коллекции Workbooks - это имя файла, но без пути (по этой причине вы не можете открыть 2 книги с одинаковым именем, даже если они хранятся в разных папках).
Когда вы пытаетесь получить доступ к члену несуществующей коллекции, VBA выдаст ошибку времени выполнения 9.

0
FunThomas 18 Окт 2018 в 12:52

Вы можете использовать следующее, чтобы получить уже открытую книгу или открыть ее, если она не открыта.

Sub test()   
    Set mur = GetOrOpenWorkbook("S:\M\BPM\", "M79.xls")
    Set toms = GetOrOpenWorkbook("S:\M\BPM\", "PAlysis.xlsm")
End Sub

Public Function GetOrOpenWorkbook(Path As String, Filename As String) As Workbook
    'test if workbook is open
    On Error Resume Next
    Set GetOrOpenWorkbook = Workbooks(Filename)
    On Error GoTo 0

    'if not try to open it
    If GetOrOpenWorkbook Is Nothing Then
        Set GetOrOpenWorkbook = Workbooks.Open(Filename:=Path & Filename)
    End If
End Function
1
Pᴇʜ 18 Окт 2018 в 13:12