求excel代码: 数据重排和打印
设工作簿book1中有三个工作表sheet1,sheet2和sheet3
在sheet1中有如下排列的语文成绩,每行是一个学生的
学号 语文1 语文2
1001 78 12
1002 56 34
1003 34 56
在sheet2中有如下排列的数学成绩,每行是一个学生的
学号 数学1 数学2
1001 1 4
1002 22 55
1003 3 6
求一段VBA代码:
能把某一个学号的学号,语文1, 语文2, 数学1, 数学2分别复制到sheet3的
a1
b1 b2
c1 c2
单元格中
然后设a1:c2为可打印区域,并发出一个打印命令
比如:
如果我选中sheet1中的a3单元格,由于这个单元格中的值是'1001',我一运行这段代码,就在sheet3中形成
1002
56 34
22 55
并设这五个值为打印区域,并发命令打出来,代码最好用循环的方式,以便在以后增加学科后也能运行.
可以考虑改变工作表的名称,以便于编码
------解决方案--------------------------------------------------------
拖了好几天,今天有空花半个小时写完了
打开VBA IDE,新建一个模块,把代码复制进去
这个程序,会把结果固定输出到代码所在文档的Sheet3表单,可以任意增加成绩表单(只要不占用Sheet3就行),甚至增加文档也可以
不过程序没有对各种异常进行处理,例如操作者没有选中学号,也会打印空表单。要处理各种异常的话,代码要增加几倍
- VB code
Sub PrintSelected() ThisWorkbook.Sheets("Sheet3").Cells.ClearContents stud = Selection.Value ThisWorkbook.Sheets("Sheet3").Cells(1, 1) = stud n = 2 For Each sh In ActiveWorkbook.Sheets If sh Is ThisWorkbook.Sheets("Sheet3") Then Exit For End If For i = 2 To 65535 If sh.Cells(i, 1) = "" Then Exit For End If If sh.Cells(i, 1) = stud Then sh.Rows(i).Copy ThisWorkbook.Sheets("Sheet3").Rows(n).Insert n = n + 1 Exit For End If Next Next Application.CutCopyMode = False ThisWorkbook.Sheets("Sheet3").PrintOut Copies:=1, Collate:=TrueEnd Sub