Как я могу исправить этот макрос для работы между двумя книгами? - PullRequest
0 голосов
/ 05 февраля 2019

Мой код работает, когда я просто использую одну рабочую книгу и обмениваюсь данными между листами, но при этом я пытаюсь сослаться на диапазон ячеек на листе, который содержится в другой рабочей книге, и вывести его за пределы допустимого диапазона и ошибки, не определенные объектом.Прямо сейчас ошибка происходит в "Set pidat = Worksheets (" pidat ")

 Dim pival As Double
'Dim eom As Worksheet 'declaring pidat worksheet as variable
'Set eom = Worksheets("EOM") 'declaring eom worksheet as variable
'Set Inv_Level = Worksheets("Inv_Levels")

Dim pidat As Worksheet                       'declaring eom worksheet as variable
Set pidat = Worksheets("pidat")
Dim steve As Workbook
Set steve = Application.Workbooks("EOM Report VBA")
Dim EOMAs As Workbook
Set EOMAs = Application.Workbooks("EOMA")
Dim Inv_Level As Worksheet






'These changes allow for a dynamic range to be referenced outside of the active sheet/workbook

Dim location As String
Dim rownum As Long
Dim loopy As Long
Dim fRng As Range
Dim J As Long
Dim rn As Date
Dim last As Date
Dim rnm As Integer
Dim lastm As Integer
Dim tyear As Long
Dim K As Long



With pidat
    J = .Range("J2").Value
    rn = Now
    last = .Range("B1").Value
    rnm = month(rn)
    lastm = month(last)
    tyear = year(rn)

    If lastm < rnm Then
        .Range("B1") = (rnm & "/" & "01" & "/" & tyear & " 07:30")
        J = J + 100
        .Range("J2") = J

    End If
End With



K = J + 100

'names of workbook/sheet referenced


With steve

    rownum = .Range("E" & Rows.Count).End(xlUp).Row 'counts the number of rows in the location tag column

    For loopy = 3 To rownum                  'Data values start after row 3, loops through each row in the column

        If .Range("E" & loopy) <> "" Then

            location = .Range("E" & loopy)
            'newloc = location
            With Inv_Level

                Set fRng = .Cells.Range("A" & J, "ZZ" & K).Find(What:=location, LookIn:=xlFormulas, LookAt:=xlPart) 'eom can be any sheet you need to perform the .Find again
            End With

            If Not fRng Is Nothing Then
                fRng.Offset(0, -1) = pidat.Range("D" & loopy)
            Else: End If
            'if the search item is not found, do nothing, go to next loop
        End If




    Next loopy

End With


End Sub

1 Ответ

0 голосов
/ 05 февраля 2019

Вам необходимо указать конкретную рабочую книгу, с которой вы хотите работать.

Строка Set pidat = Worksheets("pidat") не будет выполнена, если у активной рабочей книги во время выполнения этой строки не будет рабочего листа с именем pidat.

Вот пример того, как квалифицировать рабочую книгу

Dim theWorkbook as Workbook
Set theWorkbook = Application.Workbooks("myWorkbook")

Dim pidat as Worksheet
Set pidat = theWorkbook.Worksheets("pidat")

Вы можете сделать еще один шаг и убедиться, что лист с именем pidat (or whatever) существует в квалифицированной рабочей книге, но я будуоставлю вас, чтобы узнать, как это сделать:)

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