building a list from scanned TextNodeElements

What is wrong with my code?

Sub EE_Example()
Dim ee As ElementEnumerator
Dim es As New ElementScanCriteria
Dim elArray() As Element
Dim i As Long
Dim iStart As Long
Dim iEnd As Long
Dim elLevel As Level
Dim elVariant() As Variant
Dim bigString As String

'
' set element scan criteria to find only described elements
'

Set elLevel = ActiveDesignFile.Levels("DRAWING TEXT")

es.ExcludeAllColors
es.IncludeColor 7
es.ExcludeAllLevels
es.IncludeLevel elLevel
es.ExcludeAllTypes
es.IncludeType msdElementTypeTextNode

'
' set enumerator from active model
'
Set ee = ActiveModelReference.Scan(es)

'
' get an element array of all elements found
'
elArray = ee.BuildArrayFromContents
iStart = LBound(elArray)
iEnd = UBound(elArray)

'
' loop through array and get the second line of text
'
For i = iStart To iEnd
elVariant(i) = elArray(i).AsTextNodeElement.TextLine(2)
bigString = Join(elVariant(i), ",")
Next


End Sub

  • All,

        My apologies, it was late and I was frustrated.

    My intention is for this code to scan through the model and get the text on the 2nd line of the scanned textnodeelements. Then I want to place the text string from each into a big comma delimited list ("bigstring").

    Thanks for all your help.

  • Unknown said:
    What is wrong with my code?

    As others have written, do you want us to guess?

    Does your code throw an error, or does it simply not do what you expect?

    Put some Debug.Print and Debug.Assert statements in there to reassure yourself that the code does what you expect.

    Debug.Printlets you, the developer, see the state of your code and confirm it does what you want.

    Debug.Assert lets you validate a fact — it questions our assumptions. For example …

     elArray = ee.BuildArrayFromContents
    iStart = LBound(elArray)
    iEnd = UBound(elArray)
    ' Show me the size of my array
    Debug.Print "Array size=" & CStr(iEnd - iStart)
    ' Assert that the array is not empty
    Debug.Assert (0 < (iEnd - iStart))

    Regards, Jon Summers
    LA Solutions

     
    Regards, Jon Summers
    LA Solutions

  • Reu,

    You don't say what your code is doing wrong. So we are left to speculate. I don't have access to MicroStation on the computer I typing this response on so I can't test it out now but a few things pop out at me

    1. elVariant() is dimensioned as a Variant but it contains string values. Change the type to String. 
      Dim elVariant() as String 
       
    2. The value of bigString is being set to the last value of elVariant plus a ",". You probably want the value of bigString to be a concatenation of all of the text node lines.
       bigString = bigString & elVariant(i) & ","
       
    3. You need to set an error check if you encounter a text node that only has one line.
       
    4. At the end of the sub the last character in the bigString variable will be a comma (,) which is probably not what you want. Use the Len and Left$ functions to strip off the last character
      bigString = Left$(bigString,Len(bigString)-1)
    Hopefully this will solve some of the problems you are having.
    Rod

    Rod Wing
    Senior Systems Analyst

    Answer Verified By: rashil 

  • Hi,

    What is this routine doing, and what do you want it to do?

    I don't think you need the "()" in the elVariant dim statement

    I think you may want:

    elVariant = elArray(i).AsTextNoteElement.TextLine(2)

    bigString = bigString & elVariant & ", "

    --Robert