儿童漂移车玩法:excel最难问题!

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/08 07:59:31
有一张成表a为编号,f为函数f*=sum(d*-e*1)
a b c d e f
1 1 1 1 1 0
2 2 2 2 2 0
3 3 4 5 1 4
4 0
5 0
请问,如何通过vba自动检测整张表的数据,使有数据的表自动设为区域打印并自动打印?如f4以后无数据时值都为0,怎样才能不用手动打印f3以上的数据?(我的原意是编一个宏,自动设置好打印区域.主要是单位有人不会电脑操作,所以想放个宏在表中实现自动设置有数据的打印区域)

2.当一张表在打印预览时只有打印纸的一半不到时,如何设置打印机或编vba使打印机同时在一张纸上打印两份一样的表?3份时?4份?

3.最重要一个问题:请问怎么在excel中实现控件随页面移动而移动?当数据过多时,处理完数据后要拉到文件头才能点控件运行.还有,如何使第一行的固定?跟控件一样的道理!

先回答最重要的一个问题, 即Q3,

方法一: 假设第一行为标题行, 且需固定, 点击A2单元格>>菜单:窗口>>冻结窗格. 你可以把控件放在第一行里, 这样, 在向下卷动时, 控件一直可以看到.只要行高合适就行.

方法二: 这个方法则很专业, 在模块中插入下列代码,
保存后重新打开即可, 一并包括Q1:
-------------------------------------------------------
' 启动时自动生成个性化打印工具按钮
Sub Auto_Open()
Dim myControl As CommandBarButton
Dim strTitle As String ' 自定义工具栏标题
Dim strCaption As String ' 按钮标题

strTitle = "我的表格"
strCaption = "定制打印"

' 不管自定义工具按钮存在与否
' 先删除之以利正确创建
On Error Resume Next
Application.CommandBars(strTitle).Delete

' 创建自定义工具栏及按钮
Application.CommandBars.Add(Name:=strTitle, Position:=msoBarFloating, Temporary:=True).Visible = True
Set myControl = Application.CommandBars(strTitle).Controls.Add(Type:=msoControlButton, ID:=2950, Before:=1, Temporary:=True)

With myControl
.Caption = strCaption
.Style = msoButtonIconAndCaption
.OnAction = "DoMyPrint" ' 点击这个按钮时运行 DoMyPrint 过程
.TooltipText = "按指定要求打印."
End With

End Sub

Sub DoMyPrint()
Dim rngArea As Range

Set rngArea = Cells.SpecialCells(xlCellTypeConstants) ' 数据区域集合

For I = 1 To rngArea.Areas.Count
rngArea.Areas(I).PrintPreview ' 预览打印内容, 实际打印时改为 PrintOut
Next
End Sub

Sub Q2()
' 假设原数据在 SHEET1 表中, SHEET2 表为空, 本案借用其生成组合打印页

Dim rngArea As Range
Dim rng2BePrint As Range
Dim iPrintableRows As Integer
Dim iPages As Integer

iPrintableRows = 45 ' 预设每页可打印的行数, 请按需要修改

Set rngArea = Sheet1.Cells.SpecialCells(xlCellTypeConstants) ' 数据区域集合

For I = 1 To rngArea.Areas.Count

Set rng2BePrint = rngArea.Areas(I)

' 该数据区域可打印几页?
iPages = Int(iPrintableRows / rng2BePrint.Rows.Count)

If iPages <= 2 Then
' 该数据区域有满一页, 直接打印
rng2BePrint.PrintPreview ' 预览打印内容, 实际打印时改为 PrintOut
Else

' 多页组合打印
With Sheet2
.Cells.ClearContents ' 清除Sheet2中的原有数据
rng2BePrint.Copy .Range("A1")
For J = 1 To iPages - 1
rng2BePrint.Copy .Range("A1").End(xlDown).Offset(1, 0) ' 复制 N 份到SHEET2
Next

.Cells.SpecialCells(xlCellTypeConstants).PrintPreview ' 预览 SHEET2 打印内容, 实际打印时改为 PrintOut
End With

End If

Next
End Sub