Я знаю, что это звучит простым, но по-видимому это не.
Если я пишу это в Word VBA, он всегда говорит "несовместимые типы" - почему? И как я заставляю его работать?
Sub GetRange()
Dim r As Range
Set r = ActiveDocument.Paragraphs(5).Range
ProcessRange (r)
End Sub
Sub ProcessRange(r As Range)
Debug.Print "This generates an error (incompatible types)- why?"
End Sub
Запрещается вызывать Sub
в круглых скобках, за исключением случаев, когда вы используете оператор Call
.
Следовательно, вы должны использовать либо:
Call ProcessRange(r)
, либо:
ProcessRange r
Причина этого в том, что в VBA (а также в VBS, VB6) круглые скобки могут иметь множество различных значений.
В вашем случае объект диапазона будет оценен перед передачей результата в ProcessRange
. В этом случае это приводит к передаче субтитру строки
, поскольку свойством по умолчанию для Range
является Текст
.
См. Обзор в этой статье: http://blogs.msdn.com/ericlippert/archive/2003/09/15/52996.aspx
Использование круглые скобки visual basic предполагают, что вы вызываете функцию.
ProcessRange r
помогает
Диапазон процессов - это подпрограмма
, поэтому не используйте ее в круглых скобках. (Ошибка возникает из-за того, что (r)
вызывает оценку r
, которая возвращает значение свойства по умолчанию, которое не относится к типу range
, поэтому не соответствует ) ProcessRange
ожидает.
Используйте:
ProcessRange r
или
call ProcessRange(r)