1

Тема: Как правильно передать объект в функцию VBA

Как правильно передать в функцию ссылку на объект который содержит путь к файлу, для дальнейшей правки.

Dim nameDoc1 As String  ' имя файла
nameDoc1 = path + "\001.docx"
Dim objWrdApp As Object
Dim objWrdDoc As Object

Set objWrdApp = GetObject(, "Word.Application")
Set objWrdDoc = objWrdApp.Documents.Open(nameDoc1)

CopyToDoc1 (objWrdDoc)

End Sub

Sub CopyToDoc1 (ByRef objWrdDoc As Document)

End Sub



Кажется вот с этой строкой проблема:
Sub CopyToDoc1 (ByRef objWrdDoc As Document)

Спасибо.

2

Re: Как правильно передать объект в функцию VBA

Virgo пишет:

Как правильно передать в функцию ссылку на объект который содержит путь к файлу, для дальнейшей правки.

Dim nameDoc1 As String  ' имя файла
nameDoc1 = path + "\001.docx"
Dim objWrdApp As Object
Dim objWrdDoc As Object

Set objWrdApp = GetObject(, "Word.Application")
Set objWrdDoc = objWrdApp.Documents.Open(nameDoc1)
CopyToDoc1 (objWrdDoc)
End Sub

Sub CopyToDoc1 [color=red](ByRef objWrdDoc As Document)[/color]
End Sub

Самое главное - то, что у вас не функция , а процедура. Я не уверен, можно ли вызвать её таким образом (т.е. просто указав название). Функции обычно используют для того, чтобы вернуть какое-то значение в переменную:

Sub FirstParaText()
Dim oDoc as Document
Dim sGetString as String
sGetString = functionGetString(oDoc)
End Sub

Function functionGetString(ByRef oDoc as Document)
functionGetString = oDoc.Paragraphs(1).range.text 'Например
End Function

Процедуру используют обычно для запуска доп обработки (нужно что-то выполнить)
Я пользуюсь двумя способами - Call + имя процедуры (если отлавливаю ошибки в коде)
или Application.Run Macro:="имя процедуры". Т.е. в Вашем случае это будет либо\либо:

Call CopyToDoc1 (objWrdDoc)
либо
Application.Run "CopyToDoc1", objWrdDoc

Например,

Sub Callslsll()
Dim oDoc As Document
Set oDoc = ActiveDocument
Word.Application.Run "Mesager", oDoc
End Sub

Private Sub Mesager(ByRef oDoc As Document)
MsgBox oDoc.Name
End Sub
Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871