Как добавить второй и третий макрос в модуль ThisWorkbook? - PullRequest
1 голос
/ 10 ноября 2019

У меня есть макрос в модуле «ThisWorkbook», установленный для запуска «BeforeSave». Это хорошо работает, но у меня есть два других макроса, которые мне также нужны для запуска BeforeSave. Могу ли я добавить дополнительные макросы в этот модуль?

Я создал свои макросы в разделе «стандартный» модуль, и они хорошо работают при выборе кнопки «Выполнить». Я попытался добавить «Имена макросов / модулей» в конец моего макроса «BeforeSave», который ничего не сделал, но дал мне ошибки.

    Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  Call HideRows
  Call DivAdminApproval
  Call ProjNumbrReq
End Sub

Public Sub HideRows()

'When a row begins with X in Travel Expense Codes worksheet, hide the row

  Const beginRow As Long = 3
  Const endRow As Long = 38
  Const chkCol As Long = 14

  Dim rowCnt As Long
  Dim ws As Worksheet

  Set ws = ThisWorkbook.Worksheets("Travel Expense Codes")

  For rowCnt = endRow To beginRow Step -1
       With ws.Cells(rowCnt, chkCol)
           .EntireRow.Hidden = (.Value = "X")
       End With
  Next rowCnt
  End Sub

  Public Sub ProjNumbrReq()
  'Call ProjNumbrReq
   With Worksheets("Travel Expense Voucher")
        For Each myCell In .Range("U15:U45")
            If myCell.Value > 0 And .Cells(myCell.row, "N") = "" Then
               MsgBox "Project Number must be provided on each line where reimbursement is being claimed.", vbCritical, "Important:"
               Cancel = True
               Exit Sub
            End If
        Next myCell
    End Sub

  Public Sub DivAdminApproval()
  'Call DivAdminApproval
   With Worksheets("Travel Expense Voucher")
        If Worksheets("Travel Expense Voucher").Cells("F5") = 2 Then
        For Each myCell In .Range("O15:O45")
            If myCell.Value = 0.58 Then
                MsgBox "You have selected reimbursement at the 'HIGH' mileage rate ($.58/mile).  To receive reimbursement at this rate, Division Administrator Approval is Required.", vbCritical, "Important:"
                Exit Sub
            End If
        Next myCell

End Sub

Как вы можете видеть из моего кода, ProjNumbrReq иМакросы DivAdminApproval были перечислены до End Sub, надеясь, что это вызовет их работу. Однако они не работают. Я хотел бы, чтобы эти другие макросы также запускались «BeforeSave». Пожалуйста, помогите?

1 Ответ

1 голос
/ 10 ноября 2019

что-то в этом духе, если ваши макросы отсутствуют в модуле «ThisWorkbook», убедитесь, что они определены как общедоступные (а не приватные):

Option Explicit

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  Call sMacro1
  Call sMacro2
  Call sMacro3
End Sub

Private Sub sMacro1()
  'do something
End Sub

Private Sub sMacro2()
  'do something
End Sub

Private Sub sMacro3()
  'do something
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...