按照例子我可以实现:
1、创建一个excel表,将变量归档的数据写进去
2、创建一个与IO域中输入日期为名称的excel表
但是我无法将上面两个合起来,及点击一次按钮,创建一个与当前IO域值为名称的excel表,并且将数据写在这个表中。
我现在只能创建表,然后表里面是空的。
下面是代码
Sub OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y)
Dim xlsApp
Dim sDsn
Dim sSer
Dim sCon
Dim sSql
Dim conn
Dim oRs
Dim oCom
Dim sPro
Dim m, n, s, x_f, x_n, l
Dim a, b, c
Dim TimeFrom, TimeTo
Dim patch,Day
'''''''''''''选择读取归档变量的时间区间
Set TimeFrom = HMIRuntime.Tags("DayFrom")
TimeFrom.Read
Set TimeTo = HMIRuntime.Tags("DayTo")
TimeTo.Read
''''''''''''''创建excel表路径
Day = HMIRuntime.Tags("Day").Read
patch = "e:\" & Day & ".xls"
''''''''''''''例子内容
sPro = "Provider=WinCCOLEDBProvider.1;"
sDsn = "Catalog=CC_ceepc_cs_14_01_15_06_41_10R;"
sSer = "Data Source=CEEPC-33\WINCC"
sCon = sPro + sDsn + sSer
sSql = "Tag:R,('ProcessValueArchive\氨气流量';'ProcessValueArchive\频率反馈1';'ProcessValueArchive\频率反馈2';'ProcessValueArchive\出口气压力';'ProcessValueArchive\出口水压力';'ProcessValueArchive\储罐温度';'ProcessValueArchive\储罐液位'),'" + TimeFrom.Value + "','" + TimeTo.Value + "'"
MsgBox "Open with:" & vbCr & sCon & vbCr & sSql & vbCr
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = sCon
conn.CursorLocation = 3
conn.Open
Set oRs = CreateObject("ADODB.Recordset")
Set oCom = CreateObject("ADODB.Command")
oCom.CommandType = 1
Set oCom.ActiveConnection = conn
oCom.CommandText = sSql
Set oRs = oCom.Execute
m = oRs.Fields.Count
x_f = oRs.RecordCount/7
Set xlsApp = CreateObject("Excel.Application")
'xlsApp.DisplayAlerts = True
xlsApp.Visible = True
'xlsApp.Workbooks.Open "C:\Users\Auser\Desktop\ss1.xls"
'''''''''''创建新excel表 我最担心这里有问题
xlsApp.Workbooks.Add
xlsApp.Save patch
xlsApp.Workbooks.Open patch
'xlsApp.Workbooks.Open "C:\Users\Auser\Desktop\ss1.xls"
'''''''''''''''''例子内容
If (m > 0) Then
oRs.MoveFirst
n = 0
l = 1
xlsApp.Cells(1, 1).Value = "时间"
xlsApp.Cells(1, 2).Value = "氨水流量 m3/h"
xlsApp.Cells(1, 3).Value = "频率反馈1 Hz"
xlsApp.Cells(1, 4).Value = "频率反馈2 Hz"
xlsApp.Cells(1, 5).Value = "出口气压 Mpa"
xlsApp.Cells(1, 6).Value = "出口水压 Mpa"
xlsApp.Cells(1, 7).Value = "储罐液位 m"
xlsApp.Cells(1, 8).Value = "储罐温度 ℃"
Do While Not oRs.EOF
x_n = n Mod x_f
l = Int(n / x_f)
xlsApp.Cells(x_n+2, 1).Value = oRs(1) '时间
xlsApp.Cells(x_n+2, (l+2)).Value = oRs(2) '值
n = n + 1
oRs.MoveNext
Loop
'''''''''''''''''例子内容 这里是否和上面创建表的语句有冲突
xlsApp.ActiveWorkBook.Save
xlsApp.Workbooks.Close
xlsApp.Quit
Set xlsApp = Nothing
End If
oRs.Close
Set oRs = Nothing
conn.Close
Set conn = Nothing
End Sub
最佳答案
第一:请先尝试查询一个变量的值。
第二:你要保证你的时间部分的值是正确的,也就是说做个消息框看看弹出的时间是否正确,是否真的读到了你想要的时间。
第三:wincc的变量归档的时间格式不是我们的北京时间,我没有看到你的时间转换代码,而这个代码是必须的。
第四:你创建了两个excel表格,我不知道这有什么作用,通常是创建一个模板,然后把数据写进去按照你想要的名字另存即可。
第五:在你操作电子表格的时候需要指定你要操作哪一个sheet,我再代码里没有找到。
还有两点就是不太重要的,其一你的代码写的没有顺序,应该把相同功能的代码尽量放在一起,方便查找问题。其二,我怀疑你这个代码是从技术文档上找的,不要轻易相信,因为技术文档也有可能出错。
以上内容有可能有疏漏,说错了请见谅。
VBS代码读取wincc变量归档,每天保存一个电子表格。利用控件查询显示所需日期的电子表格内容,并支持在wincc界面编辑报表,更改数据等等。每天固定24条数据,如果相应小时点数没有数据,则用#填充。
请参考优酷视频
http://v.youku.com/v_show/id_XNzA2MjY0MzEy.html
QQ1305567706 小董
提问者对于答案的评价:
谢谢,先不弄了,忙过这阵子再说
最佳答案作者回复:
好的 有需要随时联系qq2606352062即可
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc213693.html