none
Как передать массив из Excel в Word (VB, VBA)? RRS feed

  • Вопрос

  • Подскажите, как передать массив который был получен в Excel в документ Word который открывается из Excel. Документ Word создается на основе шаблона с поддержкой макросов.

     

    Я использую следующее:

    Dim WordApp As New Word.Application

    Dim doc As Word.Document

    origDoc = "D:\VBA Excel\Áàçà äàííûõ ÀÑÓ\Øàáëîí Ñ6.docm"

     

    Set WordApp = CreateObject("Word.Application")

    WordApp.Visible = True

    Set doc = WordApp.Documents.Open(origDoc)

    doc.Activate

    ActiveDocument.Variables.Add Name:="Array", Value:=massStr

     

    где massStr - это массив, сформированный в Excel.

    26 сентября 2011 г. 11:30

Ответы

Все ответы

  • Никто не разбирается в VBA? Почему нет ответов?
    27 сентября 2011 г. 9:42
  • Здравствуйте.

    А в чем заключается ваша проблема? Вы вроде правильно передаете данные, через Variables - WD2000: How to Store and Retrieve Variables in Documents, вы их потом получить не можете или что?

    Также посмотрите How To Use Automation to Run a Word Macro with Arguments, может это то, что вам нужно.


    Для связи [mail]
    • Помечено в качестве ответа Abolmasov Dmitry 3 октября 2011 г. 9:07
    27 сентября 2011 г. 10:30
  • Здравствуйте.

    А в чем заключается ваша проблема? Вы вроде правильно передаете данные, через Variables - WD2000: How to Store and Retrieve Variables in Documents, вы их потом получить не можете или что?

    Также посмотрите How To Use Automation to Run a Word Macro with Arguments, может это то, что вам нужно.


    Для связи [mail]

    Сколько же вас таких, бесполезных советчиков почитать что-нибудь не по делу, сидит тут и собирает за это баллы.

    Неужели Вы думаете, что никто, кроме Вас не умеет поиском пользоваться?

    Прежде чем кидать в ответ ссылки не в тему, читайте вопрос внимательнее: "Как передать массив"!

    В указанной Вами статье, которую читали все, кто что-то пишет на VBA, расписано как задавать значения строковым переменным и как получать их значения.

    Как думаете, это у кого-то может вызвать проблему? А по сути, про массивы там ни слова.


    18 февраля 2016 г. 6:46
  • Сколько же вас таких, бесполезных советчиков почитать что-нибудь не по делу, сидит тут и собирает за это баллы.


    Нам с этих балов никакого профита. Мало того многим даже «спасибо» не нужно. Но вот таких выпадов мы точно не ждем.

    Сомневаюсь, что теперь кто то сочтёт нужным вам помогать.


    VB.Net - WPF, UWP

    19 февраля 2016 г. 12:12
    Отвечающий
  • Смущает ActiveDocument в последней строчке. Получится активный документ в текущей среде, т.е. Excel. Всегда лучше - если есть переменная - использовать её, в данном случае doc.

    Замените ActiveDocument на doc.

    24 февраля 2016 г. 9:10
  • Добрый день всем. Вопрос по дате уже не актуальный, но возможно кому другому может пригодится.

           Для небольших массивов данных может, как выход, пригодится следующий код. Задача была, обойтись только средствами VBA. Весь код в макросе файла Excel. В первой процедуре заполняем массив, открываем файл word, передаем массив в word. Вторая процедура чтение переменных содержащихся в файле word. Третья процедура - удаление всех переменных содержащихся в файле word.

           Собственно сам пример:

    Option Explicit
    Sub Transfer_arData_to_Word()
        Dim oWdApp, oWdDoc As Object
        Dim arData() As Variant
        Dim var
        Dim j As Long
        Dim pathDoc As String
        Dim i As Long
        
        j = 1
    '   -- Заполняем массив --
        For var = 1 To 4   ' makes the array
            ReDim Preserve arData(var)
            arData(var) = j
            j = j + j * 10
        Next
    
        MsgBox UBound(arData)
        
    '   -- Открываем файл --
        
        pathDoc = "D:\Проект VBA\Doc1.docm"
        Set oWdApp = CreateObject("Word.Application")
        Set oWdDoc = oWdApp.Documents.Open(pathDoc)
    
    '   -- Передача массива данных в Word файл --
    
        Do
            On Error Resume Next
            oWdDoc.Variables.Add Name:="arWData-" & i, Value:=arData(i)
            i = i + 1
        Loop Until i > UBound(arData)
        
    '   -- Сохраняем и закрываем файл --
    
        With oWdDoc
            .Save
            .Close
        End With
        Set oWdDoc = Nothing
        oWdApp.Quit
        Set oWdApp = Nothing
    End Sub
    Sub Read_Variables_in_Word()
        Dim oWdApp, oWdDoc As Object
        Dim pathDoc As String
        Dim i As Long
        pathDoc = "D:\Проект VBA\Doc1.docm"
        Set oWdApp = CreateObject("Word.Application")
        Set oWdDoc = oWdApp.Documents.Open(pathDoc)
        
        MsgBox oWdDoc.Variables.Count
        
        If oWdDoc.Variables.Count <> 0 Then
            i = 1
            Do
                MsgBox "Number = " & oWdDoc.Variables.Count & vbCr & _
                "Name = " & oWdDoc.Variables(i).Name & vbCr & "Value =" _
                & oWdDoc.Variables(i).Value
                i = i + 1
            Loop Until i > oWdDoc.Variables.Count
        End If
        
    '    oWdApp.Application.Run "NewMacros.wer"  ' Выполение макроса в файле Word
    
        With oWdDoc
            .Save
            .Close
        End With
        Set oWdDoc = Nothing
        oWdApp.Quit
        Set oWdApp = Nothing
    End Sub
    Sub Delete_Variables_in_Word()
        Dim oWdApp, oWdDoc As Object
        Dim pathDoc As String
        Dim i As Long
        Dim varWd
        
        pathDoc = "D:\Проект VBA\Doc1.docm"
        Set oWdApp = CreateObject("Word.Application")
        Set oWdDoc = oWdApp.Documents.Open(pathDoc)
        
        MsgBox oWdDoc.Variables.Count
        
        If oWdDoc.Variables.Count <> 0 Then
            For Each varWd In oWdDoc.Variables
                varWd.Delete
            Next
            
            MsgBox oWdDoc.Variables.Count
            
        End If
               
        With oWdDoc
            .Save
            .Close
        End With
        Set oWdDoc = Nothing
        oWdApp.Quit
        Set oWdApp = Nothing
        
    End Sub
    

    22 октября 2019 г. 13:18