VBA работает в режиме отладки, но не работает в рабочей среде - PullRequest
0 голосов
/ 20 января 2020

Мой код отлично работает в режиме отладки. Я перебираю каждую строку, и она выдает именно то, что я ожидаю. Однако, когда он работает на открытом, как я хочу, он не выполняет последние 2-3 строки должным образом. Я помещаю примечание, где это останавливается в фрагменте кода ниже. Я очень любитель программирования, поэтому, пожалуйста, простите организацию и эффективность на уровне малышей. Любые и все критические замечания или предложения приветствуются, я просто понимаю это как i go.

Private Sub Workbook_Open()

'Message asks user if they want to update
Dim Answer As VbMsgBoxResult
Answer = MsgBox("Would you like to update the part HS database for your tracker?" & vbCrLf & "(It will take a hot minute)", vbYesNo + vbDefaultButton2, "Update Part DB")


'if check for running the subroutine

If Answer = vbYes Then


    ''Turn off screen updating
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False


        'Open parser
        Workbooks.Open Filename:="K:\04_Classification\Broker Templates\BrokerPartsListParser.xlsb", ReadOnly:=True

        'Setting Range Variables
        Dim RgData As Range
        Dim RgCriteria As Range
        Dim RgOutput As Range
        Set RgData = Workbooks("BrokerPartsListParser.xlsb").Worksheets("NewestIPExtract").Range("A1").CurrentRegion
        Set RgCriteria = ThisWorkbook.Worksheets("PartDBRef").Range("J1").CurrentRegion
        Set RgOutput = ThisWorkbook.Worksheets("PartDBRef").Range("A3").CurrentRegion

        'Clearing previous data
        RgOutput.Offset(1).ClearContents

        'Doing the Advanced Filter
        RgData.AdvancedFilter xlFilterCopy, RgCriteria, RgOutput







        'Check to see if ACE data needs to be pulled

        Dim ACEPull As Boolean: ACEPull = ThisWorkbook.Worksheets("ACE Data").Range("AO2")

        If ACEPull = True Then

            'setting pulled date
            ThisWorkbook.Worksheets("ACE Data").Range("AK2").Value = Date

            'Finding last row of old data set
            Dim LastRow As Long: LastRow = ThisWorkbook.Worksheets("ACE Data").Range("AA" & Rows.Count).End(xlUp).Row


            'Deleting old Data
            If IsEmpty(Range("AA2").Value) = False Then
                ThisWorkbook.Worksheets("ACE Data").Range("A2:AA" & LastRow).ClearContents
            End If


            'Setting Advanced Filter Parameters
            Set RgData = Workbooks("BrokerPartsListParser.xlsb").Worksheets("Unified ACE Data").Range("A1").CurrentRegion
            Set RgCriteria = ThisWorkbook.Worksheets("ACE Data").Range("AH1").CurrentRegion
            Set RgOutput = ThisWorkbook.Worksheets("ACE Data").Range("A1:AA1")


            'Doing the Advanced Filter
            RgData.AdvancedFilter xlFilterCopy, RgCriteria, RgOutput


''THIS IS WHERE MY CODE STOPS WORKING AS I WOULD EXPECT

            'Finding New Last Row
            LastRow = ThisWorkbook.Worksheets("ACE Data").Range("AA" & Rows.Count).End(xlUp).Row

            'Filling Formulas
            If IsEmpty(Range("AA3").Value) = False Then
            ThisWorkbook.Worksheets("ACE Data").Range("AB2:AD" & LastRow).FillDown
            End If


        End If




        ''close parser
        Workbooks("BrokerPartsListParser.xlsb").Close SaveChanges:=False




    ''Turn updating back on
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True

    ''Thank people for their patience
    MsgBox "Part DB has been updated.  Thank you for your patience :D"

    Exit Sub
Else
    Exit Sub
End If

End Sub

1 Ответ

0 голосов
/ 20 января 2020

Чтобы повторить комментарий JvdV, у вас есть неявная ссылка на диапазон. Попробуйте добавить рабочую книгу и рабочий лист, на которые ссылается оператор IsEmpty.

 'Filling Formulas
            If IsEmpty(ThisWorkbook.Worksheets("ACE Data").Range("AA3").Value) = False Then
            ThisWorkbook.Worksheets("ACE Data").Range("AB2:AD" & LastRow).FillDown
            End If

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