quote:以下是引用虚心+学习在2009-03-09 22:00:54的发言:
月报的画面:
在画面中加入2个输入输出与分别填入年份和月份,再加入一个按钮,按钮文本:“导出到EXCEL”,代码如下:
Dim objExcelApp
Dim i,n,tagstr
Dim writeRiQi,ksrq,jsrq,max
Dim baobiao,jls,tabname
Dim blm,sj,zhi
Dim ReportYear,ReportMonth
Dim rb(17,31) '17表示18列数据 31表示31天即31行
Dim TagNameSerial,TagNameArray
'欲显示在EXCEL中的变量名序列
TagNameSerial="AI_HY1_LGh;AI_HY2_LGh;AI_GF1_LGh;AI_GF2_LGh;AI_LF1_LGh;AI_LF2_LGh;AI_BY1_LGh;AI_GZ1_LGh;AI_RL1_LGh;AI_RL2_LGh;AI_SH1_LGh;AI_SH2_LGh;AI_SC1_LGh"
TagNameArray=Split(TagNameSerial,";")
max=UBound(TagNameArray)
' For i=0 To 17
' For n=0 To 23
' rb(i,n)="-"
' Next
' Next
ReportYear=GetTag("ReportYear")
ReportMonth=GetTag("ReportMonth")
db_open
tabname="UA#ZDGD"
'23点即为当天保存的累计值,可以配合整点归档保存脚本,将保存时间调整到例如23:59:59
sql="SELECT ID, Tag_name, BM, ZHI, RQ, SJ, LastAccess, Fingerprint "
sql=sql & "FROM UA#ZDGD "
sql=sql & "WHERE (YEAR(RQ) = " & ReportYear & ") And (Month(RQ) = " & ReportMonth & ") And ({ fn Hour(SJ) } = 23) "
sql=sql & "ORDER BY ID "
Set rs=CreateObject("adodb.recordset")
rs.open sql,conn,1,1
if not rs.eof and not rs.bof then
rs.MoveFirst
Do While Not rs.EOF
'sj= Hour(rs("LastAccess") )
'sj= Hour(rs("sj") )
sj=Day(rs("RQ")) '取day值
blm=rs("Tag_name")
zhi=rs("ZHI")
i=0
for i=0 to max
If blm=TagNameArray(i) Then
rb(i,sj)=FormatNumber(zhi,2)
End If
Next
rs.movenext
loop
End If
Set objExcelApp = CreateObject("Excel.Application")
objExcelApp.Visible = True
objExcelApp.Workbooks.Open "F:\india\wincc\MonthReport.xls"
For i=0 To 17
For n=0 To 31
objExcelApp.Cells(n+4, 2+i).Value = rb(i,n)
Next
Next
'特殊单元格赋值
objExcelApp.Cells(1, 2).Value = ReportYear & "Year"
objExcelApp.Cells(1, 3).Value = ReportMonth & "Month"
objExcelApp.Cells(1, 13).Value = Now
'objExcelApp.Cells(1, 5).Value = WeekdayRturn(Weekday(ksrq))
' objExcelApp.Cells(32, 1).Value = tank_A_kg
' objExcelApp.Cells(32, 2).Value = tank_A_Q
' objExcelApp.Cells(32, 3).Value = tank_B_kg
' objExcelApp.Cells(32, 4).Value = tank_B_Q
' objExcelApp.ActiveWorkbook.Save
在这里需要说明一下,这个项目主要是做配料的流量累计,我的思路是每天的0点清除当日的累计量,所以报表是按照这个思路来做的,月报的累计量是取每天的23点的那个值。