Chào bạn!!!
bạn có thể cho 1 code ngắn ví dụ được không?
chỉ cần mỗi lần mình nhấn là du liệu từ wincc xuất ra excel kèm theo ngày giờ nữa được không?
Printable View
code này thích hợp cho xuất báo cáo dạng phiếu ,biểu mẩu thôi
còn vấn đề bạn đưa ra là xuất dạng data thì code này không đáp ứng được
phải dùng code khác
Bác nào có code xuất dữ liệu dạng data theo thời gian cho em xin, access cũng được mà excel thì tốt quá!
hic, thì xuất được exell rồi thì cải tiến nó chút xíu đi bạn, ^_^ đợi chờ người khác làm gì, ví dụ đơn giản nhất là bạn lưu lại vị trí cell vừa xuất vào biến nhớ nào đó, lần sau trước khi ghi thì đọc cái vị trí đó lên rồi dịch xuống 1 ô là dc, còn không thì trước khi ghi đọc xem nó có trống không, nếu trống thì ghi vào, nếu ko thì xuống 1 dòng.
HJHJ!!!
TẠI VB EM CÒN GÀ QUÁ!!!
CHƯA BIẾT MÃ CODE THÌ LAM SAO VIẾT CHƯƠNG TRÌNH ĐƯỢC. ACE THÔNG CẢM
VỚI LẠI THỜI GIAN KHÔNG CÒN NHIỀU NÊN KHÔNG THỂ XEM HẾT TÀI LIỆU ĐƯỢC. ACE NÀO CÓ CODE SẴN THÌ UP LÊN. KHÔNG THÌ BÀY CÁCH HOẶC CHO EM MÃ LÊNH ĐỂ EM TẬP TRUNG VÀO TRÁNH TRƯỜNG HỢP COI LAN MAN.
CODE "Sub OnClick(ByVal Item)
Dim objExcelApp
Set objExcelApp = CreateObject("EXCEL.Application")
objExcelApp.Visible = True
objExcelApp.Workbooks.Open "D:\Study\DO AN TOT NGHIEP\NICE\EXCEL\TEST VER2-E.xlsx"
Set objExcelApp = CreateObject("EXCEL.Application")
objExcelApp.Visible = True
objExcelApp.Workbooks.Open "D:\Study\DO AN TOT NGHIEP\NICE\EXCEL\TEST VER2-E.xlsx"
objExcelApp.Cells(4, 2).Value = ScreenItems("I/O Field1").OutputValue
objExcelApp.Cells(5, 2).Value = ScreenItems("I/O Field2").OutputValue
objExcelApp.Cells(6, 2).Value = ScreenItems("I/O Field3").OutputValue
objExcelApp.Cells(7, 2).Value = Now
objExcelApp.ActiveWorkbook.Save
End Sub"
ĐÃ XUẤT RA ĐƯỢC THỜI GIAN NHƯNG LÚC ĐƯỢC LÚC KHÔNG NÊN KHÔNG BIẾT CÓ BỊ LỖI HAY CÒN THIẾU CHỖ NÀO KO???MONG MẤY PRO CHỈ GIÚP.
CODE TRÊN CÓ MỖI CHỮ "NOW" MÀ EM MẤT HẾT CẢ NGÀY CHỦ NHẬT. HIXHIX.
P/S ACE CÓ CODE NHẢY DÒNG EXCEL THÌ UP LUÔN NHÉ!!!
code nhảy dòng ở chữ cells chứ đâu ^_^
hic hic, nhảy dòng là nhảy qua cell ở dòng khác đúng ko, thì nhập giá trị khác cho cell ^_^
đúng rồi anh! nhưng để 1 lần nhấn rồi xuất ra là mỗi lần xuống dòng!
vậy mình so sánh nếu ô trống thì mình cho xuất còn nếu ô có dữ liệu thì mình cho nhảy xuống ô trống tiếp theo.
Vấn đề là so sánh với ô trống hay ô có dữ liệu thì code nó như thế nào. nếu anh pro VB thì giúp em với. chứ ý tưởng là 1 chuyện còn viết code theo ý tưởng thì em bó tay. Anh cho em nếu ô có hoặc không có dữ liệu thì code như thế nào???
ví dụ ( có kiến thức hạn hẹp về VB nên không biết có đúng ko) như: không có dữ liệu thì mình để so sánh "NULL" còn có dữ liệu thì sao? so sánh với gi???
cám ơn anh rất nhiều!!!
hic pó tay với bạn, thế bạn phân biệt con gái với con trai thế nào, con gái thì có đặc điểm xyz nào đó, còn con trai thì không phải là con gái (tất nhiên là ko kể giới tính thứ 3 nhé )
Hơi vô duyên tí vì không phải hỏi mình!!! nhưng tại mình đang tìm hiểu về cái này nên trả lời luôn bạn thử nhé nếu không được thì bỏ qua cho vì mình mới thử trên máy của mình thôi còn các phiên bản khác mình không chắc lam (@.@)
Xuất ngày "Date"
Xuất thời gian "Time"
xuất ngày và thời gian hiện tại "Now"
vd: objExcelApp.Cells(4, 3).Value = Now
Hj! về cái này thì chưa thử!
Bạn có thể xem các lệnh hàm VB rồi tự viết code theo yêu cầu của bạn! Mình ko phải Pro nên chỉ giúp được tới đây thôi!
Về ý tưởng thì như thế này! Bạn thử dùng vòng lặp, rồi so sánh thời gian hiện tại với thời gian mà bạn mong muốn rồi cho xuất dữ liệu ra vị trí ô Excel mà bạn cần.
Vì giờ mình đang chuẩn bị bảo vệ DA nên ko thể giúp bạn được! @.@ Phải cuối tháng 1 mới có thể tìm hiểu thêm!hjhj!
P/s Chữ thanks nằm góc trái màn hình đó bạn!
Ví dụ: Bạn khai báo Excel như sau
Dim MsExcel
Set MsExcel = CreateObject("Excel.Application")
Thì để chọn cell thì có cú pháp: MsExcel.cells(2,3)
với 2 là số hàng, 3 là số cột, tức hàng 2 cột 3.
Ví dụ bạn muốn lưu giá trị 100 vào hàng 3 cột 1 thi: MsExcel.cells(2,3) = 100
Tương tự bạn có thể phát triển bằng cách dùng các lệnh như if ... then, vòng lặp Do ... Loop While, v.vvvv
Chúc bạn cuối tuần vui vẻ.
Bác nào có project xuất dữ liệu dạng thống kê theo ngày tháng thì up lên cho em xin với, đang cần gấp quá!
code của WinCC thì chưa làm, nhưng dùng trong VB6.0 cũng tựa tựa vậy thôi.
Bạn tham khảo, chỉ cần đổi lại đường link dẫn file excel.
Đính kèm 599
Code trong Xuat Du Lieu 1
Dim objExcelApp
Static i
i = i + 1
Set objExcelApp = CreateObject("Excel.Application")
objExcelApp.Visible = True
objExcelApp.Workbooks.Open "C:\Users\thiquocvinh\Desktop\VB_1\Vinh_Vb1.xl sx"
'lay ngay thang nam
objExcelApp.cells(i + 1, 1).Value = Date
'lay gio phut giay
objExcelApp.cells(i + 1, 2).Value = Time
'lay du lieu tu man hinh 1
objExcelApp.cells(i + 1, 3).Value = mh
objExcelApp.ActiveWorkbook.Save
objExcelApp.Workbooks.Close
objExcelApp.Quit
Set objExcelApp = Nothing
^_^ vb trong wincc ko phải là vb đâu, nó chỉ là vbs thôi, nó không có kiểu static như vb6
Dim objExcelApp
Set objExcelApp = CreateObject("Excel.Application")
objExcelApp.Visible = True
'ExcelExample.xls is to create before executing this procedure.
'Replace with the real path of the file ExcelExample.xls.
objExcelApp.Workbooks.Open "D:\baocao.xls "
objExcelApp.Cells(2, 2).Value = SmartTags(" volt")
objExcelApp.Cells(2,3).Value = SmartTags(" ampe")
objExcelApp.Cells(2, 4).Value = SmartTags(" luu_luong")
objExcelApp.ActiveWorkbook.SaveAs "D:\ bao cao + hàm ngày +hàm giờ là ok"
objExcelApp.Workbooks.Close
objExcelApp.Quit
Set objExcelApp = Nothing
code trên test chạy ok với wincc flexible ,wincc chưa thử ,nhưng mình thấy phần trên code cũng giống hệt wincc thôi
bạn phải tạo 1 bít xung từ phần mềm hay từ wincc cũng ok
cứ 1 phút hoặc 1 giờ... thì gọi code một lần ,cứ 1 lần gọi thì thì wincc ghi giá trị xuống exel(kiểu này thích hợp xuất theo phiếu báo cáo)
còn muốn xuất kiểu data thì thêm chút mắm muối vào code trên cứ 1 lần bít xung on thì số liệu từ wincc sẻ ghi xuống 1 hàng ngang tương ứng
và cứ thế tạo xung 24 lần (1 lần là tương ứng 1 giờ )thì có số liệu trong bảng ghi xuống exel báo cáo đầy đủ cả 24 hàng tương ứng 1 giờ
còn bạn thấy dòng code "D:\ bao cao + hàm ngày +hàm giờ là ok"
nói lên là tên file lưu trử sẻ bằng ngày tháng năm .nếu qua ngày hôm sau sẻ tự động có 1 file khác tương ứng thôi
chúc bạn thành công
nói chung mấy kiến thức này tự mình sẻ ngâm lấy đi ,nó là kiến thức nâng cao của hệ thống scada
nên hầu như không ai chỉ cụ thể đâu ,chỉ đúng hướng cho mình ngâm cứu là quá ok rồi ,chẳng qua gì nồi cơm thôi các bác ạ
thanks ban nhieu.
Các bác cho em hỏi thêm chút nữa là mình có thể xuất giá trị của Tag ra Excel đc ko ah? Nếu đc thì viết ntn ah? Cám ơn các bác trước.
Xin chào các bạn, tôi cũng đang làm một chương trình về việc kết nối điều khiển giữa VBA và PLC S7 -300 của siemens nhưng chưa có tài liệu gì cũng như hướng dẫn gì rất mong các bạn giúp đỡ cho.
Tôi xin cám ơn nhiều.
Anh ơi em dùng office 2010 có xuất được không anh? Với em muốn xuất dữ liệu có ngày tháng thì phải làm sao hả anh?
e cũng làm như mấy anh chỉ, nhưng có điều nó bị lỗi, ko biết nên giãi quyết như thế nào... mong máy a giúp đỡ..
Đính kèm 1173
[IMG]http://i1.upanh.com/2013/0819/03//57215017.1.bmp[/IMG]
Hiện tại em đang học Wincc, phần xuất file excel chưa làm được. Lúc xuất ra, cửa sổ excel vừa hiện ra là tự tắt mất tiêu, trong thư mục đích để lưu file thì cũng không có file nào được tạo ra. Mò hai buổi tối rồi mà chưa ra :(
Đây là code VB xuất excel:Mong nhờ các sư huynh chỉ giáo với. Em gửi link bản project test. Huynh nào down về mở ra kiểm tra hộ em với. Rút cuộc là lỗi do đâu? Cách khác phục :)Trích dẫn:
Sub OnClick(ByVal Item)
Dim objExcelApp
Set objExcelApp = CreateObject("Excel.Application")
objExcelApp.Visible = True
objExcelApp.Workbooks.Open "G:\AUTOMATION\LAP TRINH\SCADA\tets excel.xlsx"
objExcelApp.Cells(10, 6).Value = ScreenItems("value1").OutputValue
objExcelApp.Cells(10, 7).Value = ScreenItems("value2").OutputValue
objExcelApp.Cells(10, 8).Value = ScreenItems("value3").OutputValue
objExcelApp.Cells(10, 9).Value = ScreenItems("value4").OutputValue
objExcelApp.ActiveWorkbook.Save
objExcelApp.Workbooks.Close
objExcelApp.Quit
Set objExcelApp = Nothing
End Sub
Bản test: http://www.mediafire.com/download/fo...ukwgr/test.rar
Nhân tiện gửi luôn link bản demo của một bạn bên dientuvietnam.net ( quên mất luồng nào, tìm mãi không thấy ). Sao bản test của em không nhập được giá trị vào, mà bản demo của bạn "ấy" lại nhập được?
Bản demo: http://www.mediafire.com/download/is...c1zs/demo2.rar
Mong các huynh chỉ ra cái sai của em:62:
các anh cho em hỏi ? em xuất dữ liệu ra excel được rùi. h em muốn lưu dữ liệu ra excel 1 cách tự động thì phải làm sao ạ? nếu khi mất điện hệ thốn ngừng hoạt động thì ta vẫn có thể mở file excel để xem được dữ liệu cuối cùng? thanks all
Bạn có thể dùng trigger lưu theo chu kỳ
thanks a! em làm được cho nó xuất ra liên tục trong triger rùi. nhưng nó lại báo lỗi sql? chắc do key của wincc
Em có 1 đoạn code VB Script Lưu trữ dữ liệu từ WinCC Flex vào tập tin Excel bằng cách sử dụng VBScript : em đã chép nó vào Script WinCC Flex và đưa nó vào Event của IO Field, sau đó e tìm cái file Excel nó suất ra ở đâu em không biết.
Em cũng mới tìm hiểu VB Script nên đọc code chưa được hiểu rõ mong các anh trong diễn đàn giúp đỡ em.
Code VB Script: http://stackoverflow.com/questions/1...using-vbscript
Dim wsh, XLSrunning, TargetBookrunning, objExcelApp, objWorkbook, TheTargetBook, TheTargetBookName
Dim TheCount, theSheet, theCell, theLastCell, theLastRow
Dim objFSO
Const OverwriteExisting = 1
Set wsh = CreateObject("WScript.Shell")
'TheTargetBookName = "report.xls"
'TheTargetBook = "D:\Out\" & TheTargetBookName
TheTargetBookName = "report.xls"
TheTargetBook = "f:\work\plc\" & TheTargetBookName
TheTargetBookName = "c:\" & TheTargetBookName
'---------------[Modification#1_Begin]-------------------------------------------
Set objFSO = CreateObject("Scripting.FileSystemObject")
If Not objFSO.FileExists(TheTargetBook) Then
objFSO.CopyFile TheTargetBookName, TheTargetBook, OverwriteExisting
'HMIRuntime.Trace "The file," & TheTargetBook & ", does not exist." & vbCrLf & "I've just created one for you!"
End If
Set objFSO = Nothing
'---------------[Modification#1_End]--------------------------------------------
TheCount = GetObject("winmgmts:root\CIMV2").ExecQuery("SELECT * FROM Win32_Process WHERE Name='EXCEL.EXE'").Count
'While TheCount is bigger than 0, it means the Excel Application is running..., but doesn't mean the workbook is open for sure!
If TheCount > 0 Then
Set objExcelApp = GetObject(,"Excel.Application")
' Using GetObject(,"Excel.Application") to point to the running Excel Application.
TargetBookrunning = 0
For Each XLSrunning In objExcelApp.Workbooks
If XLSrunning.name = TheTargetBookName Then
TargetBookrunning = 1
End If
Next
If TargetBookrunning = 1 Then
Set objWorkbook = GetObject(TheTargetBook)
Else
Set objWorkbook = objExcelApp.Workbooks.Open(TheTargetBook)
End If
Else
Set objExcelApp = CreateObject("Excel.Application")
Set objWorkbook = objExcelApp.Workbooks.Open(TheTargetBook)
End If
objExcelApp.Visible = True
objExcelApp.ScreenUpdating = True
objExcelApp.DisplayAlerts = True
Dim TheTargetRow ' <------[Modification#2]-------
Set theSheet = objWorkbook.ActiveSheet
With theSheet
Set theCell = theSheet.Cells(65535,2)
Set theLastCell = theCell.end(-4162)
theLastRow = theLastCell.row
.cells(theLastRow + 1, 1) = formatdatetime( now,vbShortDate) & ", " & formatdatetime( now,vbLongTime)
.cells(theLastRow + 1, 2) = SmartTags("Tag_1")
.cells(theLastRow + 1, 3) = SmartTags("Tag_2")
.cells(theLastRow + 1, 4) = SmartTags("Tag_3")
End With
objWorkbook.Save
'objWorkbook.Close
Set objWorkbook = Nothing
'objExcelApp.Quit
Set objExcelApp = Nothing
'MsgBox "Done"
Set wsh = Nothing
Các anh cho em hỏi là em muốn xuất dữ liệu từ Wincc ra excel theo dạng sự cố . ví dụ là có 1 biến nào đó thay đổi thì nó xuất ra bảng excel ạ . mong mọi người giúpp đỡ ạ
.........................