У меня есть два макроса: один в Excel и один в Word. Макрос Excel вызывает макрос Word. Мой код выглядит следующим образом:Как вызвать макросы Word из Excel
Excel:
Public wb1 As Workbook
Public dt1 As Document
Sub openword()
Dim wpath, epath As String 'where the word document will be opened and where the excel sheet will be saved
Dim wordapp As Object 'preparing to open word
Set wb1 = ThisWorkbook
While wb1.Sheets.Count <> 1
wb1.Sheets(2).Delete
Wend
wpath = "C:\users\GPerry\Desktop\Projects and Work\document.docm"
Set wordapp = CreateObject("Word.Application")
'Set wordapp = CreateObject(Shell("C:\Program Files (x86)\Microsoft Office\Office14\WINWORD", vbNormalFocus)) this is one I tried to make work because while word.application seems to work, I don't *understand* it, so if anyone can help, that'd be awesome
wordapp.Visible = True
Set dt1 = wordapp.Documents.Open(wpath)
wordapp.Run "divider", wb1, dt1
dt1.Close
wordapp.Quit
End Sub
И слово:
Sub divider(wb1, dt1)
Set dt1 = ThisDocument
If dt1.Paragraphs.Count > 65000 Then
Set cutrange = dt1.Range(dt1.Paragraphs(1).Range.Start, dt1.Paragraphs(65000).Range.End)
If wb1.Sheets(Sheets.Count).Cells(1, 1) <> "" Then
wb1.Sheets.Add After:=Sheets.Count
End If
Else
Set cutrange = dt1.Content
If wb1.Sheets(Sheets.Count).Cells(1, 1) <> "" Then
wb1.Sheets.Add After:=Sheets.Count
End If
End If
cutrange.Cut Destination:=wb1.Sheets(wb1.Sheets(Sheets.Count)).Cells(1, 1)
wb1.Sheets(Sheets.Count).Cells(1, 1).TextToColumns Destination:=wb1.Sheets(1).Cells(1, 1)
End Sub
Моя проблема заключается в том, что переменная WB1 не получает проходит между ними. Хотя я поместил wb1 в список переменных для отправки макросу, когда он прибыл в документ, wb1 не имеет значения внутри него. Я бы повторно инициализировал его, но я не знаю, как ссылаться на уже существующий документ - только как установить его равным единице при его открытии.
Итак, как передать значение в макрос Word, или как я могу повторно инициализировать эту переменную? Предпочтительно не устанавливать что-то равное приложению excel, потому что каждый раз, когда я пытаюсь сделать это, он устанавливает его равным Excel 2003, а не 2010 (хотя любые решения для этого также, конечно же, приветствуются).
Спасибо!
Я запутался, как 'Set DT1 = wordapp.Documents.Open (WPATH) и' DT1 = ThisDocument' оказываются разные вещи - они не указывают на одно и то же? - но если это помогает, хорошо (что значит «вставить»?). И ... э-э, какой тип переменной был бы cutrange be (является ли это той переменной, которую вы подразумеваете, я должен явно объявить?)? Я действительно не знаю, как работает слово vba, поэтому ближайший я могу догадаться, это строка ... Кроме того, я подумал, что если вы включите библиотеку excel, тогда вы можете использовать такие вещи, как листы и еще много чего. Должен ли я тогда просто разрезать его и вернуть его в макрос Excel? –
Извините, если это много (возможно, глупых) вопросов, но я никогда не пытался что-то близко к этому сложному с использованием vba раньше, никогда не использовал vba в слове раньше, так что это немного подавляющее. –
Вы передаете переменную 'dt1' из Excel в Word. Первое, что вы делаете, это установить его в «ThisDocument». Не имеет значения, что это было в вызывающей функции. – Comintern