[AccessD] Test whether Array initialised

Jim Lawrence accessd at shaw.ca
Sat Jun 20 14:23:53 CDT 2009


Hi A.D. Tejpal:

Now that works perfect in every case... Good thought.

Jim

-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of A.D.Tejpal
Sent: Saturday, June 20, 2009 11:13 AM
To: Access Developers discussion and problem solving
Subject: Re: [AccessD] Test whether Array initialised

Gustav, Stuart,

    The function given below could also be considered:

'================================
Function Fn_IsArrayInitialized(ByVal varArray _
                                    As Variant) As Boolean
    On Error Resume Next
    Fn_IsArrayInitialized = _
                Not IsError(UBound(varArray) >= 0)
End Function
'================================

Best wishes,
A.D. Tejpal
------------

  ----- Original Message ----- 
  From: Gustav Brock 
  To: accessd at databaseadvisors.com 
  Sent: Saturday, June 20, 2009 18:59
  Subject: Re: [AccessD] Test whether Array initialised


  Hi Stuart

  Does that work with A97? If I run this:

    Dim aryDemo()
    Debug.Print Not Not aryDemo()

  an error (mismatch) is raised.

  I use this function for the purpose which just catches the error:

  <code>
  Public Function IsReDimmed(ByRef varArrayToCheck) As Boolean

  ' Checks a dynamic array to see if it has been ReDim'med.
  ' This is to prevent errors before applying LBound() or UBound().
  '
  ' Returns False if varArrayToCheck is dynamic and
  ' never has been ReDim'med or just has been erased.
  '
  ' 2001-08-11. Cactus Data ApS, CPH. Gustav Brock.

    Dim booIsReDimmed As Boolean
    
    On Error GoTo Err_IsReDimmed
     
    If IsArray(varArrayToCheck) = True Then
      ' Check if varArrayToCheck is ReDim'med.
      ' LBound() will fail if varArrayToCheck not has been ReDim'med.
      booIsReDimmed = LBound(varArrayToCheck) Imp True
      ' No error raised; varArrayToCheck is ReDim'med.
    Else
      ' varArrayToCheck is not an array.
    End If
    
    IsReDimmed = booIsReDimmed
    
  Exit_IsReDimmed:
    Exit Function
    
  Err_IsReDimmed:
    Select Case Err
      Case 9
        ' Subscript (array index) out of range.
        ' varArrayToCheck is dynamic and not ReDim'med.
      Case Else
        ' Other error.
    End Select
      ' Exit function returning False.
    Resume Exit_IsReDimmed

  End Function
  </code>

  Note the use of Imp, one of the few cases I've found a use for this
operator.

  /gustav


  >>> stuart at lexacorp.com.pg 20-06-2009 14:43:02 >>>
  I've been doing quite a bit with arrays in the last couple of days using 
  ....
  ReDim Preserve myArray(UBound(MyArray()) +1)
  ....

  This works fine it the array has been  initialized, but throws an error
the first time round 
  because the array has not been initialized.  I've just come across a neat
hack to test whether 
  the array has been initialized:

  "IF NOT NOT myArray()" ...  

  This takes the 32-bit pointer value in the array variable, mirror the
bits, and then mirror them 
  again.  If the array has not been initialized, the pointer is 0 so it
returns false, if it has been, 
  it returns the pointer value. Since this is non-zero, it returns true. 

  -- 
  Stuart 


  -- 
  AccessD mailing list
  AccessD at databaseadvisors.com
  http://databaseadvisors.com/mailman/listinfo/accessd
  Website: http://www.databaseadvisors.com
-- 
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com




More information about the AccessD mailing list