Методы рабочего листа Activate и Copy ничего не делают - PullRequest
0 голосов
/ 15 февраля 2019

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

Кнопка ленты выполняет этот код макроса в модулях. Модуль 1

Sub bmPrintWB(control As IRibbonControl)
    g_printWorkbook = True
    ActiveWorkbook.PrintOut
    g_printWorkbook = False
End Sub

g_printWorkbook - глобальное логическое значение в модулях.Module2

Это вызывает ThisWorkbook.BeforePrint

Private Sub Workbook_BeforePrint(Cancel As Boolean)
On Error GoTo ERR_HANDLE

If g_printWorkbook Then
    bmPrintWorkbookWithSBS
    Exit Sub
End If

bmPrintWorkbookWithSBS находится в Modules.Module1

Sub bmPrintWorkbookWithSBS()
    Dim ws As Worksheet
    Dim tmpWs As Worksheet
    Dim sbsWorksheets As Collection
    Dim sbsTempWorksheets As Collection
    Dim tmpNumber As Integer
    Dim bAllowSBSPrint As Boolean
    Dim iResult As Integer
    Dim bCalc As Boolean

    Set sbsWorksheets = New Collection
    Set sbsTempWorksheets = New Collection


    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    If Application.Calculation = xlCalculationAutomatic Then
        bCalc = True
    Else
        bCalc = False
    End If

    If bCalc Then Application.Calculation = xlCalculationManual


    For Each ws In ThisWorkbook.Worksheets
        If ws.Visible = xlSheetVisible And IsSheetSideBySide(ws.Name) Then
            sbsWorksheets.Add ws
        End If
    Next ws

    tmpNumber = 1
    For Each ws In sbsWorksheets
    ws.Activate

    If Not ActiveSheet.Name = ws.Name Then
        Exit Sub
    End If

    'Set up the global names
    iResult = SetGlobalWorksheetNames()
    iResult = SetGlobalCallerBasedOnSheetName(ws.Name)
    Set tmpWs = CreateSBSTemp(ws, tmpNumber)
    If Not tmpWs Is Nothing Then
        sbsTempWorksheets.Add tmpWs
        ws.Visible = xlSheetHidden
        tmpNumber = tmpNumber + 1
    End If

    Next ws

    g_ribbonPrinting = True
    Application.ActiveWorkbook.PrintOut
    g_ribbonPrinting = False

    For Each ws In sbsWorksheets
        ws.Visible = xlSheetVisible
    Next ws
    For Each ws In sbsTempWorksheets
       ws.Delete
    Next ws

    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    If bCalc Then Application.Calculation = xlCalculationAutomatic

End Sub

В основном нет вызовов метода листа (Activate, Copy) внизуsub или вызываемая функция делают что-либо.Я попытался включить ScreenUpdating только для ws.Activate, и это тоже не помогло.

Что касается того, почему я не просто запускаю подпрограмму непосредственно с кнопки ленты.Дело в том, что проект vba защищен паролем, и я не мог понять, как предоставить доступ к ленте.Установка глобальной переменной, которую видели в beforePrint, была моим обходным решением.

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