Excel打印控制

"打印的时候像Word一样自动分栏,可以用添加辅助表和使用INDIRECT()的办法实现:

假如你的原表是Sheet1,新建一个工作表Sheet2,把表头设置成需要的分栏形式(注意表头行数要和原表一致,保证第一行数据和原表的行号相同,只是多了几个列),现在架设你的数据从第2行开始,并且每页打印5行数据(不含表头),每页打印3栏。请在Sheet2的A2单元格(第一行数据)输入如下公式即可返回Sheet1工作表A2的数据,:
=INDIRECT(""sheet1!A""&ROW()+ROUNDDOWN((ROW()-2)/5,0)*10)
在Sheet2的B2单元格中输入如下公式可返回Sheet1中B1的数据
=INDIRECT(""sheet1!B""&ROW()+ROUNDDOWN((ROW()-2)/5,0)*10)

说明:Indirect()函数返回指定单元格内容。参数“Sheet1”指要引用的工作表的名字,“A”“B”表示要引用的列号,“-2”表示第一行数据所在行号,“5”在这里表示每页的打印数据行数(不含表头),
“10”表示下页第一个数比本页第一列最后一个行数的相差数,在这里每页打印5行,每页打印3列,所以这个数就等于3*5-5=10。

好了,A1、B1单元格(其实就是第一栏的数据)好了,现在弄第二栏的数据,即C、D列数据。在C1单元格输入:
=INDIRECT(""sheet1!A""&ROW()+ROUNDDOWN((ROW()-2)/5,0)*10+5)
和A1相比,只是在后面加了个5,因为这是第二栏,比第一栏多了5个数。
在D1中输入:=INDIRECT(""sheet1!B""&ROW()+ROUNDDOWN((ROW()-2)/5,0)*10+5)
和B1相比,也只是加了个5,和C1相比,只是取了第B列数据。

同理,很容易写出E1和F1的公式:
=INDIRECT(""sheet1!A""&ROW()+ROUNDDOWN((ROW()-2)/5,0)*10+10)
=INDIRECT(""sheet1!B""&ROW()+ROUNDDOWN((ROW()-2)/5,0)*10+10)

最后一步,请选中A1到F1单元格,用填充柄向下复制即可。" 

 

 

另外,两个宏:

Sub PrintDoubleSided()
    Dim Totalpages As Long
    Dim pg As Long
    Dim oddoreven As Integer
    On Error GoTo enditt
    Totalpages = ExecuteExcel4Macro("Get.Document(50)")
    oddoreven = InputBox("Enter 1 for Odd, 2 for Even")
    For pg = oddoreven To Totalpages Step 2
        ActiveWindow.SelectedSheets.PrintOut From:=pg, To:=pg
    Next pg
enditt:
End Sub

Sub 手动双面打印()
    Dim suiping As Integer
    Dim cuizi As Integer
    Dim zys As Integer
    Dim myBottonNum As Integer
    Dim myPrompt As String
    myPrompt = "请将出纸器中已打印好一面的纸取出并将其放回到送纸器中,然后按下""确定"",继续打印"
    'ActiveSheet.UsedRange.Cells(ActiveSheet.UsedRange.Cells.Count).Select
    'suiping = ActiveSheet.HPageBreaks.Count        '统计当前工作表水平分页符
    'cuizi = ActiveSheet.VPageBreaks.Count          '统计当前工作表垂直分页符
    'zys = (suiping + 1) * (cuizi + 1)              '统计总页数
    zys = ExecuteExcel4Macro("Get.Document(50)")    '发现上面统计的总页数不正确,改用此处
    MsgBox "总页数为" & zys                         '显示总页数
    For i = 1 To zys Step 2                         '打印奇数页
        ActiveSheet.PrintOut From:=i, To:=i
    Next i
    myBottonNum = MsgBox(myPrompt, vbYesNo)         '提示取出纸张,继续打印
    If myBottonNum = vbYes Then
        For j = 2 To zys Step 2                     '打印偶数页
            ActiveSheet.PrintOut From:=j, To:=j
        Next j
    End If
End Sub

posted @ 2008-08-07 18:44  网事  阅读(187)  评论(0编辑  收藏  举报