Home > OS >  How to import range as array, from Excel into Word document
How to import range as array, from Excel into Word document

Time:02-19

I'm working on a VBA Word Macro to create a document with personalized headers. I have a spreadsheet with the text to be inserted in the Headers (every row shall be inserted on an individual page).

To do so, I want to import the data from spreadsheet as an Array into Word, in order to get those texts in place.

I wrote a piece of code to open the spreadsheet and get a pre-defined range using Select method; I get an error on trying to pass this Selection to a Range object.

The error message is Runtime Error 13: Incompatible types.

I added an If loop to assure that the Selection is not empty, and it wasn't, for every time I ran the code.

Sub main()

    'Main procedure
    Dim app_Excel As Excel.Application
    Set app_Excel = CreateObject("Excel.Application")
        
    Dim wbk_srce As Workbook
    Set wbk_srce = app_Excel.Workbooks.Open("C:\0_portolon\Dias.xlsm", , False)
    
    Dim wsh_srce As Worksheet
    Set wsh_srce = wbk_srce.Worksheets(3)
    wsh_srce.Activate
    
    cell_1 = CStr("A1")
    cell_2 = CStr("D216")
    
    Dim header_range As Range
    wsh_srce.Range(cell_1, cell_2).Select
    
    If Selection = Empty Then
        Debug.Print ("error")
    Else
        Debug.Print ("good")
    End If
    
    Set header_range = Selection    '<---Error
    
    Dim header_array() As Variant
    
    'header_array = header_range.Value
    
    'Call add_readers


End Sub

Note: I added only the Microsoft Excel 16.0 Object Library to VBA Word.

How can I make this work?

Thanks in advance,

Tiago

CodePudding user response:

Both Word and Excel have a Selection object so when you refer to a selection in Excel you need to qualify it by prefixing it with your Excel Application variable, i.e. app_Excel.Selection.

You also need to do this with other objects that both applications have in common such as Range. Word will understand Dim header_range As Range as being a Word.Range, so assigning a selection in Excel to it isn't going to work.

  • Related