Mark Franz
asked on
Option Buttons, a better way?
Say I have these options;
[Frame1]
Private Sub optA_Click()
Private Sub optB_Click()
[Frame2]
Private Sub optC_Click()
Private Sub optD_Click()
Is there a better way to do this?
Private Sub cmdCalc_Click()
If optA Then
If optC Then
intM1 = 2.5
intM2 = 3.5
Else
intM1 = 3.5
intM2 = 4.5
End If
ElseIf optB Then
If optC Then
intM1 = 3
intM2 = 4
Else
intM1 = 4
intM2 = 5
End If
End If
This works, but I think theres a better way...
[Frame1]
Private Sub optA_Click()
Private Sub optB_Click()
[Frame2]
Private Sub optC_Click()
Private Sub optD_Click()
Is there a better way to do this?
Private Sub cmdCalc_Click()
If optA Then
If optC Then
intM1 = 2.5
intM2 = 3.5
Else
intM1 = 3.5
intM2 = 4.5
End If
ElseIf optB Then
If optC Then
intM1 = 3
intM2 = 4
Else
intM1 = 4
intM2 = 5
End If
End If
This works, but I think theres a better way...
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
If you'll be expanding this list, throw everything into a database.
The table will be a two-part key like this:
tblMValue
=========
KeyAB (integer)
KeyCD (integer)
MValue1 (double)
MValue2 (double)
Records:
KeyAB KeyCD MValue1 MValue2
0 (A) 0 (C) 2.5 3.5
0 (A) 1 (D) 3.5 4.5
1 (B) 0 (C) 3 4
1 (B) 1 (D) 4 5
Query:
SELECT MValue1, MValue2 FROM tblMValue WHERE KeyAB = (#1) AND KeyCD = (#2)
#1 and #2 are values extracted from your option buttons, which could be control arrays that have their index=the table key.
Then:
rstMValue.Open strSQL
if rstMValue.EOF then
msgbox "couldn't find combination"
else
intM1 = rstMValue.Fields("MValue1" ).Value
intM2 = rstMValue.Fields("MValue2" ).Value
endif
rstMValue.close
The table will be a two-part key like this:
tblMValue
=========
KeyAB (integer)
KeyCD (integer)
MValue1 (double)
MValue2 (double)
Records:
KeyAB KeyCD MValue1 MValue2
0 (A) 0 (C) 2.5 3.5
0 (A) 1 (D) 3.5 4.5
1 (B) 0 (C) 3 4
1 (B) 1 (D) 4 5
Query:
SELECT MValue1, MValue2 FROM tblMValue WHERE KeyAB = (#1) AND KeyCD = (#2)
#1 and #2 are values extracted from your option buttons, which could be control arrays that have their index=the table key.
Then:
rstMValue.Open strSQL
if rstMValue.EOF then
msgbox "couldn't find combination"
else
intM1 = rstMValue.Fields("MValue1"
intM2 = rstMValue.Fields("MValue2"
endif
rstMValue.close
ASKER
Not really a dB issue... but a good suggestion.
Angelll you pretty much had the idea I was trying to work with, but Tiger has what would probably be a more efficient solution.
Let me try them both and do an analysis.
Angelll you pretty much had the idea I was trying to work with, but Tiger has what would probably be a more efficient solution.
Let me try them both and do an analysis.
ASKER
OK... Same scenario, different values for M2 if optA or optB selected;
If optA Then
If optC Then
intM1 = 2.5
intM2 = 4
Else
intM1 = 3.5
intM2 = 5
End If
ElseIf optB Then
If optC Then
intM1 = 3
intM2 = 4
Else
intM1 = 4
intM2 = 5
End If
End If
So in other words, M2 is going to be either 4 or 5.
This works, but it looks redundant on mvValue2;
Private Sub Form_Load()
mvValue1 = Array(2.5, 3.5, 3, 4)
mvValue2 = Array(4, 5, 4, 5)
End Sub
Private Sub cmdCalc_Click()
Dim I As Long
I = IIf(optA.Value, 0, 2) + IIf(optC.Value, 0, 1)
intM1 = mvValue1(I)
intM2 = mvVAlue2(I)
End Sub
If optA Then
If optC Then
intM1 = 2.5
intM2 = 4
Else
intM1 = 3.5
intM2 = 5
End If
ElseIf optB Then
If optC Then
intM1 = 3
intM2 = 4
Else
intM1 = 4
intM2 = 5
End If
End If
So in other words, M2 is going to be either 4 or 5.
This works, but it looks redundant on mvValue2;
Private Sub Form_Load()
mvValue1 = Array(2.5, 3.5, 3, 4)
mvValue2 = Array(4, 5, 4, 5)
End Sub
Private Sub cmdCalc_Click()
Dim I As Long
I = IIf(optA.Value, 0, 2) + IIf(optC.Value, 0, 1)
intM1 = mvValue1(I)
intM2 = mvVAlue2(I)
End Sub
It may seem redundant, but unless you can guarantee that those values will always be the same, it's worth keeping it this way. The processing time is so minimal that it doesn't hurt to keep it.
ASKER
I'm told they will, and I agree... the footprint for the array is so small anyway. But just the same, is there a way around it?
One simple way is to modify the two lines to appear as follows:
mvValue2 = Array(4, 5)
intM2 = mvVAlue2(I mod 2)
mvValue2 = Array(4, 5)
intM2 = mvVAlue2(I mod 2)
ASKER
This worked excellent.
rspahitz, I'll throw you a bone too. ;-)
rspahitz, I'll throw you a bone too. ;-)
That wasn't necessary, but thanks.
I see it at https://www.experts-exchange.com/questions/20322798/For-rspahitz.html
I see it at https://www.experts-exchange.com/questions/20322798/For-rspahitz.html
[Form code]
Private mintBase as integer
Private mintOffset as integer
Private Sub Form_Load()
'to force the good values
optB.Value = true
optD.Value = true
optA.Value = true
optC.Value = true
End Sub
Private Sub optA_Click()
mintBase = 2,5
End Sub
Private Sub optB_Click()
mintBase = 3
End Sub
Private Sub optC_Click()
mintOffset = 0
End Sub
Private Sub optD_Click()
mintOffset = 1
End Sub
Private Sub cmdCalc_Click()
intM1 = mintBase + mintOffset
intM2 = intM1 + 1
End Sub
CHeers