Консультация № 178430
16.05.2010, 16:16
0.00 руб.
0 10 1

'Уважаемые эксперты ранее я задавал вопрос:
'Как создать массив имени всех закладок документа по положению их в документе, но чтобы в этот массив попали только закладки, имеющие первую букву своего имени «Ч»
'и получил ответ, тестировал его вроде всё работало, сейчас возникли вопросы, они по тексту

i = 0
Dim w As Object 'какова цель этой строки??, без неё нельзя??? более по тексту я не встречаю w???
For Each b In ActiveDocument.Bookmarks
If (Left(b.Name, 1) = "Ч") Then
ReDim Preserve a(i) 'Здесь я получаю Variable not defined, почему??? что не так???
a(i) = b.Name
i = i + 1
End If
Next b
'Спасибо Эндрю

Обсуждение

давно
Профессор
230118
3054
16.05.2010, 16:39
общий
Ципихович Эндрю:
Подскажите номер вопроса.
Неизвестный
16.05.2010, 16:45
общий
это ответ
Здравствуйте, Ципихович Эндрю.
Dim w As Object 'какова цель этой строки??, без неё нельзя??? более по тексту я не встречаю w???

если здесь приведен весь код, то можно ее удалить. Насколько я догадываюсь, вместо нее должно было быть [b]Dim b As Object[/b]
ReDim Preserve a(i) 'Здесь я получаю Variable not defined, почему??? что не так???

Вы пытаетесь изменить размер несуществующего массива. Вам необходимо в начале текста объявить этот массив c помощью строки [b]Dim a()[/b].
В итоге дожно получиться вот что:
Код:
i = 0
Dim a() As String ' массив для сохранения названий всех закладок
Dim b As Object ' переменная, в которой будут сохраняться все закладки документа
For Each b In ActiveDocument.Bookmarks ' цикл, перебирающий все закладки в документе
If (Left(b.Name, 1) = "Ч") Then ' если имя закладки начинается на "Ч"
ReDim Preserve a(i) ' Увеличение размера массива для добавления имени закладки
a(i) = b.Name ' добавление имени закладки в массив
i = i + 1 ' увеличение счетчика подходящих закладок
End If
Next b
5
Неизвестный
16.05.2010, 18:50
общий
Гаряка Асмик:
Вы не беспокойтесь, все верно это Вы мне ранее отвечали, номер вопроса я не помню, а то бы я к нему вернулся, потому что я же говорю, что ранее я тестировал всё работало, в своё время я Вам выражал благодарность, видимо я ошибся скопировав его не верно
Неизвестный
16.05.2010, 19:04
общий
Измалков Эдуард Леонидович:
Присмотрелся получше
Вроде если строго по вопросу тогда надо чтобы было в строке так:
If (Left(b.range.Name, 1) = "Ч") Then ' если имя закладки начинается на "Ч"????
А как есть сейчас тогда бы вопрос звучал:
Как создать массив всех закладок документа согласно их имени, но чтобы в этот массив попали только закладки, имеющие первую букву своего имени «Ч»??????
Неизвестный
16.05.2010, 19:38
общий
Измалков Эдуард Леонидович:
Согласен сообщение от 19:04 :: бред а как же тогда будет если бы вопрос звучал:
Как создать массив всех закладок документа согласно их имени, но чтобы в этот массив попали только закладки, имеющие первую букву своего имени «Ч»??????

Неизвестный
17.05.2010, 08:38
общий
Ципихович Эндрю:
Попробуйте так:
Код:
i = 0
Dim a() ' массив для сохранения закладок
Dim b As Object ' переменная, в которой будут сохраняться все закладки документа
For Each b In ActiveDocument.Bookmarks ' цикл, перебирающий все закладки в документе
If (Left(b.Name, 1) = "Ч") Then ' если имя закладки начинается на "Ч"
ReDim Preserve a(i) ' Увеличение размера массива для добавления закладки
Set a(i) = b ' добавление закладки в массив
i = i + 1 ' увеличение счетчика подходящих закладок
End If
Next b
Неизвестный
17.05.2010, 16:06
общий
Измалков Эдуард Леонидович:
К сожелению это не сть правильный ответ
От ответа на вопрос это решение ничем на отличается
Неизвестный
17.05.2010, 19:58
общий
Измалков Эдуард Леонидович:
Можете не тратить время суть вопроса заключалась в другом я не знал как создавать массив когда не знаешь его имя наперёд, оба варианта:
i = 0
Dim a() As String 'массив для сохранения названий всех закладок
Dim Имя_закладки As String
For q = 1 To ActiveDocument.Bookmarks.Count ' цикл, перебирающий все закладки в документе
Имя_закладки_q = ActiveDocument.Bookmarks(q).Name '1. если сортировать строго по имени закладок в документе
ИЛИ
Имя_закладки_q = ActiveDocument.Range.Bookmarks(q).Name '2. если сортировать строго по положению закладок в документе
If (Left(Имя_закладки_q, 1) = "Ч") Then 'условие, если имя закладки начинается на "Ч"
i = i + 1 'увеличение счетчика подходящих закладок
ReDim Preserve a(i) 'увеличение размера массива для добавления имени закладки
a(i) = Имя_закладки_q 'добавление имени закладки в массив
End If
Next

'проверка
For q = 1 To UBound(a)
Имя_закладки_q = a(q)
Next
Неизвестный
18.05.2010, 14:08
общий
Ципихович Эндрю:
Вы хотите создать массив, но не знаете, что в нем будет храниться, так?
если так, то Вы можете создать массив dim a() as variant, тогда можете хранить в нем все, что хотите. Либо используйте коллекцию
Неизвестный
18.05.2010, 18:57
общий
Измалков Эдуард Леонидович:
Слова
Можете не тратить время суть вопроса заключалась в другом я не знал как создавать массив когда не знаешь его имя наперёд
Надо читать как
Можете не тратить время суть вопроса заключалась в другом я не знал как создавать массив когда не знаешь его размер наперёд
Ошибся, извиняюсь, Вы мне в этом помогли большое спасибо
Форма ответа