Если я запускаю макрос вручную, он работает, если я вызываю с помощью функции «вызов» или назначаю его кнопке, он не работает - PullRequest
0 голосов
/ 19 февраля 2019

Я написал макрос в VBA.В основном макрос будет искать информацию на одном листе и копировать значения (если критерии поиска имеют значение ИСТИНА) на другой лист.

Проблема:

  • Если я пойдуПосмотреть -> Макросы и выбрать макрос для запуска, он запускается и все делает правильно.

  • (вот в чем проблема) Если я затем связываю тот же макрос с кнопкой или использую «вызов» из другого макроса, он не выполняет все команды должным образом.В основном, некоторые критерии являются ИСТИННЫМИ, но макрос переходит и не копирует некоторую информацию.Ошибка постоянна, она всегда пересекает одну и ту же строку.

Я пытался запустить макрос по-разному.Это работает правильно, если я нахожусь в редакторе Visual Basic и нажимаю F5 внутри макроса.Это также хорошо работает, если я вызываю макрос в Excel, идущий в «View -> Macros» и выбираю макрос.

Когда я запускаю макрос, используя «Call» из другого макроса, или если я передаю макроснепосредственно к CommandButton, он переходит по некоторым критериям и не копирует всю информацию.

Sub CopyData_Activation()
Dim swEnblSubFct As String

    Windows("Macro_FDCT_stConstDriveWuc.xlsm").Activate
    Sheets("HowTo_ConstDrive").Select

    AuswFile = Range("B4")
    OrigDatenFile = Range("B5")
    VarNumber = Range("B6")
    FolderName = Range("B7") & "\"

    Windows(AuswFile).Activate
    Sheets("OriginalDaten").Select
    Range("A7").Select
    Selection.End(xlDown).Activate
    linha = ActiveCell.Row

    Range("A7").Select
    Selection.End(xlToRight).Select
    coluna = ActiveCell.Column

    Var = VarNumber

    Ref = 0
    ll = 3      'line for rpm
    llx = 3     'line for other parameters

    For c = 4 To coluna
        Cells(5, c).Copy
        Sheets("Auswertung_Activation").Cells(ll, 1).PasteSpecial Paste:=xlPasteValues
        Cells(4, c).Copy
        Sheets("Auswertung_Activation").Cells(ll, 2).PasteSpecial Paste:=xlPasteValues
        llx = ll
        For l = 8 To linha
            Set Ref = Cells(l, 2).Find(Var)
            If Ref Is Nothing Then Ref = 0
            If Cells(l, 1) = "Pecd_DDATA_E.rpmTranInMaxWuc_PecdDUW (0)(0)" And Cells(l, c) <> "" And Ref <> 0 Then
                Cells(l, c).Copy
                Sheets("Auswertung_Activation").Cells(ll, 3) = Ref
                Sheets("Auswertung_Activation").Cells(ll, 7).PasteSpecial Paste:=xlPasteValues
            ll = ll + 1
            End If

            If Cells(l, 1) = "Pecd_IDATA.prctAccpMaxWuc_PecdIUC (0)(0)" Then
                prct = Cells(l, c) / 100
                Sheets("Auswertung_Activation").Cells(llx, 9) = prct
            End If

            If Cells(l, 1) = "Pecd_IDATA.tmpTranOilMaxWuc_PecdIUC (0)(0)" Then
                Cells(l, c).Copy
                Sheets("Auswertung_Activation").Cells(llx, 6).PasteSpecial Paste:=xlPasteValues
            End If

            If Cells(l, 1) = "Pecd_IDATA.tmsRpmTranInMaxWuc_PecdIUC (0)(0)" Then
                Cells(l, c).Copy
                Sheets("Auswertung_Activation").Cells(llx, 8).PasteSpecial Paste:=xlPasteValues
            End If

            If Cells(l, 1) = "Pecd_IDATA.swEnblSubFct_PecdIUC (0)(0)" Then
                swEnblSubFct = Left(Cells(l, c), 8) '.Copy
                Sheets("Auswertung_Activation").Cells(llx, 4) = Right(swEnblSubFct, 1)
                Sheets("Auswertung_Activation").Cells(llx, 5) = Right(Left(swEnblSubFct, 7), 1)
            End If

            Sheets("OriginalDaten").Select

        Next l
        c = c + 1

    Next c

    If ll < 4 Then ll = 5
    Sheets("Auswertung_Activation").Select
    Range(Cells(3, 4), Cells(3, 9)).Copy
    Range(Cells(3, 4), Cells(ll - 1, 9)).PasteSpecial Paste:=xlPasteFormats
    Range("D3").Select

End Sub

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

Фактический результат заключается в том, что макрос переходит к некоторой информации и не копируется на лист назначения.(PS: как сказано выше, если я иду в «Просмотр -> Макросы» и выбираю макрос, он запускается без сбоев)

...