❶ excel中VBA有哪些作用哪裡有教程啊
闡述了當前自動化軟體的技術特點和發展趨勢,並介紹了在iFIX自動化軟體中使用VBA訪問歷史和實時數據的機制。通過一段使用VBA語言編寫的程序,實現向Excel輸出歷史數據,生成歷史報表的實例,說明了VBA語言在自動化軟體中的應用。
1、自動化軟體的發展趨勢
自動化軟體主要是指那些為用戶提供人機操作界面(HMI)的開發和運行環境的軟體,有些軟體還能夠提供迴路控制功能,用戶可以實現基於PC的控制方案。自動化軟體應當具備如下的主要功能及特徵:工業過程的動態可視化;數據採集和管理;過程監控和報警;報表和操作記錄功能;系統安全等級化管理;為其他企業級程序提供實時和歷史數據;簡單的迴路調節;批量控制等。
近年來,隨著計算機和網路技術的發展與應用,自動化軟體的發展也呈現如下的發展趨勢。
1.1 開放和標准化
近年來,許多自動化軟體廠商把通用的標准化編程語言,如微軟的VBA(Visual Basic for Applications)集成在自己軟體的開發環境中。VBA與VB(Visual Basic)極為相似,只是不能編譯成可執行文件,這就為眾多熟悉VB的用戶提供了一個編程環境。用戶在VBA環境中編寫程序,可以使用DDE,ActiveX控制項,ODBC,COM/DCOM 等技術使得自動化軟體演變成開放的軟體平台,在軟體功能不能滿足用戶特殊需要時,用戶可以根據自己的需要進行二次開發。
同時,OPC(OLE for Process Contro1)技術也是自動化軟體的一個熱點。OPC是Microsoft公司的對象鏈接和嵌入OLE/COM技術在過程式控制制方面的應用,為工業控制領域提供了標準的數據訪問機制。
1.2 網路化
隨著Internet/Intranet的普及,自動化軟體又集成了基於TCP/IP協議的網路功能,使其成為協作生產製造過程中的核心系統,實現了企業網路環境下實時數據的管理、實時流程查看、實時趨勢瀏覽、報警記錄與查看、報表數據存儲、歷史趨勢存儲與查看、生產過程報表生成、生產統計報表生成等功能,從而實現過程式控制制系統與信息系統的網路集成。用戶可以通過IE瀏覽器登錄自動化軟體的Web Server伺服器,實現遠程瀏覽生產過程。
1.3 管理控制一體化
生產管理信息系統是大型企業重點建設的項目,隨著大型資料庫技術的日益成熟,自動化軟體成為全廠范圍內信息收集和集成的工具。在未來企業的信息化進程中,自動化軟體將成為硬體設備與生產管理信息系統的橋梁。因為自動化軟體能為生產管理信息系統提供生產過程的實時和歷史數據,而生產管理信息系統叉對生產過程有著指導作用。
2、VBA在自動化軟體中的應用
下面,以iFIX軟體為例,通過VBA編寫的腳本程序,實現向Excel輸出歷史數據的實例來具體說明VBA在自動化軟體中的應用。
2.1 iFIX軟體簡介
iFIX軟體是GE自動化軟體產品家族中的一個基於Windows的HMI/SCADA組件。iFIX是基於開放的和組件技術的產品,專為在工廠級和商業系統之間提供易於集成和協同工作的設計環境。iFIX中還加入了OPC,VBA,ActiveX,DDE,ODBC等工業標准化技術,可以提供一個強大的開發環境,實現用戶的特殊需求。
2.2 iFIX軟體中VBA的應用實例
a) iFIX的數據訪問機制。iFIX中的數據分為實時資料庫和歷史資料庫,這2種資料庫的訪問方法不同,對於實時資料庫,iFIX的VBA項目中提供了各種iFIX對象,利用這些對象,就可以方便地在VBA中實現對iFIX的控制功能;對於歷史資料庫,可以訪問關系資料庫來獲得歷史數據。對於這些關系資料庫,各種編程語言大多都提供了相應的數據控制項來訪問,在VBA 中,通常採用ADO對象模型來訪問這些歷史資料庫。
b) ADO Data控制項使用Microsoft ActiveX數據對象(ADO)來快速建立數據綁定的控制項和數據提供者之間的連接。數據綁定控制項是任何具有「數據源」屬性的控制項。數據提供者可以是任何符合ODBC規范的數據源。
c) 利用VBA實現Excel報表。通過編寫VBA腳本程序,可以實現向Excel輸出歷史數據,生成Excel報表。其觸發方式有2種:一種是通過iFIX的調度程序,以固定的時間或事件來啟動VBA腳本程序,生成報表;還可以直接使用VBA生成用戶操作界面,用戶可以輸入開始時間,間隔等參數,由用戶點擊按鈕啟動VBA腳本程序,生成報表。這2種方式在程序上大同小異,其主要部分VBA腳本程序如下。其中程序將歷史數據、時間、TAG名稱等參數送到Excel的Sheet2中,用戶可以將Sheet1作為報表版面,通過編輯版面格式,引用Sheet2數據等方式,形成最終報表。
根據用戶要求定義所要查詢的時間段和變數名稱
Dim MyDate,StartTime,EndTime As String Dim Tagl,Tag2 As String
Tagl=「TIC101.F_CV」
Tag2=「TIC102.F_CV」
MyDate=Format(Now(),「yyyy-mm—dd」)
StartTime=MyDate&「 」& 「0:00:00」
EndTime=MyDate&「 」& 「23:OO:OO」
使用ADO對象來訪問ODBC資料庫,用SQL語盲查詢歷史數據
strQuerySamp=「Select Datetime,Value,Tag From Fix Where Mode=『Sample』and (TAG=『 「& Tagl & 」『or TAG=』」& Tag2 ) and Interval=『 01:00:00』and (Datetime) >={ts『「& StartTime &」』 )and Datetime<={ts『「 EndTime & 」』})」
Dim cnADO As New ADODB.Connection
Dim rsADO As Recordset
Set cnADO=New ADODB.Connection
cnADO.ConnectionString=「 DSN= FIX Dynamics Historical Data;UID=sa;PWD= ;」
cnAD0.Open 「FIX Dynamics Historical Data」,「sa」,「」
Set rsADO— New ADODB.Recordset
rsADO.Open strQuerySamp,cnADO,adOpenForwardOnly,adLockBatchOptimistic
調用Excel,將歷史數據寫入打開的Excel報表文件
Dim 0utReport File,InReportFile As String
Set Intyexcel= New Excel.Application
InReportFile-」C:\data\HisReport「
Intyexce1.Workbooks.Open InReportFile &「.XLS」
Intyexce1.Sheets(「Sheet2」).Select
While rsADO.EOF < > True
With Intyexce1.Worksheets(2)
For C=0 To Items
If rsADO(c)= 「 」Then .Cells(r,C + 1).Value= rsADO(c)
Next C
r; r+ 1
rsADO.M oveNex
End With
W end
關閉Excel,保存報表文件
OutReportFile=InRep0rtFile &「_」& MyDate
Intyexce1. ActiveW orkbook. SaveAs OutReportFile
Intyexce1.Quit
Set Intyexcel=Nothing
Set cnADO==Nothing
3、VBA應用的注意事項與展望
集成了VBA編程語言的自動化軟體,變成了標准化的、開放的軟體開發平台,這使得自動化軟體本身具有了無限的開放性和可擴展性。但同時也帶來一些問題。首先,開發人員要確保VBA腳本程序的可靠和精簡。VBA程序要經過嚴格和全面的測試,並要編寫出錯處理程序,保證生產過程式控制制的萬無一失。其次,目前VBA程序還不能編寫多線程程序,開發人員要選擇恰當的觸發方式,避免發生沖突。
總之,隨著最終用戶變得更加成熟以及對自動化軟體的更加了解,他們將通過編寫程序的方式來針對其過程及系統進行更多的定製,以便能夠滿足其需求。自動化軟體將不斷為用戶提供這樣的安全可靠的技術手段。
參考文獻
[1] 劉恩濤,趙耀峰.Visual Basic6.0編程技術與實例分析,北京:中國水利水電出版杜,1999.455~456,472~478,479~482
[2] 劉炳文,張紳.Visual Basic程序設計——資料庫篇.北京:人民郵電出版社。1999.196~198,224~232,248~251
詳細教程:http://whzx.tzr.com.cn/read.php?wid=455
❷ 給個excel的vba腳本,實現功能:將sheet1中的B,C,D,G,H,I,這6列從第二行開始,引到sheet2的ABCDEF中
Dim i
Sheets("sheet2").Cells.Clean 『』『』『』『』『』『』『』『』『』『』『』清除Sheets("sheet2")的所有數據
i = 2
Do
Sheets("sheet2").Cells(i, "A") = IIf(Sheets("sheet1").Cells(i, "B") = "--", 0, Sheets("sheet1").Cells(i, "B"))
Sheets("sheet2").Cells(i, "B") = IIf(Sheets("sheet1").Cells(i, "C") = "--", 0, Sheets("sheet1").Cells(i, "C"))
Sheets("sheet2").Cells(i, "C") = IIf(Sheets("sheet1").Cells(i, "D") = "--", 0, Sheets("sheet1").Cells(i, "D"))
Sheets("sheet2").Cells(i, "D") = IIf(Sheets("sheet1").Cells(i, "G") = "--", 0, Sheets("sheet1").Cells(i, "G"))
Sheets("sheet2").Cells(i, "E") = IIf(Sheets("sheet1").Cells(i, "H") = "--", 0, Sheets("sheet1").Cells(i, "H"))
Sheets("sheet2").Cells(i, "F") = IIf(Sheets("sheet1").Cells(i, "I") = "--", 0, Sheets("sheet1").Cells(i, "I"))
i = i + 1
Loop Until Sheets("sheet1").Cells(i, "B") = ""
把以上代碼加到某個事件代碼里去,比如說你刷新Sheets("sheet1")的網頁數據時!
❸ EXC怎麼用vba腳本對多個單元格進行保存檢查
1、首先我們打開一個工作樣表作為例子。
2、在例子中我們在a1和b1單元格分別輸入有名字和地址兩個分列,現在要做的就是使用vba把a1和b1單元格的內容進行互換。
方法如下:
6、還有一點需要注意的是使用這種方法進行數據調整雖然序列沒有發生改變,但是頁面設置會因為插入和刪除的原因而發生改變,可以看到運行宏後,宏指令按鈕的位置發生了改變。
❹ excel 文件中編輯VBA腳本,在ThisWorkbook中添加 Application.Visible = 0 DataReport.Show 後遇到的問題
一般來說 application.visible= ture
這樣是能夠讓excel可見
這樣你就可以關閉他
如何設置了application.visible=0
應該是不可見 所以你無法繼續打開一個新excel文件 因為你新建了一個與現在文檔相同的excel文件 但由於你當前excel不可見所以你新建
你也可以加入activeworkbook.close 讓他自動關閉
❺ vba腳本如何設置使用時間限制
如果為限定在特殊時間范圍內使用,可以的
' *******例1: 在每天8~17點之間可以運行,其他時間不允許
if Hour(Time) >= 8 and Hour(Time) <= 16 then
' 你的程序代碼
end if
' *******例2: 在每月前5天之可以運行,其他時間不允許
if day(date) <= 5 then
' 你的程序代碼
end if
❻ 什麼是VBA腳本
辦公軟體的VBA指的是在已有的應用程序平台上,開發出的執行程序,使已有的應用程序(EXCEL等)自動化,VBA腳本就是大家說的VBA代碼
❼ VBA終止用戶的刪除行/列操作
PrivateSubWorkbook_SheetSelectionChange(ByValShAsObject,ByValTargetAsRange)
DimmsgAsLong
If(Target.Rows.Count=1OrTarget.Columns.Count=1)Then
If(Target.Columns.Count>256OrTarget.Rows.Count>65536)Then
msg=MsgBox("是否刪除行列",vbYesNo)
Ifmsg=7Then
Cells(1,1).Select
ExitSub
EndIf
EndIf
EndIf
EndSub
PrivateSubWorkbook_SheetChange(ByValShAsObject,ByValTargetAsRange)
DimmsgAsLong
If(Target.Rows.Count=1OrTarget.Columns.Count=1)Then
If(Target.Columns.Count>256OrTarget.Rows.Count>65536)Then
msg=MsgBox("ÊÇ·ñɾ³ýÐлòÁÐ",vbYesNo)
Ifmsg=7Then
Application.Undo
ExitSub
EndIf
EndIf
EndIf
EndSub
Worksheet_Change事件可以做到撤銷上一步的操作,不過會死循環,這個不太理想,可以用Workbook_SheetSelectionChange事件,上述實現禁止整行或整列選取。如果單只是終止刪除操作,只能通過excel鎖定來實現
❽ excel VBA 腳本
Subaa()
Dimarr(1To4,1To3)
k=0
Fori=1To2
Forj=1To2
k=k+1
arr(k,1)=Cells(i+1,1)
arr(k,2)=Cells(1,j+1)
arr(k,3)=Cells(i+1,j+1)
Nextj
Nexti
Range("E1:G4")=arr
EndSub
❾ excelVBA腳本問題,要求是如果b3,b6,b7的值為空白則停止腳本,如果其中任...
可不可以這樣(我這是按鍵精裡面的語言,跟VB差不多)
if *=* and *=* then
end if
如果 * 等於 * 而且 * 等於 * 則
結束
引用就是
if range("b3") = "" and range ("b6")="" and range ("b7")="" tne
exit sub