為什么生成的報表每行都是一樣的?
劉玉蓉
發(fā)布于2014-09-04 17:50
65
0
標簽:
全局動作,每隔10分鐘執(zhí)行一次,用wincc自帶的仿真器改變變量的值,腳本如下:
Option Explicit
Function action
Dim objExcelApp,objExcelBook,objExcelSheet
Dim tagyali1,tagyali2,tagyali3,tagyali4
Dim tagliuliang1,tagliuliang2
Dim tago2
Dim tagshijian,sheetname
Dim i,j
Dim msg
"聲明
Set tagyali1=HMIRuntime.Tags("aa1")
Set tagyali2=HMIRuntime.Tags("aa2")
Msg="ok"
sheetname="sheet1"
On Error Resume Next
Dim ExcelApp,ExcelBook
Set ExcelApp=GetObject(,"Excel.Application")
If TypeName(ExcelApp)="Application" Then
For Each ExcelBook In ExcelApp.WorkBooks
If ExcelBook.FullName="E: empeeiao.xls" Then
ExcelApp.ActiveWorkbook.Save
ExcelApp.Workbooks.Close
ExcelApp.Quit
Set ExcelApp=Nothing
Exit For
End If
Next
End If
Set objExcelApp=CreateObject("Excel.Application")
objExcelApp.Visible=True
objExcelApp.Workbooks.Open"E: empeeiao.xls"
objExcelApp.Worksheets(sheetname).Activate
"清除模版數(shù)據(jù)
With objExcelApp.Worksheets(sheetname)
For i=5 To 25
For j=1 To 8
.cells(i,j)=Null
Next
Next
For i=26 To 26
For j=1 To 7
.cells(i,j)=Null
Next
Next
End With
"實時數(shù)據(jù)寫入
tagshijian=Now
objExcelApp.Worksheets(sheetname).cells(2,2).value=tagshijian
For i=5 To 25
With objExcelApp.Worksheets(sheetname)
.cells(i,1).value=tagshijian
tagyali1.Read
.cells(i,2).value=tagyali1.value
tagyali2.Read
.cells(i,3).value=tagyali2.value
End With
Next
MsgBox
"關(guān)閉保存
Dim patch,filename
filename=CStr(Month(Now))&CStr(Day(Now))+CStr(Hour(Now))&CStr(Minute(Now))
patch="E: empee"&filename&".xls"
objExcelApp.ActiveWorkbook.SaveAs patch
objExcelApp.Workbooks.Close
objExcelApp.Quit
Set objExcelApp=Nothing
End Function
問題:第5行到第25行的數(shù)據(jù)都是一樣的,為什么不發(fā)生變化?能不能第5行采集某一時刻第1秒的值,第6行采集第2秒的值。。。?
問題補充:
我想實現(xiàn)這樣的功能:
1.每個整點對變量進行讀值,比如:10:00將變量a1讀到單元格里cells(5,1);11:00將變量a1讀到單元格里cells(6,1)。。。
2.當讀到整點00:00時進行保存,保存的文件名為當天的日期。請問該怎么改這段程序。
佳答案
把tagshijian=Now寫在循環(huán)里。
你這樣寫,tagshijian在進入循環(huán)前取得了時間值,進入循環(huán)后,tagshijian并沒變呀,當然你每次的時間都是一樣的呀。
同理,變量的值也要在循環(huán)里寫。
如果你想每秒記錄,那沒必要寫循環(huán),一個是時間不好控制,或者控制不準,再是腳本,不宜執(zhí)行時間過長。
你再創(chuàng)建一個全局動作,假設叫action1,把觸發(fā)器設置為按秒觸發(fā)。
原來的這個動作里只有判斷是不是開始記錄數(shù)據(jù)就可以,如果可以,置某變量為1,不可以時置為0,假設變量為ok。
那么action1里面
if HMIRuntime.Tags("ok") = 1 then
""獲得當前時間
‘獲得各變量的值
""寫一條數(shù)據(jù)
……
end if