工作表方法激活和复制不执行任何操作

时间:2019-02-15 18:00:43

标签: excel vba

我正在创建一个自定义功能区按钮启动的工作簿打印宏。在打印之前,我必须遍历一部分工作表,进行复制,进行一些格式化以及隐藏原始文件。但是,激活和复制工作表的方法无济于事,而且我没有收到错误。

功能区按钮在Modules.Module1中执行此宏代码

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

g_printWorkbook是Modules.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

基本上,底部子菜单中没有工作表方法调用(激活,复制)或被调用的函数执行任何操作。我尝试仅针对ws.Activate启用ScreenUpdating,但这也无济于事。

关于为什么我不直接从功能区按钮运行子例程的原因。这是因为vba项目受密码保护,我无法弄清楚功能区的权限。设置在beforePrint中看到的全局变量是我的解决方法。

0 个答案:

没有答案