Как я передаю Диапазон Sub в Word VBA?

Я знаю, что это звучит простым, но по-видимому это не.

Если я пишу это в 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
8
задан Pang 5 October 2014 в 03:15
поделиться

3 ответа

Запрещается вызывать Sub в круглых скобках, за исключением случаев, когда вы используете оператор Call .

Следовательно, вы должны использовать либо:

Call ProcessRange(r)

, либо:

ProcessRange r

Причина этого в том, что в VBA (а также в VBS, VB6) круглые скобки могут иметь множество различных значений.

В вашем случае объект диапазона будет оценен перед передачей результата в ProcessRange . В этом случае это приводит к передаче субтитру строки , поскольку свойством по умолчанию для Range является Текст .

См. Обзор в этой статье: http://blogs.msdn.com/ericlippert/archive/2003/09/15/52996.aspx

8
ответ дан 5 December 2019 в 11:23
поделиться

Использование круглые скобки visual basic предполагают, что вы вызываете функцию.

ProcessRange r

помогает

3
ответ дан 5 December 2019 в 11:23
поделиться

Диапазон процессов - это подпрограмма , поэтому не используйте ее в круглых скобках. (Ошибка возникает из-за того, что (r) вызывает оценку r , которая возвращает значение свойства по умолчанию, которое не относится к типу range , поэтому не соответствует ) ProcessRange ожидает.

Используйте:

ProcessRange r

или

call ProcessRange(r)
4
ответ дан 5 December 2019 в 11:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: