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 4 - Saving data to a formatted CSV file
    • 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

    You are currently reviewing an older revision of this page.

    • History View current version

    Searching and Evaluating Data in a drawing with VBA: Part 4 - Saving data to a formatted CSV file

       
      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 part, we read the endpoints of all lines of a drawing model and exported it to a text file. The text file, however, is rather confusing and difficult to interpret. 
    We can fix this issue by summarizing each set of data about a line to a line of text in the file seperated with a semicolon (;).
    We can also create a .csv file to open directly in Excel.
    In order to identify the data that is in the beginning of the file, a header must be added so that each column can be identified. 
    One possible approach might look like the following:

    Sub elementinfo ()
    Dim ele As Line Element
    Dim Ee As ElementEnumerator
    Dim startpoint, endpoint As  Point3D
    Dim Sc As New ElementScanCriteria
    Dim header line As String
    Sc.ExcludeAllTypes
    Sc.IncludeType msdElementTypeLine
    Dim file As  String
    file = ActiveDesignFile.FullName + "- Daten.csv"
    Open file For Output As #1
    Header = "early X; Y early; early Z; Ibid X, Y End; End Z"
    Print # 1, header
    Set Ee = ActiveModelReference.GraphicalElementCache.Scan(Sc)
    Do While Ee.MoveNext
            Set ele = Ee.Current.AsLineElement
            startpoint = ele.startPoint
            Endpoint = ele.EndPoint
            Line = startpoint.X & ";" & startpoint.Y & ";" & startpoint.Z & ";"
            Line = Line & endppoint.X & ";"  & endpoint.Y & ";"  & endpoint.Z
            Print # 1, Line
    Loop
    Close #1
    End Sub

    The previous issues each take place in a seperate text or CSV file when using such programs that have several drawings collected in a file. 
    There are different ways to achieve this, but we will use environment variables in the file name stored including the path.
    The beginning of the configuration variable is retrieved and will be used as the output file. 
    If this variable is not set, the routine will fail with an appropriate error message.
    The configuration variable can be defined in Microstation as a user variable. One way to get there is to use the "Configuration" option under the "Workspace" dropdown menu. 
    Hitting "New" will open the following menu, where the variable can be set.

    In the configuration variables, we can access the Active Workspace object. It provides several methods, which might look something like this:

    If ActiveWorkspace.IsConfigurationVariableDefined("MyOutputFile") Then
        file = ActiveWorkspace.ConfigurationVariableValue("MyOutputFile")
    Else
        MsgBox "The Variable My output file is undefined, processing canceled" , vbCritical
        Exit Sub
    End  If

    In the header, I will add a column that retrieves the complete drawing name with a path and ultimately retrieves the data to be added to the .csv file. We will "append" the open file instead of

    "output". Overall this leads to the following routine:

    Sub elementinfo ()
    Dim ele As Line Element
    Dim Ee As ElementEnumerator
    Dim startpoint, endpoint As  Point3D
    Dim Sc As New ElementScanCriteria
    Dim header line As  String
    Sc.ExcludeAllTypes
    Sc.IncludeType msdElementTypeLine
     Dim file As String
    If ActiveWorkspace.IsConfigurationVariableDefined("MyOutputFile") Then
        file = ActiveWorkspace.ConfigurationVariableValue("MyOutputFile")
    Else
        MsgBox "The Variable My output file is undefined, processing canceled" , vbCritical
        Exit Sub
    End  If
    'File = ActiveDesignFile.FullName + "- Daten.csv"
    Open datei For Append As #1
    Header = "early X; Y early; early Z; Ibid X, Y End; End Z;"  & ActiveDesignFile.FullName
    Print # 1, header
    Set Ee = ActiveModelReference.GraphicalElementCache.Scan(Sc)
    Do While Ee.MoveNext
            Set ele = Ee.Current.AsLineElement
            startpoint = ele.startPoint
            Endpoint = ele.EndPoint
            Line = startpoint.X & ";" & startpoint.Y & ";" & startpoint.Z & ";"
            Line = Line & endpoint.X & ";"  & endpoint.Y & ";"  & endpoint.Z
            Print # 1, Line
    Loop
    Close #1
    End Sub

    To apply this routine in batch mode, we only need the Keyin to start the routine. In MicroStation Batch Process a text file is required where the commands would be listed to be executed. In our

    case, we will use Keyin to call the VBA routine.

    One should take the .MVBA project files in one of the VBA directories that are listed in the configuration variables MS_VBASEARCHDIRECTORIES. By default, they are located in \WorkSpace\System\VBA. If you store your files there, you can use it simultaneously with the following Keyin to load and run:

    vba run [default]module1.elementinfo

    If the subroutine named element info is clear, you can use this shorthand instead of the module name (the square brackets should remain): 
             VBA Run [default] Element info 
    This command line is derived from this generic Keyin:
             VBA run [projectname] modulename.subroutine

    So far, we know how to read element information and output it to a file.

    << RETURN TO PART 3 <<          >> CONTINUE TO PART 5 >>

    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

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