此示例主要用到了excel引用,宏。先看下效果图:
这里用的数据库是SQL server.说一下思路:
先制作一个excel样式,如上图,我这里标题是固定的,部门和日期是动态的,列名是固定的,中间那块数据是动态的,部门考勤员名字是动态的,其他都是静态.
把样式先做好.以下图是我先做好的样式:
8,9为什么要留两行,是为了第10行的统计函数设置,合计那行是已经设置好excel公式的,如C10是Sum(C8:C9)依此类推,如果往8,9中间插入行那excel
会自动扩展第10行的公式,如原是Sum(C8:C9)那插入一行就自动变成sum(C8:C10),这个大家应该都知道.而且往8,9中间插入行他的格式是根前一行
相同的,所以就这里就设置好了动态数据区的格式了.其他几个地方也是一样.
第三行的日期我是让他引用sheet2中的A2,部门是B2,考勤员是C2
下图是Sheet2,其中sheetdate,department,oper是列名,用来向sheet2这三个字段插入记录的
效果图中的主要数据区我是放在sheet3中,以下是sheet3样式,同样是列名,以效果图中是对应的.
sheet2只有一条记录,所以直接在sheet1对应处引用即可,如何让sheet1中引用sheet3中的数据,因为sheet3中的记录是动态的,
也不知道有多少行,所以要利用宏了.写宏其实也很简单,我这里也没写多少行代码.
Sub Macro1()
''
'' Macro1 Macro
'' 宏由 XiaoBier 录制,时间: 2008-9-24
''
'' 快捷键: Ctrl+q
''
Dim i As Integer
Dim count As Integer
Dim rownum As Integer
count = Sheet3.UsedRange.Rows.count - 1 ''这里是获取sheet3中的记录行数,减掉列名首行
Sheets("Sheet1").Select ''选中sheet1
''在sheet1中的8和9行之间插入行数
For i = 3 To count Step 1
Sheet1.Range("A9").Select
Selection.EntireRow.Insert
Next i
rownum = 1
''将sheet1中数据行引用sheet3中的数据
For i = 8 To count + 7 Step 1
Range("A" & i) = rownum
Range("B" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Sheet3!R[-6]C[-1],"""")"
Range("C" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Value(Sheet3!R[-6]C[-1]),"""")"
Range("D" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Value(Sheet3!R[-6]C[-1]),"""")"
Range("E" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Value(Sheet3!R[-6]C[-1]),"""")"
Range("F" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Value(Sheet3!R[-6]C[-1]),"""")"
Range("G" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Value(Sheet3!R[-6]C[-1]),"""")"
Range("H" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Value(Sheet3!R[-6]C[-1]),"""")"
Range("I" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Value(Sheet3!R[-6]C[-1]),"""")"
Range("J" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Value(Sheet3!R[-6]C[-1]),"""")"
Range("K" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Value(Sheet3!R[-6]C[-1]),"""")"
Range("L" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Value(Sheet3!R[-6]C[-1]),"""")"
Range("M" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Value(Sheet3!R[-6]C[-1]),"""")"
Range("N" & i).FormulaR1C1 = "=IF(Sheet3!R[-6]C[-1]>0,Value(Sheet3!R[-6]C[-1]),"""")"
Range("O" & i) = Null
rownum = rownum + 1
Next i
End Sub
''这个子程序让一打开excel就自动调用宏
Sub auto_open()
Call Macro1
End Sub
|