2015-06-24 4 views
0

Контекст: Я пишу макрос Word VBA, который проходит через каждое слово в документе, идентифицирует акронимы и создает список сокращенных имен в качестве нового документа. Следующим шагом будет определение того, находится ли аббревиатура в круглых скобках (что, вероятно, указано), в первом случае. Итак, я хотел бы расширить диапазон, чтобы узнать, являются ли символы по обе стороны слова «(» и «)».Слово VBA Диапазон от слов Объект

Проблема: Я не могу понять, как назначить диапазон слова переменной диапазона, которую я затем могу расширить. Использование «rngWord = ActiveDocument.Words (k)» (где k - переменная счетчика) получает ошибку # 91, Object Variable или с переменной блока, которая не задана. Так что предположительно есть метод или свойство для слов, которые мне не хватает. Однако на основе ссылки VBA от Microsoft, члены коллекции Words уже имеют диапазоны, поэтому я не понимаю, почему я не могу назначить ее переменной диапазона.

Dim intArrayCount As Integer 
Dim booAcroMatchesArray As Boolean 
Dim intNextAcro As Integer 
Dim strAcros(1000) As String 
Dim strContext(1000) As String 
Dim booAcroDefined(1000) As Boolean 
Dim strTestMessage As String 

i = 1 
booAcroMatchesArray = False 
intNextAcro = 1 
For k = 1 To ActiveDocument.Words.Count 
    strWord = ActiveDocument.Words(k).Text 
    rngWord = ActiveDocument.Words(k) //The line that's missing something 
    MsgBox strWord 
    rngWord.Expand Unit:=wdCharacter 
    strWordPlus = rngWord 
    MsgBox strWordPlus 



    strWord = Trim(strWord) 

    If strWord = UCase(strWord) And Len(strWord) >= 2 And IsLetter(Left(strWord, 1)) = True Then 
     'MsgBox ("Word = " & strWord & " and Length = " & Len(strWord)) 
     For intArrayCount = 1 To 1000 
      If strWord = strAcros(intArrayCount) Then booAcroMatchesArray = True 
     Next intArrayCount 

     'MsgBox ("Word = " & strWord & " Match = " & booAcroMatchesArray) 

     If booAcroMatchesArray = False Then 
      strAcros(intNextAcro) = strWord 
      intNextAcro = intNextAcro + 1 



     End If 

     booAcroMatchesArray = False 

    End If 

Next k 

ответ

0

Переменные объекта должны назначаться с использованием Set. Вместо того, чтобы:

rngWord = ActiveDocument.Words(k) 

использование

Set rngWord = ActiveDocument.Words(k) 

Этот небольшой образец работал правильно:

Sub WordRangeTest() 

Dim rngWord As Range 
Set rngWord = ActiveDocument.Words(1) 
MsgBox (rngWord.Text) 

End Sub 
Смежные вопросы