??? Office 2007新的文件格式采用了基于XML的文件格式,新的Office Open XML格式的核心使用一些XML的引用架構和一個ZIP容器,其實就是一個ZIP壓縮包。所以我們可以用壓縮軟件(如WinRAR)打開它,然后通過添加、修改其中文件的方法實現自定義功能區的目的。上面的customUI文件夾必須放入其中才能起作用,另外還必須修改其中“_rels”文件夾中的“.res”文件進行關聯,具體步驟如下:
Sub TwoSidePrint(control As IRibbonControl)? '雙面打印 ??? On Error Resume Next ??? Dim TotalPageNums As Integer, i As Integer, j As Integer ??? TotalPageNums = ExecuteExcel4Macro("Get.Document(50)") ??? If (TotalPageNums = 0) Then '如果為零,說明沒有可打印內容,退出程序 ??? MsgBox "Microsoft Excel 未發現任何可以打印的內容", 0 + 48 ????? Exit Sub ??? End If ??? If TotalPageNums = 1 Then ??????? ActiveSheet.PrintOut ??????? If Err.Number = 1004 Then ??????????? MsgBox "打印時發生錯誤,請檢查打印機設置", 0 + 48 '提示用戶發生打印錯誤 ??????? End If ??????? Exit Sub ??? End If ??? For j = Int(TotalPageNums / 2) + 1 To 1 Step -1 ??? ActiveWindow.SelectedSheets.PrintOut From:=2 * j, To:=2 * j ??? Next j ??? MsgBox "第一面打印完畢后,請將打印出的紙張全部取出," & vbCrLf & vbCrLf & "將出紙方向變為進紙方向放入紙槽中," & vbCrLf & vbCrLf & "單擊“確定”,打印另一面。", vbOKOnly, "打印另一面" ??? For i = 1 To Int(TotalPageNums / 2) + 1 ??????? ActiveWindow.SelectedSheets.PrintOut From:=2 * i - 1, To:=2 * i - 1 ??????? If Err.Number = 1004 Then ??????????? MsgBox "打印時發生錯誤,請檢查打印機設置", 0 + 48 '提示用戶發生打印錯誤 ??????????? Exit Sub ??????? End If ??? Next i ??? End Sub
Sub OddPagePrint(control As IRibbonControl)? '打印奇數頁 ??? On Error Resume Next ??? Dim TotalPageNums, i As Integer ??? TotalPageNums = ExecuteExcel4Macro("Get.Document(50)") ??? If (TotalPageNums = 0) Then '如果為零,說明沒有可打印內容,退出程序 ??????? MsgBox "Microsoft Excel 未發現任何可以打印的內容", 0 + 48 ??????? Exit Sub ??? End If ??? For i = 1 To Int(TotalPageNums / 2) + 1 ??????? ActiveWindow.SelectedSheets.PrintOut From:=2 * i - 1, To:=2 * i - 1 ??????? If Err.Number = 1004 Then ??????????? MsgBox "打印時發生錯誤,請檢查打印機設置", 0 + 48 '提示用戶發生打印錯誤 ??????????? Exit Sub ??????? End If ??? Next i End Sub Sub EvenPagePrint(control As IRibbonControl)? '打印偶數頁 ??? On Error Resume Next ??? Dim TotalPageNums As Integer, i As Integer ??? TotalPageNums = ExecuteExcel4Macro("Get.Document(50)") ??? If TotalPageNums = 0 Then '如果為零,說明沒有可打印內容,退出程序 ??????? MsgBox "Microsoft Excel 未發現任何可以打印的內容", 0 + 48 ??????? Exit Sub ??? End If ??? If TotalPageNums = 1 Then ??????? MsgBox ("只有第一頁!!!") ??????? End ??? End If ??? For i = 1 To Int(TotalPageNums / 2) + 1 ??????? ActiveWindow.SelectedSheets.PrintOut From:=2 * i, To:=2 * i ??????? If Err.Number = 1004 Then ??????????? MsgBox "打印時發生錯誤,請檢查打印機設置", 0 + 48 '提示用戶發生打印錯誤 ??????????? Exit Sub ??????? End If ??? Next i End Sub Sub CurrentPagePrint(control As IRibbonControl) ??? On Error Resume Next ??? Dim m As Integer, n As Integer ??? Dim vPageBreaksCount As Integer, hPageBreaksCount As Integer ??? Dim NumPage As Integer, TotalPages As Integer ??? TotalPages = ExecuteExcel4Macro("Get.Document(50)")? '總的打印頁數 ??? If TotalPages = 0 Then ?????? MsgBox "Microsoft Excel 未發現任何可以打印的內容", 0 + 48 ?????? Exit Sub ??? End If ??? hPageBreaksCount = ActiveSheet.HPageBreaks.Count?? '返回水平分頁符個數 ??? vPageBreaksCount = ActiveSheet.VPageBreaks.Count?? '返回垂直分頁符個數 ??? For n = 1 To hPageBreaksCount? 'n返回當前水平分頁符的數量 ??????? If ActiveSheet.HPageBreaks(n).Location.Row > ActiveCell.Row Then Exit For ??? Next ??? For m = 1 To vPageBreaksCount? 'm返回當前垂直分頁符的數量 ?????? If ActiveSheet.VPageBreaks(m).Location.Column > ActiveCell.Column Then Exit For ??? Next ??? If ActiveSheet.PageSetup.Order = xlOverThenDown Then? '按頁面設置中的打印順序確定當前單元格所處的頁數 ??????? NumPage = (n - 1) * (vPageBreaksCount + 1) + m??? '先行后列 ??? Else ??????? NumPage = (m - 1) * (hPageBreaksCount + 1) + n??? '先列后行 ??? End If ??? ??? '判斷選定的單元格是否在打印區域中 ??? If ActiveCell.Value = "" Then? '如果選定的單元格為空 ??????? ActiveCell.Value = 1?????? '給活動單元格賦予臨時數值 ??????? If ExecuteExcel4Macro("Get.Document(50)") > TotalPages Or NumPage > TotalPages Then '如果總的打印頁數增多或單元格所處頁數大于打印頁數 ??????????? ActiveCell.Value = "" ??????????? MsgBox "選定的單元格不在打印范圍以內!" ??????????? Exit Sub ??????? Else ??????????? ActiveCell.Value = "" ??????????? ActiveSheet.PrintOut From:=NumPage, To:=NumPage, Copies:=1 ??????????? If Err.Number = 1004 Then ??????????? MsgBox "打印時發生錯誤,請檢查打印機設置", 0 + 48 '提示用戶發生打印錯誤 ??????????? Exit Sub ??????? End If ??????????? Exit Sub ??????? End If ??? Else ??????? ActiveSheet.PrintOut From:=NumPage, To:=NumPage, Copies:=1 ??????? If Err.Number = 1004 Then ??????????? MsgBox "打印時發生錯誤,請檢查打印機設置", 0 + 48 '提示用戶發生打印錯誤 ??????????? Exit Sub ??????? End If ??? End If End Sub