Как в Array поварьировать число элементов?
Это надо сделать как в осн. тексте, так и в сносках.
Для этого есть конструкция:
Set myStoryRangeMain = ActiveDocument.StoryRanges(wdMainTextStory)
For Each myStoryRange In Array(myStoryRangeMain, myStoryRangeFoot)
...
Я собрался проверить наличие сносок так:
Set myStoryRangeFoot = ActiveDocument.StoryRanges(wdFootnotesStory)
If myStoryRangeFoot = Empty Then mFoots = False Else mFoots = True
Типа
mArr = (myStoryRangeMain) и, если сноски есть mArr = (myStoryRangeMain, myStoryRangeFoot)
Set myFoot = ActiveDocument.StoryRanges(wdFootnotesStory)
Set myMain = ActiveDocument.StoryRanges(wdMainTextStory)
For Each myStory In Array(myMain, myFoot)
If Not IsEmpty(myStory) Then
'...
End If
Next
'Ваши действия
Next
Select Case myStoryRange.StoryType
Case wdFootnotesStory, wdMainTextStory
'Ваши действия
End If
Next
То есть когда
Case wdMainTextStory
Else
Case wdFootnotesStory, wdMainTextStory
End If
statments invalid between Select case and first Case
Типа
mArr = (myStoryRangeMain) и, если сноски есть mArr = (myStoryRangeMain, myStoryRangeFoot)
если сноски есть
Redim mArr(myStoryRangeMain, myStoryRangeFoot)
иначе
Redim mArr(myStoryRangeMain, 0)
'Ваши действия
Next
'Ваши действия
Next
Спасибо, это я понял. Но как показала практика, "пробежка" во всем StoryRanges оказывается довольно долгой. Поэтому хотелось сократить до двух объектов:
myStoryRangeMain и myStoryRangeFoot.
Но в варианте с отсутствием сносок не смог правильно записать задачу.
Cпасибо за пояснения и Вам и UserNet2008.
на этой строке сразу текст краснеет и пишется Syntax Error.
Set myStoryRangeFoot = ActiveDocument.StoryRanges(wdFootnotesStory)
For Each myStoryRange In Array(myStoryRangeMain, myStoryRangeFoot)
...
Next
надо так
надо так
Ага, прошло. Зато теперь остановка на Redim mArr(myStoryRangeMain, myStoryRangeFoot) - Type mismatch пишет.
For Each mStor In ActiveDocument.StoryRanges ''' ищем, есть ли сноски
If mStor.StoryType = wdFootnotesStory Then
Set myStoryRangeFoot = ActiveDocument.StoryRanges(wdFootnotesStory) ''' определили материал со сносками
mSn = True
Exit For
Else
mSn = False
End If
Next
If mSn = True Then
ReDim mArr(myStoryRangeMain, myStoryRangeFoot) ''' type mismatch
Else
ReDim mArr(myStoryRangeMain, 0)
End If
Set myStoryRangeFoot= ActiveDocument.StoryRanges(wdFootnotesStory)
errhandler:
If Err = 5941 Then MsgBox "Сносок нет."
Set myStoryRangeFoot= ActiveDocument.StoryRanges(wdFootnotesStory)
errhandler:
If Err = 5941 Then MsgBox "Сносок нет."
Но дело не в отсутствии сносок.
Остановка на строке даже такого вида:
ReDim mArr(myStoryRangeMain, 0).
Программе не нравится сама запись.
Что может быть не так только значение myStoryRangeMain должно быть Integer or Long or Byte.
Or сам код не под строен под такую интерпретацию
Stop
Наводим курсор на myStoryRangeMain и правой кнопкой мыши, в меню выбираем Add Watch...
Под Expression: должно быть
myStoryRangeMain
Ok
Смотрим Value и Type должно быть Integer or Long or Byte
Stop
Наводим курсор на myStoryRangeMain и правой кнопкой мыши, в меню выбираем Add Watch...
Под Expression: должно быть
myStoryRangeMain
Ok
Смотрим Value и Type должно быть Integer or Long or Byte
Эта переменная (myStoryRangeMain) текстовой оказывается. Что логично.
Set myFoot = ActiveDocument.StoryRanges(wdFootnotesStory)
Set myMain = ActiveDocument.StoryRanges(wdMainTextStory)
For Each myStory In Array(myMain, myFoot)
If Not IsEmpty(myStory) Then
'...
End If
Next
Это то, о чем мечтал. Просто проверить переменку на непустоту.
Хотя
On Error Resume Next
может подложить свинью.
Поэтому написал в внутри цикла в начале On Error GoTo 0
А в конце (внутри же) - On error resume next.
Спасибо за помощь))