Bentley Communities
Bentley Communities
  • Site
  • User
  • Site
  • Search
  • User
  • Welcome
  • Products
  • Support
  • About
  • More
  • Cancel
MicroStation
  • Product Communities
  • More
MicroStation
MicroStation Wiki Searching and Evaluating Data in a drawing with VBA: Part 8 - Evaluating Nested Complex Elements
    • Sign in

    • -MicroStation Wiki
      • +Learning Tips
      • -MicroStation
        • +3D Printing - MicroStation
        • +Animation - MicroStation
        • +Archive / Backup - MicroStation
        • +Base Geometry - MicroStation
        • +Batch Processing - MicroStation
        • +CONNECT Advisor - MicroStation
        • CONNECT Integration - MicroStation
        • +CONNECTION Client
        • +Cells - MicroStation
        • +Change Tracking - MicroStation
        • +Configuration - MicroStation
        • +Coordinate Systems - MicroStation
        • +Curves - MicroStation
        • +Custom Linestyles - MicroStation
        • +DGN - MicroStation
        • +DWG - MicroStation
        • +Database - MicroStation
        • +Detailing Symbols - MicroStation
        • +Dimensions - MicroStation
        • +Documentation & Help - MicroStation
        • +Drawing Aids - MicroStation
        • +Exception - MicroStation
        • +FAQ - MicroStation
        • +Feature Based Solids Modeling - MicroStation
        • +File Access - MicroStation
        • +GUI - MicroStation
        • +General - MicroStation
        • +Graphics Display - MicroStation
        • +Groups - MicroStation
        • +Hardware / Input Devices - MicroStation
        • +Import/Export - MicroStation
        • +Installation - MicroStation
        • +Interchange - MicroStation
        • +Interference - MicroStation
        • +Internationalization - MicroStation
        • +Levels - MicroStation
        • +Licensing - MicroStation
        • +Manipulation - MicroStation
        • +Markup / Redline - MicroStation
        • +Measure - MicroStation
        • +Mesh - MicroStation
        • +Models - MicroStation
        • +Multi-Lines - MicroStation
        • +OLE - MicroStation
        • +Other - MicroStation
        • +Parametrics - MicroStation
        • +Patterning - MicroStation
        • +Point Cloud - MicroStation
        • +Printing - MicroStation
        • -Programming - MicroStation
          • +General - Programming - MicroStation
          • +Macro Recorder - Programming - MicroStation
          • +MDL - Programming - MicroStation
          • -VBA - Programming - MicroStation
            • Automatic execution when opening or closing drawings
            • Automatic Subroutine Loading
            • Automatically generate plots with VBA
            • Avoiding Inaccuracies in VBA Methods - .FacetSolidAsShapes for SmartSolids
            • Bring All Text to a New Level with VBA
            • Browsing References for Specific Items
            • Calculating the range of Rotated Cells
            • Changing Colors of Levels in VBA
            • Changing display priority for references
            • Changing Element Colors from RGB to Indexed Color
            • Changing Layer Colors from RGB to an Indexed Color
            • Changing the Alignment of All Texts with VBA
            • Changing the display order of elements
            • Changing the presentation order of Layers
            • Changing the Transparency Settings of Levels with VBA
            • Cleaning Property Data with VBA
            • COM Server error
            • Create Engineering (HTML) Links in VBA
            • Creating Coordinates as Latitude and Longitude using VBA Lines
            • Creating VBA Levels - 'Level name is duplicate'
            • Deleting Lines of Length 0 Using VBA
            • Errors Attempting to Load VBA Projects
            • Errors while attempting to load VBA
            • Exporting the RGB Values of the Color Table to a Text File in VBA
            • Forms in an .mvba do not open some pc's
            • How to read the RGB values of the Attached Color Table
            • Keyin to load the VBA Project Manager in MicroStation Connect
            • Leaving a VBA Tools Dialog Box Open
            • Linking to VBA Elements with User Attributes
            • New Text Font Cannot be Assigned
            • Placing annotation cells with VBA
            • Print Organizer Control with VBA
            • Printing all Sheet Models to PDF Using VBA
            • Reading the Length of All Arcs
            • Removing All Object Data from Selected Cells in VBA
            • Replacing Points with Circles Using VBA
            • Replacing Text with VBA - Part 1: Introduction
            • Replacing Text with VBA - Part 2: Complex Structures
            • Running a VBA Routine by Keyin
            • -Searching and Evaluating Data in a drawing with VBA
              • Searching and Evaluating Data in a drawing with VBA: Part 1 - Preparation.
              • Searching and Evaluating Data in a drawing with VBA: Part 10 - Reading Attribute Data
              • Searching and Evaluating Data in a drawing with VBA: Part 2 - Reading properties of Elements
              • Searching and Evaluating Data in a drawing with VBA: Part 3 - Reading Properties of Elements and Exporting to a Text File
              • Searching and Evaluating Data in a drawing with VBA: Part 4 - Saving data to a formatted CSV file
              • Searching and Evaluating Data in a drawing with VBA: Part 5 - Reading More General Properties of Elements
              • Searching and Evaluating Data in a drawing with VBA: Part 6 - Evaluating Simple Complex Elements
              • Searching and Evaluating Data in a drawing with VBA: Part 7 - Evaluating General Complex Elements
              • Searching and Evaluating Data in a drawing with VBA: Part 8 - Evaluating Nested Complex Elements
              • Searching and Evaluating Data in a drawing with VBA: Part 9 - PropertyHandler for Element Analysis
            • Searching and Selecting Text Fields with VBA
            • Updating sequence control with VBA
            • Using a VBA Macro
            • Using the VBA object PropertyHandler to change the Element Information
            • VBA - Interface Error: 0x80040502
            • VBA Error in Execution: Project or Library Not Found
            • What are these "Default.mvba" files?
        • +Project Navigation - MicroStation
        • +Properties - MicroStation
        • +RSS Feeds - MicroStation
        • +Reference - MicroStation
        • +Security - MicroStation
        • +Selection - MicroStation
        • +Settings - MicroStation
        • +Sheet Composition - MicroStation
        • +Solids - MicroStation
        • +Standards - MicroStation
        • +Surfaces - MicroStation
        • +Tables - MicroStation
        • +Text - MicroStation
        • +UI Customization - MicroStation
        • +Units - MicroStation
        • +View - MicroStation
        • +Visualization - MicroStation
        • Welcome Page - MicroStation
        • +Accreditation - MicroStation
        • +i.Models - MicroStation
        • +ProjectWise Integration
        • +Raster - MicroStation
    • +Administration Wiki
    • +Annotations Wiki
    • +Bentley View Wiki
    • +MicroStation PowerDraft
    • +Programming Wiki
    • +Visualization Wiki

     
     Questions about this article, topic, or product? Click here. 

    Searching and Evaluating Data in a drawing with VBA: Part 8 - Evaluating Nested Complex Elements

       
      Applies To 
       
      Product(s): MicroStation
      Version(s): 08.11.09.578
      Environment:  Windows 7 32 bit,Windows 7 64 bit
      Area:  Programming
      Subarea:  VBA
      Original Author: Tristan Anderson, Bentley Technical Support Group
       

     In the previous section, we studied simple cells. However, we have not yet observed nested cells, so we will cover that next.

    From the example of the cells and groups from the previous section (Part 7), I have generated new cells in each of the previous cells, which I called Cell2 through Cell6. When using the "Analyze Element" tool, the structure can be convoluted and confusing.

    With this example, I want to demonstrate that the current way of evaluating cells has reached its limit. To get properties of much more complex cells, we would have a lot of lines of code to generate.

    Instead, I will show you an easier way to accomplish this by using recursion. Specifically, in addition to the existing subroutine elementinfo where the evaluation will start, I will store the analysis of cells in another subroutine called "disassemble". The special thing about this routine is that it repeatedly calls itself, which is a process called recursion.

    Below, I have put together an example:

    Public datei As String
     
    Sub elementinfo()
    Dim ele As Element
    Dim ee As ElementEnumerator
    Dim startpoint, endpoint As Point3d
    Dim header, line As String
    Dim oL() As Element
    Dim Cellname As String
     If ActiveWorkspace.IsConfigurationVariableDefined("MyOutputFile") Then
         line = ActiveWorkspace.ConfigurationVariableValue("MyOutputFile")
    Else
         MsgBox "The variable MyOutputFile is not defined. Stopped Processing", vbCritical
     Exit Sub
    End If
    Set ee = ActiveModelReference.GraphicalElementCache.Scan()
    Do While ee.MoveNext
         Call disassemble(ee.Current, 1)
    Loop
    End Sub
      
    Sub disassemble(ele As Element, depth As Integer)
    Dim oL() As Element
    Dim line As String
    If ele.IsCellElement Then
         oL = ele.AsCellElement.GetSubElements.BuildArrayFromContents
         Open file For Append As #1
         line = ""
     For i = 2 To depth
         line = line & " ;"
     Next
     line = line + "Depth: " & depth & ";Cell < " & ele.AsCellElement.Name & "> with "
     line = line & UBound(oL) - LBound(oL) + 1 & " Element"
     Print #1, line
     Close #1
     For i = LBound(oL) To UBound(oL)
         Call disassemble(oL(i), depth + 1)
     Next
    Else
         Open file For Append As #1
         line = ""
     For i = 2 To depth
         line = line & " ;"
     Next
     line = line + TypeName(ele)
     Print #1, line
    Close #1
     End If
    End Sub

    In the previous sub elementinfo, I only actually read the name of the file into which the data should be written. I save the name in a public variable file that is declared in the elementinfo outside the subroutine. *Caution*: Observe the declaration of the variable element file info if removed from the subroutine, otherwise the validity ranges of the variables overlap with the result that breaks down in the sub, and the filename will not be created. The actual analysis of the data is now decomposed in the subroutine. The sub elementinfo now calls the sub disassemble for each item in the drawing.

    Disassemble only checks for whether or not the element in the routine that is called is a cell. If so, the sub will break down each of the elements called again, but otherwise it will write the details to a file.

    In order to make the nesting work correctly, I gave it a depth with the same name, so that each variable and place is visually apparent in the output file by an addition of a column.

    To do this, I added the following lines:

    line = ""
     For i = 2 To depth
         line = line & " ;"
     Next

    The resulting .csv file in Excel will look something like this:

    This is, of course, just a suggestion on how to tackle the problem, and it serves as more of a visual presentation of the data read. Often, not all of the data is important and you are trying to look for a very specific piece of information such as text within cells that you want to read or modify. We will tackle changing data in a future article. In the next section, we will deal with the PropertyHandler which provides additional ways to read data.

    << RETURN TO PART 7 <<                 >> CONTINUE ON TO PART 9 >>

    • Windows 7 32 bit
    • MicroStation
    • VBA
    • Windows 7 64 bit
    • Programming
    • en
    • 08.11.09.578
    • SELECTsupport
    • Share
    • History
    • More
    • Cancel
    • Tristan Anderson Created by Bentley Colleague Tristan Anderson
    • When: Mon, Jun 22 2015 1:18 PM
    • Tristan Anderson Last revision by Bentley Colleague Tristan Anderson
    • When: Tue, Jun 23 2015 12:04 PM
    • Revisions: 3
    • Comments: 0
    Recommended
    Related
    Communities
    • Home
    • Getting Started
    • Community Central
    • Products
    • Support
    • Secure File Upload
    • Feedback
    Support and Services
    • Home
    • Product Support
    • Downloads
    • Subscription Services Portal
    Training and Learning
    • Home
    • About Bentley Institute
    • My Learning History
    • Reference Books
    Social Media
    •    LinkedIn
    •    Facebook
    •    Twitter
    •    YouTube
    •    RSS Feed
    •    Email

    © 2021 Bentley Systems, Incorporated  |  Contact Us  |  Privacy |  Terms of Use  |  Cookies