Вызов Sub в пределах Sub в Outlook - сбой метода автофильтрации класса Range - PullRequest
0 голосов
/ 17 мая 2018

Код ниже вызывает подпрограмму (макрос) в другом подпрограмме.

При вызове второго Sub "Universal_Dry_Good (лист) он работает до

sheet.Range("$B$2:$X$21200").AutoFilter Field:=1, Criteria1:="**TUN**", Operator:=xlFilterValues

"Universal_Dry_Good" прекрасно работает в Excel. Это просто, когда я вызываю его внутри другого макроса, он терпит неудачу.

Цель: при запуске Sub Cat () он открывает файл Excel, а затем запускает «Универсальный сухой товар» для указанного файла / листа Excel. Эти макросы находятся в Outlook и запускаются с входящих сообщений электронной почты.

Почему когда-то называется "Universal Dry Good", он больше не работает?

Ошибка

Ошибка метода автофильтра класса Range

Он работает независимо, также при замене другими действиями (например, Columns.Replace, Rows.Delete и т. Д.).

Sub Universal_Dry_Good(sheet)
'
' Universal_Dry_Good Macro
'
    sheet.Rows("1:3").Delete
    sheet.Rows("1:3").Delete Shift:=xlUp
    'ERROR IN THE LINE BELOW
    sheet.Range("$B$2:$X$21200").AutoFilter Field:=1, Criteria1:="**TUN**", _
        Operator:=xlFilterValues
    sheet.Range("B3:C3").Select
    sheet.Range(Selection, Selection.End(xlDown)).Select
    sheet.Range("B3:AA10000").Select
    Selection.EntireRow.Delete
    sheet.Rows("2:2").Select
    sheet.ActiveSheet.ShowAllData
    Selection.AutoFilter
End Sub

Sub Cat()
    Set xlApp = CreateObject("Excel.Application")
    xlApp.Application.Visible = True
    xlApp.Workbooks.Open "---------"
    Dim sheet As Object
    Set sheet = xlApp.Worksheets("Report 1")

    Universal_Dry_Good sheet
End Sub

1 Ответ

0 голосов
/ 18 мая 2018

Вот приведенный ниже код: Спасибо за вашу помощь @RicardoA:

Sub Universal_Dry_Good(sheet)
'
' Universal_Dry_Good Macro
'

sheet.Application.DisplayAlerts = False

sheet.Rows("1:3").Delete

sheet.Rows("1:1").Select

sheet.Range("B2:C2").Select

sheet.Range("$B$2:$X$21200").Autofilter Field:=1, Criteria1:="**TUN**"

sheet.Range("B3:C3").Select


sheet.Range("B3:AA10000").Delete
sheet.Rows("2:2").Select
sheet.ShowAllData
sheet.Cells.Autofilter


sheet.Application.DisplayAlerts = True


End Sub


Sub Pat()
Set xlApp = CreateObject("Excel.Application")
xlApp.Application.Visible = True
xlApp.Workbooks.Open "--------"
Dim sheet As Object
 Set sheet = xlApp.Worksheets("Report 1")


Universal_Dry_Good sheet

 End Sub
...