Reflection Desktop VBA Guide
HowTos / Get Data From a Spreadsheet
In This Topic
    Get Data From a Spreadsheet
    In This Topic

    This sample opens an Excel spreadsheet and copies data from the spreadsheet to a terminal screen in the Reflection demo, row by row, until it encounters an empty row. The PutText method is used to enter the data.

    If you prefer to run macros in a pre-configured session instead of creating your own sessions, you can download the VBA Sample Sessions and open the get-data-from-spreadsheet.xlsx  (IBM) file. The download package contains everything you need to run the macros in this file. See Download the VBA Sample Sessions.

    The screen in which the data is entered must be visible in the terminal window when you run the macro. 

    This sample applies only to IBM terminals

    To run this sample

    1. Create an Excel spreadsheet and add the data to the following cells on sheet1.
    2. Name the sheet "ProjectInfo" and save the Excel file as ProjectData.xlsx.
    3. In Reflection, create a new 3270 terminal session and enter "demo:ibm3270.sim" in the Host name /IP Address box.
    4. On the first demo screen, enter any credentials.
    5. On the second screen, enter "ISPF" at the prompt.
    6. On the third screen, enter "1" to select the Browse option.
    7. In the Visual Basic Project Explorer, insert a module under the Project folder for the new session and copy the sample code into the code pane, and press F5 to run the macro. (To see each row of data entered in the screen fields, press F8 to step through the procedure with the debugger.)  
      Get data from a spreadsheet
      Copy Code
      Sub GetDataFromExcel()
          Dim path As String
          Dim rCode As ReturnCode
          Dim row As Integer, col As Integer
          Dim wsData As String
          Dim ExcelApp As Object
          Dim wkBook As Object
       
          'set the full path to the Excel workbook
          path = Environ$("USERPROFILE") & "\Documents\" & "ProjectData.xlsx"
       
          'Open the Excel workbook and file
          Set ExcelApp = CreateObject("Excel.Application")
                                 
      
          ExcelApp.Visible = True
       
          'Open the workbook and activate the "ProjectInfo" sheet.
          Set wkBook = ExcelApp.Workbooks.Open(path)
          wkBook.Sheets("ProjectInfo").Activate
       
          'start on row 6
          row = 6
       
          'Loop until the data row is empty
          Do
       
              'Get a row of data and put it into the terminal form
              For col = 0 To 3
                  wsData = wkBook.Sheets("ProjectInfo").cells(row, (col + 2)).value
                  'Put text into field
                  rCode = ThisIbmScreen.PutText2(wsData, (col + 5), 18)
              Next col
         
              ThisIbmScreen.PutText2 "autoexec", 2, 15
              'Transmit the data
              ThisIbmScreen.SendControlKey (ControlKeyCode_Transmit)
                                 
             'Wait for the screen to be ready for input
              rCode = ThisIbmScreen.WaitForHostSettle(3000, 2000)
             
              'Go back to previous screen
              ThisIbmScreen.SendControlKey (ControlKeyCode_F3)
             
              'Wait for the screen to be ready for input
              rCode = ThisIbmScreen.WaitForHostSettle(3000, 2000)
         
              'Go to the next row in Excel
              row = row + 1
            
              'get the value of the first cell in the row so we can check for an empty row
              wsData = wkBook.Sheets("ProjectInfo").cells(row, 2).value
                     
          Loop While wsData <> ""
       
      End Sub
      

    Concepts

    First, this sample opens the Excel spreadsheet.

    Open the ProjectData.xlsl Excel worksheet
    Copy Code
    'set the full path to the Excel workbook
    path = Environ$("USERPROFILE") & "\Documents\" & "ProjectData.xlsx"
       
    'Open the Excel workbook and file
    Set ExcelApp = CreateObject("Excel.Application")
    ExcelApp.Visible = True
        
    'Open the workbook and activate the "ProjectInfo" sheet.
    Set wkBook = ExcelApp.Workbooks.Open(path)
    wkBook.Sheets("ProjectInfo").Activate
    

     

    Then it initializes the row to start on the spreadsheet . It also starts a loop to input each row of data in the spreadsheet into Reflection until an empty row is encountered.

    Get data in each cell on the row and enter it into the terminal form
    Copy Code
    'Get a row of data and put it into the terminal form
    For col = 0 To 3
           wsData = wkBook.Sheets("ProjectInfo").cells(row, (col + 2)).value
                             
            'Put text into field
            rCode = ThisIbmScreen.PutText2(wsData, (col + 5), 18)      
    Next col
    


    After the form is filled out, the data is entered into the program.

    Enter the data
    Copy Code
    'Transmit the data
    ThisIbmScreen.SendControlKey (ControlKeyCode_Transmit)
                                   
    


    After entering the data, it waits until the screen is ready for input. Then it checks to find out if the next row in the spreadsheet has any data before it enters the next row in Excel. If the cell is empty, the loop ends.

    Note: This example macro uses the WaitForHostSettle method to wait until the screen is ready for input. To get the best performance for macros that navigate screens, consider using a SmartWait method as shown in Navigating Through IBM Screens.
    Go to the next row
    Copy Code
        'wait until the screen is ready for input
        rCode = ThisIbmScreen.WaitForHostSettle(3000, 2000)
       
        'Go to the next row in Excel
        row = row + 1
           
         'get the value of the first cell in the row so we can check for an empty row
        wsData = wkBook.Sheets("ProjectInfo").cells(row, 2).value
                   
    Loop While wsData <> ""