Консультация № 177171
09.03.2010, 17:32
35.77 руб.
0 10 0
Здравствуйте уважаемые эксперты, подскажите, пожалуйста, в следующем
Для того чтобы в КомбоБокс при открытии документа загружались строки в макросы
'AutoNew работает при создании любого нового документа Ворд
'AutoOpen работает при открытии существующего документа Ворд
я пишу код:
If ActiveDocument.InlineShapes.Count >= 1 And ActiveDocument.InlineShapes.Item(1).OLEFormat.Object.Name = "ComboBox1А" Then ActiveDocument.ComboBox1А.AddItem "Строка1"
ActiveDocument.ComboBox1А.AddItem "Строка2"
End If
При открытии документа строки в КомбоБокс попадают, потом сохраняю документ, открываю снова и более в него эти строки не попадают???, почему???, как будет правильно???

Спасибо Эндрю

Обсуждение

Неизвестный
10.03.2010, 00:03
общий
Ципихович Эндрю:
Так вроде все корректно.
Код:

Sub autoopen()
MsgBox "AutoOpen Started"
If (ActiveDocument.InlineShapes.Count > 0) And (ActiveDocument.InlineShapes.Item(1).OLEFormat.Object.Name = "ComboBox1A") Then
MsgBox "Before ComboBox1A has " & ComboBox1A.ListCount & " items."
ActiveDocument.ComboBox1A.AddItem "ComboboxListItem 1"
ActiveDocument.ComboBox1A.AddItem "ComboboxListItem 2"
MsgBox "After ComboBox1A has " & ComboBox1A.ListCount & " items."
End If
MsgBox "AutoOpen Finished"
End Sub

Сперва список пуст. А в процессе выполнения заполняется элементами.
При сохранении документа элементы списка НЕ СОХРАНЯЮТСЯ. При необходимости этот список можно выгрузить в хранилище (файл, база, ....), а при повторном открытии документа восстановить требуемое состояние компонента.
Неизвестный
11.03.2010, 12:41
общий
Andrew Kovalchuk:
Во первых на строке MsgBox "Before ComboBox1A has " & ComboBox1A.ListCount & " items." я получаю ошибку № 424
Во вторых я не уловил Вашу мысль, предложенные Вами сообщения в МсгБоксе мне и даром не нужны, а если выбросить четыре строки где есть МсгБокс, то останется ровно то, что я написал в вопросе, разве не так ??
Также я не понял Вашу мысль:
При необходимости этот список можно выгрузить в хранилище (файл, база, ....), а при повторном открытии документа восстановить требуемое состояние компонента.
Как это делается???
А также я не пойму разве этот код, чтобы в любом случае строки попадали в КомбоБокс не надо иметь в двух макросах:
'AutoNew работает при создании любого нового документа Ворд
'AutoOpen работает при открытии существующего документа Ворд

Неизвестный
11.03.2010, 19:10
общий
Ципихович Эндрю:
Цитата: 238244
А также я не пойму разве этот код, чтобы в любом случае строки попадали в КомбоБокс не надо иметь в двух макросах:
'AutoNew работает при создании любого нового документа Ворд
'AutoOpen работает при открытии существующего документа Ворд
Разве в вновь создаваемом вами документе содержится элемент управления ComboBox1A? Если ваш ответ на этот вопрос "НЕТ" - тогда не вижу смысла нагромождать макросы, которые не будут выполнять полезные действия.
Неизвестный
11.03.2010, 20:24
общий
Andrew Kovalchuk:
Ответ "ДА", потому, что файл создаётся из шаблона, в котором содержится элемент управления ComboBox1A
потому у меня два макроса
'AutoNew работает при создании любого нового документа Ворд
'AutoOpen работает при открытии существующего документа Ворд
Неизвестный
11.03.2010, 21:10
общий
Ципихович Эндрю:
Цитата: 238244
Ответ "ДА", потому, что файл создаётся из шаблона, в котором содержится элемент управления ComboBox1A
потому у меня два макроса
'AutoNew работает при создании любого нового документа Ворд
'AutoOpen работает при открытии существующего документа Ворд

Думаю, можно остановиться на любом из вариантов, который будет корректно работать. Есть подозрение, что это будет AutoNew.
Неизвестный
11.03.2010, 21:24
общий
Andrew Kovalchuk:
Так в самомвопросе я же указал, что на всякий случай я пишу в двух макросах
'AutoNew работает при создании любого нового документа Ворд
'AutoOpen работает при открытии существующего документа Ворд
и пишу в них строки
If ActiveDocument.InlineShapes.Count >= 1 And ActiveDocument.InlineShapes.Item(1).OLEFormat.Object.Name = "ComboBox1А" Then
ActiveDocument.ComboBox1А.AddItem "Строка1"
ActiveDocument.ComboBox1А.AddItem "Строка2"
End If
И когда ясоздаю новый документ, то всё нормально
А когда открываю существующий документ, то ничего увы не происходит
В этом и вопрос почему???
Также я не понял Вашу мысль:
При необходимости этот список можно выгрузить в хранилище (файл, база, ....), а при повторном открытии документа восстановить требуемое состояние компонента.
Как это делается???






Неизвестный
11.03.2010, 22:54
общий
Ципихович Эндрю:
Так не понравившиеся вам MsgBox'ы в ваш код я расставил не для того, чтобы было больше строк кода, а лишь потому, что глядя на эти сообщения вы сможете оценить что же на самом деле происходит в макросах. В моем тестовом документе все работает так как я описывал выше в этом обсуждении. Если у вас что-то не работает, то мы можем долго строить догадки касательно причин или вы предоставите неработающий документ (или шаблон, или и то и другое) и разговор будет строиться вокруг конкретно этой проблемы.
Цитата: 238244
При необходимости этот список можно выгрузить в хранилище (файл, база, ....), а при повторном открытии документа восстановить требуемое состояние компонента.
Как это делается???
Ответ на этот вопрос уже был озвучен - см. личный ящик.
Неизвестный
12.03.2010, 15:57
общий
Andrew Kovalchuk:
Предоставлю неработающий документили шаблон, или и то и другое позже сейчас появилась мысль

Для тестирования в макросы записал строки кода, приведены ниже:
Sub AutoNew()
MsgBox$ "AutoNew работает при создании любого нового документа Ворд"
End Sub


Sub AutoOpen()
MsgBox$ "AutoOpen работает при открытии существующего документа Ворд"
End Sub

Открываю документ или создаю документ один из макросов срабатывает, но есть документ ссылка на него:
https://rfpro.ru/upload/181, без пароля

открывая его ни один из макросов не срабатывает. Почему???


Также я заметил странность, насколько я знаю, эти оба макроса я записывал в Нормал дот, но например есть документы в которых открываю Сервис Макрос там имеются в списке оба этих макроса, е есть документы где из этих документов только один макрос AutoNew. Может в этом, что-то кроется???

В этой части: Ответ на этот вопрос уже был озвучен - см. личный ящик
Что я не помню, продублируйте на фыорум пожалуйста

Неизвестный
12.03.2010, 18:50
общий
Ципихович Эндрю:
Цитата: 238244
В этой части: Ответ на этот вопрос уже был озвучен - см. личный ящик
Что я не помню, продублируйте на фыорум пожалуйста
Вот пример простого кода по записи данных в файл:
dim FF as long
dim i as long
FF=freefile()
open "c:\test.txt" for output as #FF
for i=0 to Combo1.ListCount-1
print #ff, Combo1.List(i)
next i
close #ff

А это пример кода по чтению из файла:
dim FF as long
dim tmpstr as string
FF=freefile()
open "c:\test.txt" for input as #FF
do while not eof(ff)
line input #ff,tmpstr
combo1.additem tmpstr
loop
close #ff
Неизвестный
12.03.2010, 20:49
общий
Разобрался, макросы
'AutoNew работает при создании любого нового документа Ворд
'AutoOpen работает при открытии существующего документа Ворд
с кодом
If ActiveDocument.InlineShapes.Count >= 1 And ActiveDocument.InlineShapes.Item(1).OLEFormat.Object.Name = "ComboBox1А" Then
ActiveDocument.ComboBox1А.AddItem "Строка1"
ActiveDocument.ComboBox1А.AddItem "Строка2"
End If
Пишу в макрос именно шаблона и всё работает
Форма ответа