
可能大家没有注意到,我表头上面的档案号可能不一样啊~而且还有一个问题就是,假如这是新的一档,就要重新开头,也就是要另起一页呀,所以上面必须补入空行!这个空行的行数不确定啊,但是只要补足一页就够了,不知道有没有合适的计算方法啊!如有合适办法,可以加分!!!
也许许多人没看到,这是个动态表头。而且有这种需求的人都是只用于打印,因为通常管理档案的表格,没人会把档案号放在个位置,即占地方又不方便查找。所以,这个表只能用于打印。
楼主, 这个前段时间帮一个朋友解决类似问题, 是个工资台帐。它的表头会在打印每一页时会根据当前页的表内容实现动态变化,如果您需要类似操作,请把数据样品(别太多,几行则可)发我邮箱cells8@163.com吧
=========================================================================
就楼主的具体问题,下面实现动态表头并执地打印的是VBA代码:
Sub PrintTab()
Dim i As Long
Dim cs As Single
Dim p As String
Dim arr
cs = 0
p = Left(Sheet2.Cells(2, 1), 18)
Sheet1.Cells(4, 2).Resize(44, 3).ClearContents
For i = 2 To Sheet2.Range("A65536").End(xlUp).Row
arr = Sheet2.Cells(i, 2).Resize(1, 3)
Sheet1.Cells(cs + 4, 2).Resize(1, 3) = arr
cs = cs + 1
If Left(Sheet2.Cells(i + 1, 1), 18) <> p And i + 1 <= c Then
Sheet1.Cells(2, 3) = p
Sheet1.PrintOut From:=1, To:=1
cs = 0
p = Left(Sheet2.Cells(i + 1, 1), 18)
键橘 Sheet1.Cells(4, 2).Resize(44, 3).ClearContents
End If
空和 If cs > 43 Then
Sheet1.Cells(2, 3) = p
Sheet1.PrintOut From:=1, To:=1
cs = 0
Sheet1.Cells(4, 2).Resize(44, 3).ClearContents
End If
Next
End Sub
-------------------------------------------------------------------------------
实现原理: 一个数据表,一个模板表. 模板表上只有一页。 把数据从数据表上依次装载到模板表. 装满一页或档案号更换前, 修改表头并对模板表执行打印。 然后清空模板表继续装数据表数据,直接所有数据装载到模板表并执行打印动作。
=====================================================================
给 提问者 的意见:
因为您有几万条的数据,手工去完成这些打印操作会非常麻烦,所以您的问题我是特别认识对待的。 5月4日晚上您把文件样品交给我,我连夜就帮你写的程序代码,同时还进行了打印测试,以确保代码执行的准确性。 然后,自从把文件发给你之后,您就再沓无音信。刚看过你的个人中心,6小时前,你还在线。
我不得不在此提点儿意见,这也算是代表所有答友们给提问者的一点意见:
1. 如果我们的回答,没有解决您的问题,希望能积极联系,以便快速解斗亮盯决问题。
2. 如果我们的回答有幸解决了您的问题,也希望尽快给最佳答案。一这是对我们付出劳动最好的肯定,二是让有同类问题的朋友们尽快看到正确答案。
3. 我觉着提问者来知道提出关心的问题,有责任就答友们的回答及时沟通,正确答案及时认定。而且,我认为“我的问题解决了”就放任提问自生自灭,是对积极解答您问题人的一种极不尊重。
(贴主,因为这个提问还没结束,上边的话不代表是说您,我说了是代表所有答友们给提问者的一点意见)
======================================================================
5月9日晚收到贴主的答复,再复本贴:
需要把数据生成具体每一张表格,放在一个工作表。并且表格与表格间有分页
追加程序代码CreateTAB如下:
Sub CreateTab()
Dim i, c, k As Long
Dim cs As Single
Dim p As String
Dim arr
c = Sheet2.Range("A65536").End(xlUp).Row
cs = 0
k = 1
p = Left(Sheet2.Cells(2, 1), 18)
Application.ScreenUpdating = False
Sheet1.Cells(4, 2).Resize(44, 3).ClearContents
Sheet4.UsedRange.EntireRow.Delete
For i = 2 To c
arr = Sheet2.Cells(i, 2).Resize(1, 3)
Sheet1.Cells(cs + 4, 2).Resize(1, 3) = arr
cs = cs + 1
If Left(Sheet2.Cells(i + 1, 1), 18) <> p And i + 1 <= c Then
Sheet1.Cells(2, 3) = "档案号:" & p
'Sheet1.PrintOut From:=1, To:=1
Sheet1.[B1].Resize(47, 3).Copy Sheet4.Cells(k, 1)
k = k + 48
Sheet4.Cells(k, 1).PageBreak = xlPageBreakManual
cs = 0
p = Left(Sheet2.Cells(i + 1, 1), 18)
Sheet1.Cells(4, 2).Resize(44, 3).ClearContents
End If
If cs > 43 Then
Sheet1.Cells(2, 3) = "档案号:" & p
'Sheet1.PrintOut From:=1, To:=1
Sheet1.[B1].Resize(47, 3).Copy Sheet4.Cells(k, 1)
k = k + 48
Sheet4.Cells(k, 1).PageBreak = xlPageBreakManual
cs = 0
Sheet1.Cells(4, 2).Resize(44, 3).ClearContents
End If
Next
Application.ScreenUpdating = ture
End Sub
经本人测试,上述在03版上执行没有问题.
哎……楼上的告销亮诸位大哥哥大姐姐啊~~~~~~~~~~~~
没有看懂提问者的意思就不要乱说话嘛………………
楼猪:这个问题偶来回答!!
我想,你的意思是在固定的列输入小数点是吧???
方法很简单:
选中你要输入小数的的那个列的列号,然后,依次点击:
数据==》有效性
在弹出的对话框里头,最后一个标签:是“输入法模式”。
将里面的输入法模式改成“关闭(英文模式)”
好了,你现在试试?
在其它的列输入法自动被打开,而当你用TAB、方向键等移动到袜宽这个列的时候,
输入法会被自动关闭,这个时候输斗戚入小数,嘿嘿……哇卡!!!!
如果为了打印,可以设置第返散一页上面自动加表头,方法为,文件,页面设置选项卡中,工作表,光标定位在项端标题行右边框中,埋祥到工作表中点选要放在第一行行号,弯世搏确定,那打印时就会自动插入表头了。
你先在表头前插入一行,然后在页面设置的对话框里,点信谨击工作表,点击顶端标题,出来对话框之后,在工作表上选取明戚表头前的两列,就可以了滑槐基。
如楼上所说的方法在打印时指定标题液族行即可樱埋租。对脊兆于你所说的要加入空白行以补满一页,其实很简单,只有最后一页会出现下面有空白的现象,前面的n页的下面绝对不可能出现空白区域,因此,你只需先打印预览,然后切换到最后一页,根据页面虚线所框住的区域,将最后一页最下面空白区域的单元格的框线设置为实线即可。