摘要:Access 與 Flexsim 4.0 整合應用
程式構思 : 

Flexsim 是一款模擬軟體,它的應用層面很廣,舉凡各行各業想要評估專案的可行性,預先想借由計算機的運算能力來做事前的模擬評估等,都可借由此類的軟體應用獲得極佳的決策支援。
模擬概述 :
首先,模擬3種不同的產品,並以均勻分配隨機產生,經由兩名工人負責搬運至三部機器進行打包作業。然後再經過三條輸送帶,再搭上一部堆高機送至倉儲料架上。模擬時間 5000 秒以上,分析出瓶頸(bottleneck)單元落在何處。最後再擷取產生的統計報表資料,回寫到 Access 檔案中,透過 VBA 程式編排,整合出一張”系統模擬購置表”。它會找尋系統模擬中所有的物件,平均idle少於3 (sec) 的物件(相對表示該物件是busy 狀態),並給予簡單的採購建議。
運作畫面如下 :
. Flexsim 4.0 的作業畫面。

. ACCESS 的 VBA 執行畫面如下 :
Step 1 : 輸入瀏覽檔案路徑。

Step 2 : 自動產生”系統模擬購置表”。

Step 3 : 自動填入所有欄位。

程式碼 :
Option Compare Database
Sub Main()
'*********************************************************
'擷取 StateReport 的Data ,並判斷機器,設備 ,人員的需求 ,自
'動產生表單. 依 [idle] 欄位判斷 :
'1.Operator 和 Transporter 的 [idle] < 3% 代表 busy.進
' 而產生 [系統模擬購置表].
'*********************************************************
'擷取 StateReport 的Data ,並判斷機器,設備 ,人員的需求 ,自
'動產生表單. 依 [idle] 欄位判斷 :
'1.Operator 和 Transporter 的 [idle] < 3% 代表 busy.進
' 而產生 [系統模擬購置表].
'*********************************************************
Dim db As Database
Set db = CurrentDb
Dim db As Database
Set db = CurrentDb
'判斷"系統模擬購置表"是否存在.
If SearchTable("系統模擬購置表") Then
'新增一筆資料.
InsertData
Else
NewTable
InsertData
End If
UserMessage
End Sub
If SearchTable("系統模擬購置表") Then
'新增一筆資料.
InsertData
Else
NewTable
InsertData
End If
UserMessage
End Sub
Sub NewTable()
'新增Table.
Dim db As Database
Set db = CurrentDb
Dim tdfNew As TableDef
Set tdfNew = db.CreateTableDef("系統模擬購置表")
With tdfNew
.Fields.Append .CreateField("序號", dbInteger)
.Fields.Append .CreateField("模擬人員", dbText)
.Fields.Append .CreateField("模擬日期", dbText)
.Fields.Append .CreateField("模擬時數", dbText)
.Fields.Append .CreateField("條件設定", dbText)
.Fields.Append .CreateField("購置項目", dbText)
.Fields.Append .CreateField("補充說明", dbText)
End With
db.TableDefs.Append tdfNew
UserMessage
End Sub
'新增Table.
Dim db As Database
Set db = CurrentDb
Dim tdfNew As TableDef
Set tdfNew = db.CreateTableDef("系統模擬購置表")
With tdfNew
.Fields.Append .CreateField("序號", dbInteger)
.Fields.Append .CreateField("模擬人員", dbText)
.Fields.Append .CreateField("模擬日期", dbText)
.Fields.Append .CreateField("模擬時數", dbText)
.Fields.Append .CreateField("條件設定", dbText)
.Fields.Append .CreateField("購置項目", dbText)
.Fields.Append .CreateField("補充說明", dbText)
End With
db.TableDefs.Append tdfNew
UserMessage
End Sub
Sub transData()
'轉換FlexSim 的 Class 欄位資料.
Dim db As Database
Dim wrkJet As Workspace
Set wrkJet = CreateWorkspace("JetWorkspace", "admin", "")
'轉換FlexSim 的 Class 欄位資料.
Dim db As Database
Dim wrkJet As Workspace
Set wrkJet = CreateWorkspace("JetWorkspace", "admin", "")
Set db = wrkJet.OpenDatabase("Northwind.mdb")
End Sub
End Sub
Sub InsertData()
'填入[系統模擬購置表]之預設值.
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "select * from 系統模擬購置表", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
rs.AddNew
rs!購置項目 = "dsafdsf"
rs.Update
'rs("模擬人員") = "JACK"
rs.Close
End Sub
'填入[系統模擬購置表]之預設值.
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "select * from 系統模擬購置表", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
rs.AddNew
rs!購置項目 = "dsafdsf"
rs.Update
'rs("模擬人員") = "JACK"
rs.Close
End Sub
Function SearchTable(TableName As String) As Boolean
'搜尋Table.
SearchTable = False
Dim tbl As DAO.TableDef
For Each tbl In CurrentDb.TableDefs
If tbl.Name = TableName Then
SearchTable = True
Exit For
End If
Next
End Function
'搜尋Table.
SearchTable = False
Dim tbl As DAO.TableDef
For Each tbl In CurrentDb.TableDefs
If tbl.Name = TableName Then
SearchTable = True
Exit For
End If
Next
End Function
Sub GetStateReport()
'擷取 StateReport 的 Data.
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "select Object,Class,idle from StateReport where idle<=5", CurrentProject.AccessConnection, adOpenKeyset, adLockOptimistic
'擷取 StateReport 的 Data.
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "select Object,Class,idle from StateReport where idle<=5", CurrentProject.AccessConnection, adOpenKeyset, adLockOptimistic
rs.Close
End Sub
End Sub
Sub UserMessage()
'訊息視窗.
MsgBox ("程式執行完畢!")
End Sub
'訊息視窗.
MsgBox ("程式執行完畢!")
End Sub
凡事,總有更輕鬆的解決方法。