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