Solved

Option Buttons, a better way?

Posted on 2002-07-11
10
154 Views
Last Modified: 2012-05-04
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...
0
Comment
Question by:mgfranz
10 Comments
 
LVL 142

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 7148484
Try this:

[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
0
 
LVL 4

Accepted Solution

by:
TigerZhao earned 50 total points
ID: 7148642
Private mvValue1 As Variant
Private mvValue2 As Variant

Private Sub Form_Load()
    mvValue1 = Array(2.5, 3.5, 3, 4)
    mvValue2 = Array(3.5, 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
0
 
LVL 22

Expert Comment

by:rspahitz
ID: 7149579
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
0
 
LVL 18

Author Comment

by:mgfranz
ID: 7149605
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.
0
 
LVL 18

Author Comment

by:mgfranz
ID: 7150233
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

0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 22

Expert Comment

by:rspahitz
ID: 7150243
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.
0
 
LVL 18

Author Comment

by:mgfranz
ID: 7150252
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?
0
 
LVL 22

Expert Comment

by:rspahitz
ID: 7150258
One simple way is to modify the two lines to appear as follows:

 mvValue2 = Array(4, 5)


  intM2 = mvVAlue2(I mod 2)
0
 
LVL 18

Author Comment

by:mgfranz
ID: 7150267
This worked excellent.

rspahitz, I'll throw you a bone too.  ;-)
0
 
LVL 22

Expert Comment

by:rspahitz
ID: 7150275
That wasn't necessary, but thanks.

I see it at http://www.experts-exchange.com/visualbasic/Q_20322798.html
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

When designing a form there are several BorderStyles to choose from, all of which can be classified as either 'Fixed' or 'Sizable' and I'd guess that 'Fixed Single' or one of the other fixed types is the most popular choice. I assume it's the most p…
Since upgrading to Office 2013 or higher installing the Smart Indenter addin will fail. This article will explain how to install it so it will work regardless of the Office version installed.
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…

911 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now