I am struggling with some code.

Jon123

Registered User.
Local time
Today, 06:50
Joined
Aug 29, 2003
Messages
668
I'm trying to use field valuse to determine certian error msg. I think my code is good when all fields have data but if some are not filled in yet and are Null then I think its causing me trouble. If you look at my code Fields dat100 - dat106 all have data in them the user will enter data in fileds dat107 - dat113 I have this code in the after update command line on dat107 thru dat113 since the user can enter the data in any order they choose. So if any values are outside the spec. then I want to display the "POOS"

Code:
   If ([dat107] - [dat100] < 0.1) Or ([dat107] - [dat100] > -0.1) Then
          Me.POOS.Visible = True
   ElseIf ([dat108] - [dat101] < 0.1) Or ([dat108] - [dat101] > -0.1) Then
          Me.POOS.Visible = True
   ElseIf ([dat109] - [dat102] < 0.1) Or ([dat109] - [dat102] > -0.1) Then
          Me.POOS.Visible = True
   ElseIf ([dat110] - [dat103] < 0.1) Or ([dat110] - [dat103] > -0.1) Then
          Me.POOS.Visible = True
   ElseIf ([dat111] - [dat104] < 0.1) Or ([dat111] - [dat104] > -0.1) Then
          Me.POOS.Visible = True
   ElseIf ([dat112] - [dat105] < 0.1) Or ([dat112] - [dat105] > -0.1) Then
          Me.POOS.Visible = True
   ElseIf ([dat113] - [dat106] < 0.1) Or ([dat113] - [dat106] > -0.1) Then
          Me.POOS.Visible = True
   Else ' All probes in spec
          Me.POOS.Visible = False
   End If
 
Personally I would rewrite it as a series of 'OR' statements. A Boolean flag (blOutOfRange) starts with the value of False and if any of the subsequent statements is true then the flag gets set to True. Finally the flag is used to set the Visible attribute of Me.POOS

Code:
Dim blOutOfRange as Boolean
  blOutOfRange = False

  blOutOfRange = blOutOfRange Or ([dat107] - [dat100] < 0.1)
  blOutOfRange = blOutOfRange Or ([dat107] - [dat100] > -0.1)
  blOutOfRange = blOutOfRange Or ([dat108] - [dat101] < 0.1)
  blOutOfRange = blOutOfRange Or ([dat108] - [dat101] > -0.1)
  blOutOfRange = blOutOfRange Or ([dat109] - [dat102] < 0.1)
  blOutOfRange = blOutOfRange Or ([dat109] - [dat102] > -0.1)
  blOutOfRange = blOutOfRange Or ([dat110] - [dat103] < 0.1)
  blOutOfRange = blOutOfRange Or ([dat110] - [dat103] > -0.1)
  blOutOfRange = blOutOfRange Or ([dat111] - [dat104] < 0.1)
  blOutOfRange = blOutOfRange Or ([dat111] - [dat104] > -0.1)
  blOutOfRange = blOutOfRange Or ([dat112] - [dat105] < 0.1)
  blOutOfRange = blOutOfRange Or ([dat112] - [dat105] > -0.1)
  blOutOfRange = blOutOfRange Or ([dat113] - [dat106] < 0.1)
  blOutOfRange = blOutOfRange Or ([dat113] - [dat106] > -0.1)
 
  Me.POOS.Visible =   blOutOfRange

Looking at your logic you might be able simplify it by using the ABS() function which returns the Absolute magnitude of a value without the + / - part.


Code:
Dim blOutOfRange as Boolean
  blOutOfRange = False

  blOutOfRange = blOutOfRange Or (ABS([dat107] - [dat100]) < 0.1)
  
  blOutOfRange = blOutOfRange Or (ABS([dat108] - [dat101]) < 0.1)

  blOutOfRange = blOutOfRange Or (ABS([dat109] - [dat102]) < 0.1)
  
  blOutOfRange = blOutOfRange Or (ABS([dat110] - [dat103]) < 0.1)
  
  blOutOfRange = blOutOfRange Or (ABS([dat111] - [dat104]) < 0.1)
  
  blOutOfRange = blOutOfRange Or (ABS([dat112] - [dat105]) < 0.1)

  blOutOfRange = blOutOfRange Or (ABS([dat113] - [dat106]) < 0.1)
 
  Me.POOS.Visible =   blOutOfRange

I'm not entirely sure of the logic your require but if you want the difference between two fields to be less than +/- 0.1 it would be

Code:
blOutOfRange = blOutOfRange Or (ABS([dat113] - [dat106]) < 0.1)

if you want the difference between two fields to be more than +/- 0.1 it would be
Code:
blOutOfRange = blOutOfRange Or (ABS([dat113] - [dat106]) > 0.1)
 
Last edited:
Have a look at the NZ and ABS function in the MS-Access Help file.
If you use the function ABS, you can take away the Or part in your code.
 

Users who are viewing this thread

Back
Top Bottom