www.pudn.com > Doe.rar > FrmCaculate.frm
VERSION 5.00
Object = "{0ECD9B60-23AA-11D0-B351-00A0C9055D8E}#6.0#0"; "MSHFLXGD.OCX"
Object = "{CDE57A40-8B86-11D0-B3C6-00A0C90AEA82}#1.0#0"; "MSDATGRD.OCX"
Begin VB.Form FrmCaculate
BorderStyle = 1 '單線固定
Caption = "變異數分析表"
ClientHeight = 9180
ClientLeft = 45
ClientTop = 330
ClientWidth = 9495
Icon = "FrmCaculate.frx":0000
LinkTopic = "Form1"
LockControls = -1 'True
MaxButton = 0 'False
MDIChild = -1 'True
MinButton = 0 'False
ScaleHeight = 9180
ScaleMode = 0 '使用者自訂
ScaleWidth = 10000
Begin VB.CommandButton Command1
Caption = "初值"
BeginProperty Font
Name = "新細明體"
Size = 12
Charset = 136
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 3000
TabIndex = 14
Top = 8640
Width = 1575
End
Begin MSDataGridLib.DataGrid ResDG
Height = 2175
Left = 360
TabIndex = 13
Top = 6000
Width = 8775
_ExtentX = 15478
_ExtentY = 3836
_Version = 393216
AllowUpdate = -1 'True
Appearance = 0
HeadLines = 1
RowHeight = 19
FormatLocked = -1 'True
BeginProperty HeadFont {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "新細明體"
Size = 9.75
Charset = 136
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "新細明體"
Size = 12
Charset = 136
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ColumnCount = 6
BeginProperty Column00
DataField = ""
Caption = "FACTOR"
BeginProperty DataFormat {6D835690-900B-11D0-9484-00A0C91110ED}
Type = 0
Format = ""
HaveTrueFalseNull= 0
FirstDayOfWeek = 0
FirstWeekOfYear = 0
LCID = 1028
SubFormatType = 0
EndProperty
EndProperty
BeginProperty Column01
DataField = ""
Caption = "SI"
BeginProperty DataFormat {6D835690-900B-11D0-9484-00A0C91110ED}
Type = 0
Format = ""
HaveTrueFalseNull= 0
FirstDayOfWeek = 0
FirstWeekOfYear = 0
LCID = 1028
SubFormatType = 0
EndProperty
EndProperty
BeginProperty Column02
DataField = ""
Caption = "DF"
BeginProperty DataFormat {6D835690-900B-11D0-9484-00A0C91110ED}
Type = 0
Format = ""
HaveTrueFalseNull= 0
FirstDayOfWeek = 0
FirstWeekOfYear = 0
LCID = 1028
SubFormatType = 0
EndProperty
EndProperty
BeginProperty Column03
DataField = ""
Caption = "V"
BeginProperty DataFormat {6D835690-900B-11D0-9484-00A0C91110ED}
Type = 0
Format = ""
HaveTrueFalseNull= 0
FirstDayOfWeek = 0
FirstWeekOfYear = 0
LCID = 1028
SubFormatType = 0
EndProperty
EndProperty
BeginProperty Column04
DataField = ""
Caption = "F"
BeginProperty DataFormat {6D835690-900B-11D0-9484-00A0C91110ED}
Type = 0
Format = ""
HaveTrueFalseNull= 0
FirstDayOfWeek = 0
FirstWeekOfYear = 0
LCID = 1028
SubFormatType = 0
EndProperty
EndProperty
BeginProperty Column05
DataField = ""
Caption = "@(%)"
BeginProperty DataFormat {6D835690-900B-11D0-9484-00A0C91110ED}
Type = 0
Format = ""
HaveTrueFalseNull= 0
FirstDayOfWeek = 0
FirstWeekOfYear = 0
LCID = 1028
SubFormatType = 0
EndProperty
EndProperty
SplitCount = 1
BeginProperty Split0
BeginProperty Column00
Alignment = 2
ColumnWidth = 1579.878
EndProperty
BeginProperty Column01
Alignment = 1
Locked = -1 'True
ColumnWidth = 1374.482
EndProperty
BeginProperty Column02
Alignment = 2
Locked = -1 'True
ColumnWidth = 837.109
EndProperty
BeginProperty Column03
Alignment = 1
Locked = -1 'True
ColumnWidth = 1374.482
EndProperty
BeginProperty Column04
Alignment = 1
Locked = -1 'True
ColumnWidth = 1374.482
EndProperty
BeginProperty Column05
Alignment = 1
Locked = -1 'True
ColumnWidth = 1374.482
EndProperty
EndProperty
End
Begin VB.CommandButton cmdMerge
Caption = "合併計算"
BeginProperty Font
Name = "新細明體"
Size = 12
Charset = 136
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 360
TabIndex = 10
Top = 8640
Width = 1935
End
Begin VB.CommandButton cmdExport
Caption = "匯出"
BeginProperty Font
Name = "新細明體"
Size = 12
Charset = 136
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 5400
TabIndex = 9
Top = 8640
Width = 1575
End
Begin VB.CommandButton cmdExit
Caption = "離開"
BeginProperty Font
Name = "新細明體"
Size = 12
Charset = 136
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 7560
TabIndex = 8
Top = 8640
Width = 1575
End
Begin MSHierarchicalFlexGridLib.MSHFlexGrid AnoGrid
Height = 2175
Left = 360
TabIndex = 3
Top = 3240
Width = 8775
_ExtentX = 15478
_ExtentY = 3836
_Version = 393216
AllowUserResizing= 3
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "新細明體"
Size = 12
Charset = 136
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
BeginProperty FontFixed {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "新細明體"
Size = 9.75
Charset = 136
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
_NumberOfBands = 1
_Band(0).Cols = 2
End
Begin MSHierarchicalFlexGridLib.MSHFlexGrid VarGrid
Height = 2175
Left = 360
TabIndex = 2
Top = 480
Width = 8775
_ExtentX = 15478
_ExtentY = 3836
_Version = 393216
AllowUserResizing= 3
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "新細明體"
Size = 12
Charset = 136
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
BeginProperty FontFixed {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "新細明體"
Size = 9.75
Charset = 136
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
_NumberOfBands = 1
_Band(0).Cols = 2
End
Begin VB.Label Label7
Alignment = 2 '置中對齊
Height = 255
Left = 2760
TabIndex = 12
Top = 8280
Width = 3135
End
Begin VB.Label Label8
Alignment = 2 '置中對齊
Height = 255
Left = 5760
TabIndex = 11
Top = 8280
Width = 3135
End
Begin VB.Label Label6
Alignment = 2 '置中對齊
Height = 255
Left = 5760
TabIndex = 7
Top = 5520
Width = 3135
End
Begin VB.Label Label5
Alignment = 2 '置中對齊
Height = 255
Left = 2760
TabIndex = 6
Top = 5520
Width = 3135
End
Begin VB.Label Label4
Alignment = 2 '置中對齊
Height = 255
Left = 2760
TabIndex = 5
Top = 2760
Width = 3135
End
Begin VB.Label Label3
Caption = "ANOVA RESULT : "
BeginProperty Font
Name = "新細明體"
Size = 12
Charset = 136
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 360
TabIndex = 4
Top = 5640
Width = 8775
End
Begin VB.Label Label2
Caption = "ANOVA : "
BeginProperty Font
Name = "新細明體"
Size = 12
Charset = 136
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 360
TabIndex = 1
Top = 2880
Width = 8775
End
Begin VB.Label Label1
Caption = "VARIANCE : "
BeginProperty Font
Name = "新細明體"
Size = 12
Charset = 136
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 360
TabIndex = 0
Top = 120
Width = 8775
End
End
Attribute VB_Name = "FrmCaculate"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Public CalLNo As String '傳回直交表種類
Public eFileID As Long '傳回 FileID, 以進行資料匯出
Public eFacNum As Integer '傳回直交表最大因子數
Public eFacRows As Integer '傳回直交表列數
'dim vachart tp prepare calculate
Dim crsTemp As Recordset '用來暫存直交表格式
Dim rsMergeStd As Recordset '用來連接ResGrid
Dim rsMergeTemp As Recordset '用來作為合併計算用的中繼站( RS )
Dim LastData As Single '用來存最後的 V 值, 以便於計算
Dim AllDataValue As Single '用來存 SI 的總和, 以便於計算
Dim pDataValue As Single '用來存 @(%) 的總和, 以便於計算最後一欄( 最後一欄 = 100 - pDataValue )
Private Sub cmdExit_Click()
'exit form
Unload Me
End Sub
Private Sub cmdExport_Click()
'dim Vachart for ClipBoard
Dim rsExportExcel As Recordset
Dim rsFileSet As Recordset
Dim ClipTemp(5) As String
Dim clipAll As String
'dim Vachart for Excel
Dim objExcelApp As Excel.Application
Dim gnSheetNo As Integer
Dim objSheet As Excel.Worksheet
Dim rsExcel As Recordset
Dim nSQL As String
Dim ExcelModuleString As String
Dim NewModule
'存入相關資料於 ClipTemp(0)
ClipTemp(0) = ""
ClipTemp(0) = ClipTemp(0) & "eFacNum" & vbTab & eFacNum & vbCrLf '直交表最大因子數
ClipTemp(0) = ClipTemp(0) & "eFacRows" & vbTab & eFacRows & vbCrLf '直交表列數
ClipTemp(0) = ClipTemp(0) & "DGRows" & vbTab & rsMergeStd.RecordCount & vbCrLf '合併計算後列數
'存入直交表於 ClipBoard(1)
ClipTemp(1) = "直交表格式" & vbCrLf
strSQL = "select * from FileFactor where FileId = " & eFileID & " order by FactorNo ,FIndex "
Set rsFileSet = CreatRS(strSQL)
If rsFileSet.RecordCount > 0 Then
With rsFileSet
For i = 0 To eFacRows
cSearch = "FIndex = " & i
.Filter = cSearch
.Sort = "FactorNo"
.MoveFirst
If i = 0 Then
ClipTemp(1) = ClipTemp(1) & "Row" & vbTab
Else
ClipTemp(1) = ClipTemp(1) & i & vbTab
End If
For j = 1 To eFacNum
ClipTemp(1) = ClipTemp(1) & .Fields(2).Value & vbTab
.MoveNext
Next j
ClipTemp(1) = ClipTemp(1) & vbCrLf
Next i
ClipTemp(1) = ClipTemp(1) & vbCrLf '此行目的在分割不同表格
End With
End If
'存入 Data 於 ClipBoard(2)
strSQL = "select * from Rmeas where FileID =" & eFileID & " order by mIndex "
Set rsExportExcel = CreatRS(strSQL)
With rsExportExcel
If .RecordCount > 0 Then '存入ClipTemp(2)
.MoveFirst
ClipTemp(2) = "實驗數據資料表" & vbCrLf
ClipTemp(2) = ClipTemp(2) & "Row" & vbTab
For i = 1 To 5
ClipTemp(2) = ClipTemp(2) & "第 " & i & " 組" & vbTab
Next i
ClipTemp(2) = ClipTemp(2) & "平均值" & vbTab & vbCrLf
For i = 1 To .RecordCount
ClipTemp(2) = ClipTemp(2) & i & vbTab
For k = 2 To 7
If .Fields(k).Value <> -9999 Then
ClipTemp(2) = ClipTemp(2) & .Fields(k).Value & vbTab
Else
ClipTemp(2) = ClipTemp(2) & vbTab
End If
Next k
ClipTemp(2) = ClipTemp(2) & vbCrLf
.MoveNext
Next i
ClipTemp(2) = ClipTemp(2) & vbCrLf '此行目的在分割不同表格
Else
MsgBox "檔案連結錯誤, 請重新開啟檔案. ", vbOKOnly + vbCritical, "錯誤訊息"
Exit Sub
End If
End With
'存入 Variance 於 ClipBoard(3)
ClipTemp(3) = "VARIANCE : " & vbCrLf
With VarGrid
For i = 0 To .Rows - 1
For j = 0 To .Cols - 1
ClipTemp(3) = ClipTemp(3) & .TextMatrix(i, j) & vbTab
Next j
ClipTemp(3) = ClipTemp(3) & vbCrLf
Next i
ClipTemp(3) = ClipTemp(3) & vbCrLf '此行目的在分割不同表格
End With
'存入 Anova 於 ClipBoard(4)
ClipTemp(4) = "ANOVA : " & vbCrLf
With AnoGrid
For i = 0 To .Rows - 1
For j = 0 To .Cols - 1
ClipTemp(4) = ClipTemp(4) & .TextMatrix(i, j) & vbTab
Next j
ClipTemp(4) = ClipTemp(4) & vbCrLf
Next i
ClipTemp(4) = ClipTemp(4) & vbCrLf '此行目的在分割不同表格
End With
'存入 Anova result 於 ClipBoard(5)
ClipTemp(5) = "ANOVA RESULT : " & vbCrLf
For i = 0 To AnoGrid.Cols - 1
ClipTemp(5) = ClipTemp(5) & AnoGrid.TextMatrix(0, i) & vbTab
Next i
ClipTemp(5) = ClipTemp(5) & vbCrLf
With rsMergeStd
.MoveFirst
For i = 1 To .RecordCount
For j = 1 To 6
ClipTemp(5) = ClipTemp(5) & .Fields(j) & vbTab
Next j
ClipTemp(5) = ClipTemp(5) & vbCrLf
.MoveNext
Next i
ClipTemp(5) = ClipTemp(5) & vbCrLf '此行目的在分割不同表格
End With
'to get all ClipBoard
clipAll = ""
For i = 0 To 5
clipAll = clipAll & ClipTemp(i)
Next i
'save to clipboard
Clipboard.Clear
Clipboard.SetText clipAll, vbCFText
'Open Connection
If isExcelOpen = False Then
Call ExcelCN
End If
'------------------------------------------------------------------------------------------------------
'@~@ 建立 Excel 的 Application 物件
Screen.MousePointer = vbHourglass
Set objExcelApp = CreateObject("Excel.Application")
gnSheetNo = 0
On Error Resume Next
If Err.Number <> 0 Then
Set objExcelApp = CreateObject("Excel.Application")
gnSheetNo = 0
End If
Err.Clear
On Error GoTo RR
'---------------------------------------------------------------------------
'載入sample
With objExcelApp
' If .Workbooks.Count = 0 Then ' 第一次未建立 BOOK 時建立 Book
.Workbooks.Add
' Else ' 否則建立 Sheet
' .Worksheets.Add
' End If
' 顯示 EXCEL 的畫面
gnSheetNo = gnSheetNo + 1
Set objSheet = .ActiveWorkbook.ActiveSheet
.Visible = True
End With
'
' With objExcelApp
' .Workbooks.Add Template:=App.Path & "\" & "CanonSample.xlt"
' Set objSheet = objExcelApp.ActiveWorkbook.ActiveSheet
' .Visible = True
' End With
'---------------------------------------------------------------------------
'填入 Title 資料 ( Include title text and 測定器資料 )
'載入 Title
' .Cells(1, 20) = rsExportExcel.RecordCount
' .Cells(2, 3) = Text2.Text
' .Cells(3, 4) = Text1.Text
' .Range("F3:K4").Select
' .ActiveCell.FormulaR1C1 = Text3.Text & "部品測定"
'載入測定器 ( 暫時先寫死 )
'---------------------------------------------------------------------------
'@~@ 用巨集匯出
nSQL = "Select * from dExcelModule"
Set rsExcel = New ADODB.Recordset
rsExcel.Open nSQL, cnExcel, adOpenKeyset, adLockReadOnly
rsExcel.MoveFirst
ExcelModuleString = rsExcel.Fields("sResultExcel")
rsExcel.Close
Set rsExcel = Nothing
Open App.Path & "\ExcelModule.txt" For Output As #1 '建立文件
Print #1, ExcelModuleString
Close #1
'進行excel 匯出,使用excel巨集
Set NewModule = objExcelApp.ActiveWorkbook.Modules.Add '將excelmodule巨集移轉到目前使用中的excel檔案
NewModule.InsertFile FileName:=App.Path & "\ExcelModule.txt"
ExcelModuleString = ""
Open App.Path & "\ExcelModule.txt" For Output As #1 '清除
Print #1, ExcelModuleString
Close #1
objExcelApp.ActiveWorkbook.RunAutoMacros which:=xlAutoOpen
Screen.MousePointer = vbDefault
Exit Sub
RR:
MsgBox "Excel Err. : " & Err.Number & " - " & Err.Description
Screen.MousePointer = vbDefault
End Sub
Private Sub cmdMerge_Click()
Dim SumTemp As Single
Dim NumTemp As Integer, IndexTemp As Integer
Dim CalTemp As Single, pTemp As Single
SumTemp = 0
NumTemp = 0
CalTemp = 0
LastData = 0
pDataValue = 0
IndexTemp = 0
cmdMerge.Enabled = False
FrmCaculate.Enabled = False
'---------------------------------------------------------
'to get rstemp
Set rsMergeTemp = New Recordset
If rsMergeTemp.State <> adStateClosed Then rsMergeTemp.Close
With rsMergeTemp
' .Fields.Append "FacID", adInteger '紀錄控制因子順序 0
.Fields.Append "FacName", adBSTR '紀錄控制因子名稱 1
.Fields.Append "FacSI", adSingle '控制因子的 SI 值 2
.Fields.Append "FacDF", adInteger '控制因子的 DF 值 ( 自由度 ) 3
.Fields.Append "FacIndex", adInteger '控制因子的順序 4
If .State = adStateClosed Then .Open
If rsMergeStd.RecordCount > 0 Then
rsMergeStd.MoveFirst
For i = 1 To rsMergeStd.RecordCount
' .Fields(0).Value = rsMergeStd.Fields(0).Value
If rsMergeStd.Fields(1).Value = "e" Then
SumTemp = SumTemp + rsMergeStd.Fields(2).Value 'SI
NumTemp = NumTemp + rsMergeStd.Fields(3).Value 'DF
Else
IndexTemp = IndexTemp + 1
.AddNew
.Fields(0).Value = rsMergeStd.Fields(1).Value 'Name
.Fields(1).Value = rsMergeStd.Fields(2).Value 'SI
.Fields(2).Value = rsMergeStd.Fields(3).Value 'DF
.Fields(3).Value = IndexTemp
.Update
End If
rsMergeStd.MoveNext
Next i
End If
If NumTemp > 0 Then
.AddNew
.Fields(0).Value = "e" 'Name
.Fields(1).Value = SumTemp 'SI
.Fields(2).Value = NumTemp 'DF
.Fields(3).Value = IndexTemp + 1
.Update
End If
If .RecordCount > 0 Then
' .Sort="IndexTemp"
.MoveLast
LastData = cLaiFormat((.Fields(1).Value / .Fields(2).Value), 3)
If LastData = 0 Then
MsgBox "SI最小值不可為 0 ", vbOKOnly + vbCritical, "錯誤訊息"
FrmCaculate.Enabled = True
cmdMerge.Enabled = True
Exit Sub
End If
End If
End With
'---------------------------------------
Set ResDG.DataSource = Nothing
Set rsMergeStd = Nothing
Set rsMergeStd = New Recordset
If rsMergeStd.State <> adStateClosed Then rsMergeStd.Close
With rsMergeStd
.Fields.Append "FacID", adInteger '紀錄控制因子順序 0
.Fields.Append "FacName", adBSTR '紀錄控制因子名稱 1
.Fields.Append "FacSI", adSingle '控制因子的 SI 值 2
.Fields.Append "FacDF", adInteger '控制因子的 DF 值 ( 自由度 ) 3
.Fields.Append "FacV", adSingle '控制因子的 V 值 4
.Fields.Append "FacF", adSingle '控制因子的 F 值 5
.Fields.Append "FacP", adSingle '控制因子的 @(%) 值 6
If .State = adStateClosed Then .Open
If rsMergeTemp.RecordCount > 0 Then
rsMergeTemp.MoveFirst
For i = 1 To rsMergeTemp.RecordCount
.AddNew
.Fields("FacID").Value = i
.Fields("FacName").Value = rsMergeTemp.Fields(0).Value
.Fields("FacSI").Value = rsMergeTemp.Fields(1).Value
.Fields("FacDF").Value = rsMergeTemp.Fields(2).Value
'---------------------------------------------------------------------------------------------------------------------
'需做公式確認
CalTemp = cLaiFormat((rsMergeTemp.Fields(1).Value / rsMergeTemp.Fields(2).Value), 3)
.Fields("FacV").Value = CalTemp
If i <> rsMergeTemp.RecordCount Then
.Fields("FacF").Value = cLaiFormat(CalTemp / LastData, 3)
End If
If i <> rsMergeTemp.RecordCount Then
pTemp = cLaiFormat(100 * ((rsMergeTemp.Fields(1).Value - LastData) / AllDataValue), 3)
.Fields("FacP").Value = Abs(pTemp)
pDataValue = pDataValue + Abs(pTemp)
Else
.Fields("FacP").Value = cLaiFormat((100 - pDataValue), 3)
End If
'---------------------------------------------------------------------------------------------------------------------
.Update
rsMergeTemp.MoveNext
Next i
End If
End With
Call setResGrid
FrmCaculate.Enabled = True
cmdMerge.Enabled = True
End Sub
Private Sub Command1_Click()
'設定 ResultGrid
'to get rsMerge
Set ResDG.DataSource = Nothing
Set rsMergeStd = Nothing
Set rsMergeStd = New Recordset
If rsMergeStd.State <> adStateClosed Then rsMergeStd.Close
With rsMergeStd
.Fields.Append "FacID", adInteger '紀錄控制因子順序
.Fields.Append "FacName", adBSTR '紀錄控制因子名稱
.Fields.Append "FacSI", adSingle '控制因子的 SI 值
.Fields.Append "FacDF", adInteger '控制因子的 DF 值 ( 自由度 )
.Fields.Append "FacV", adSingle '控制因子的 V 值
.Fields.Append "FacF", adSingle '控制因子的 F 值
.Fields.Append "FacP", adSingle '控制因子的 @(%) 值
If .State = adStateClosed Then .Open
For i = 1 To AnoGrid.Rows - 1
.AddNew
.Fields(0).Value = i
.Fields(1).Value = AnoGrid.TextMatrix(i, 0)
.Fields(2).Value = AnoGrid.TextMatrix(i, 1)
.Fields(3).Value = AnoGrid.TextMatrix(i, 2)
.Fields(4).Value = AnoGrid.TextMatrix(i, 3)
If AnoGrid.TextMatrix(i, 4) <> "--" Then
.Fields(5).Value = AnoGrid.TextMatrix(i, 4)
End If
If AnoGrid.TextMatrix(i, 5) <> "--" Then
.Fields(6).Value = AnoGrid.TextMatrix(i, 5)
End If
.Update
Next i
End With
Call setResGrid
Label7.Caption = Label5.Caption
Label8.Caption = Label6.Caption
End Sub
Private Sub Form_Load()
'設定 VarGrid
AllDataValue = 0
pDataValue = 0
Call setVarGrid
'設定 AnoGrid
Set crsTemp = New Recordset
Set crsTemp = rsStdData.Clone
Call setAnoGrid
'設定 ResultGrid
'to get rsMerge
Set rsMergeStd = New Recordset
If rsMergeStd.State <> adStateClosed Then rsMergeStd.Close
With rsMergeStd
.Fields.Append "FacID", adInteger '紀錄控制因子順序
.Fields.Append "FacName", adBSTR '紀錄控制因子名稱
.Fields.Append "FacSI", adSingle '控制因子的 SI 值
.Fields.Append "FacDF", adInteger '控制因子的 DF 值 ( 自由度 )
.Fields.Append "FacV", adSingle '控制因子的 V 值
.Fields.Append "FacF", adSingle '控制因子的 F 值
.Fields.Append "FacP", adSingle '控制因子的 @(%) 值
If .State = adStateClosed Then .Open
For i = 1 To AnoGrid.Rows - 1
.AddNew
.Fields(0).Value = i
.Fields(1).Value = AnoGrid.TextMatrix(i, 0)
.Fields(2).Value = AnoGrid.TextMatrix(i, 1)
.Fields(3).Value = AnoGrid.TextMatrix(i, 2)
.Fields(4).Value = AnoGrid.TextMatrix(i, 3)
If AnoGrid.TextMatrix(i, 4) <> "--" Then
.Fields(5).Value = AnoGrid.TextMatrix(i, 4)
End If
If AnoGrid.TextMatrix(i, 5) <> "--" Then
.Fields(6).Value = AnoGrid.TextMatrix(i, 5)
End If
.Update
Next i
End With
Call setResGrid
End Sub
Private Sub setVarGrid()
With VarGrid
.Cols = 6
.Rows = rsStdData.RecordCount + 1
.TextMatrix(0, 0) = "COL"
.TextMatrix(0, 1) = "FACTOR"
.TextMatrix(0, 2) = "SI"
.TextMatrix(0, 3) = "AVE(L1)"
.TextMatrix(0, 4) = "AVE(L2)"
.TextMatrix(0, 5) = "AVE(L3)"
If rsStdData.RecordCount > 0 Then
rsStdData.MoveFirst
For i = 1 To rsStdData.RecordCount
.TextMatrix(i, 0) = rsStdData.Fields(0).Value
.TextMatrix(i, 1) = rsStdData.Fields(1).Value
.TextMatrix(i, 2) = rsStdData.Fields(2).Value
If IsNull(rsStdData.Fields(3).Value) Or rsStdData.Fields(3).Value = "" Then
.TextMatrix(i, 3) = "--"
Else
.TextMatrix(i, 3) = rsStdData.Fields(3).Value
End If
If IsNull(rsStdData.Fields(4).Value) Or rsStdData.Fields(4).Value = "" Then
.TextMatrix(i, 4) = "--"
Else
.TextMatrix(i, 4) = rsStdData.Fields(4).Value
End If
If IsNull(rsStdData.Fields(5).Value) Or rsStdData.Fields(5).Value = "" Then
.TextMatrix(i, 5) = "--"
Else
.TextMatrix(i, 5) = rsStdData.Fields(5).Value
End If
AllDataValue = AllDataValue + rsStdData.Fields(2).Value
rsStdData.MoveNext
Next i
End If
'資料置中
For k = 0 To .Cols - 1
.ColAlignmentFixed(k) = 4
Next k
Label4.Caption = "St = " & AllDataValue
End With
End Sub
Private Sub setAnoGrid()
With AnoGrid
crsTemp.Sort = "FacSI Desc"
.Cols = 6
.Rows = crsTemp.RecordCount + 1
.TextMatrix(0, 0) = "FACTOR"
.TextMatrix(0, 1) = "SI"
.TextMatrix(0, 2) = "DF"
.TextMatrix(0, 3) = "V"
.TextMatrix(0, 4) = "F"
.TextMatrix(0, 5) = "@(%)"
If crsTemp.RecordCount > 0 Then
crsTemp.MoveLast
LastData = crsTemp.Fields(2).Value
crsTemp.MoveFirst
pDataValue = 0
For i = 1 To crsTemp.RecordCount
.TextMatrix(i, 0) = crsTemp.Fields(1).Value
.TextMatrix(i, 1) = crsTemp.Fields(2).Value
.TextMatrix(i, 2) = 1
.TextMatrix(i, 3) = crsTemp.Fields(2).Value
If LastData = 0 Then
.TextMatrix(i, 4) = "--"
.TextMatrix(i, 5) = "--"
Else
If i <> .Rows - 1 Then
.TextMatrix(i, 4) = cLaiFormat(crsTemp.Fields(2).Value / LastData, 3)
Else
.TextMatrix(i, 4) = "--"
End If
If i <> .Rows - 1 Then
.TextMatrix(i, 5) = cLaiFormat(100 * ((crsTemp.Fields(2).Value - LastData) / AllDataValue), 3)
pDataValue = pDataValue + cLaiFormat(100 * ((crsTemp.Fields(2).Value - LastData) / AllDataValue), 3)
Else
.TextMatrix(i, 5) = cLaiFormat((100 - pDataValue), 3)
End If
End If
crsTemp.MoveNext
Next i
End If
'資料置中
For k = 0 To .Cols - 1
.ColAlignmentFixed(k) = 4
Next k
Label5.Caption = "St = " & AllDataValue
Label6.Caption = "@t = " & pDataValue
End With
End Sub
Private Sub setResGrid() '合併出圖 ( 重新傳入 rsMerge, pDataValue )
rsMergeStd.Sort = "FacID"
With ResDG
.Columns(0).DataField = "FacName"
.Columns(1).DataField = "FacSI"
.Columns(2).DataField = "FacDF"
.Columns(3).DataField = "FacV"
.Columns(4).DataField = "FacF"
.Columns(5).DataField = "FacP"
Set .DataSource = rsMergeStd
End With
' With ResGrid
' crsTemp.Sort = "FacSI Desc"
' .Cols = 6
' .Rows = crsTemp.RecordCount + 1
' .TextMatrix(0, 0) = "FACTOR"
' .TextMatrix(0, 1) = "SI"
' .TextMatrix(0, 2) = "DF"
' .TextMatrix(0, 3) = "V"
' .TextMatrix(0, 4) = "F"
' .TextMatrix(0, 5) = "@(%)"
' If crsTemp.RecordCount > 0 Then
' crsTemp.MoveLast
' LastData = crsTemp.Fields(2).Value
' crsTemp.MoveFirst
' pDataValue = 0
' For i = 1 To crsTemp.RecordCount
' .TextMatrix(i, 0) = crsTemp.Fields(1).Value
' .TextMatrix(i, 1) = crsTemp.Fields(2).Value
' .TextMatrix(i, 2) = 1
' .TextMatrix(i, 3) = crsTemp.Fields(2).Value
' If i <> .Rows - 1 Then
' .TextMatrix(i, 4) = cLaiFormat(crsTemp.Fields(2).Value / LastData, 3)
' Else
' .TextMatrix(i, 4) = "--"
' End If
' If i <> .Rows - 1 Then
' .TextMatrix(i, 5) = cLaiFormat(100 * ((crsTemp.Fields(2).Value - LastData) / AllDataValue), 3)
' pDataValue = pDataValue + cLaiFormat(100 * ((crsTemp.Fields(2).Value - LastData) / AllDataValue), 3)
' Else
' .TextMatrix(i, 5) = cLaiFormat((100 - pDataValue), 3)
' End If
' crsTemp.MoveNext
' Next i
' End If
' '資料置中
' For k = 0 To .Cols - 1
' .ColAlignmentFixed(k) = 4
' Next k
Label7.Caption = "St = " & AllDataValue
Label8.Caption = "@t = " & pDataValue
' End With
End Sub
Private Sub Form_Resize()
'設定 Form 位置
Me.Top = (ODEMDIForm.ScaleHeight - Me.Height) / 2
Me.Left = (ODEMDIForm.ScaleWidth - Me.Width) / 2
End Sub