2010 - Конвертация кода VBA 2003 в 2010\макросы

Аватара пользователя
victor21043

2010 - Конвертация кода VBA 2003 в 2010\макросы

Сообщение victor21043 »

Уважаемые пользователи,

При переводе в формат word-docm 2010 из word 2003 перестаёт работать код макроса ( VBA)

В чём может быть причина?

Благодарю,

Вот два образца:



Скрытый текст

[spoiler]
https://cloud.mail.ru/public/Kor2/MxEcwuNMP


https://cloud.mail.ru/public/2Kmh/tNAXP7A8f
[/spoiler]
Аватара пользователя
Iska

Re: 2010 - Конвертация кода VBA 2003 в 2010\макросы

Сообщение Iska »

Цитата victor21043:



PS Буду благодарен,если вы добавите вспл.подсказку .tooltiptext="xxx" к "button"
2010 - Конвертация кода VBA 2003 в 2010\макросы




В объектной модели 2003 такое свойство у элемента управления CommandButton отсутствует.
Аватара пользователя
a_axe

Re: 2010 - Конвертация кода VBA 2003 в 2010\макросы

Сообщение a_axe »

Не уверен, что это справедливо для word, при переходе с excell 2003 на 2010 была аналогичная проблема - код не запускался. Помогло копирование текста кода из старого в новый чистый созданный файл (у меня речь шла про надстройку, в вашем случае - вместо конвертирования).

Возможно - распостраненность подобной проблемы может подтверждаться существованием программы, которая делает это автоматически:
Excel VBA Code Cleaner
Аватара пользователя
victor21043

Re: 2010 - Конвертация кода VBA 2003 в 2010\макросы

Сообщение victor21043 »

Cпасибо, копирование кода в чистый новый файл не помогло
Аватара пользователя
Iska

Re: 2010 - Конвертация кода VBA 2003 в 2010\макросы

Сообщение Iska »

Цитата victor21043:



Получается, для каждой новой версии word нужно заново писать макросы...
2010 - Конвертация кода VBA 2003 в 2010\макросы




Крайне редко. В большинстве случаев код работает без изменений или после небольшой доработки под новую объектную модель. У меня лично один код с небольшими изменениями прошёл реинкарнацию от Office 4.5 через Office 97 и Office 2000 до Office 2003.
Аватара пользователя
a_axe

Re: 2010 - Конвертация кода VBA 2003 в 2010\макросы

Сообщение a_axe »

Цитата victor21043:



Получается, для каждой новой версии word нужно заново писать макросы...
2010 - Конвертация кода VBA 2003 в 2010\макросы




victor21043, я очень слабо представляю объектную модель Word, но насколько я понимаю - изменить нужно только обращение к полю, которое вы хотите скрыть (выделено в коде красным).

По крайней мере у меня в таком варианте поле скрывается и отображается.



Код

[spoiler]Код:
[/spoiler]

Код: Выделить всё

Public Sub Button_click()  'проц. можно вызывать в люб. модуле
     Dim Start 'явное объявление литерально
     Start = Timer
     Do While Timer < Start + 0.7 ' 1 sec delay
         'итеративный цикл с предусловием
         DoEvents 'DoEvents передает управление операционной системе
     Loop       ' а сама функция возвращает число открытых форм в VB-приложении
     With Button
         .Caption = IIf(.Caption Like "+*", ">> Сlose", "+ English")
         'iif возвращает одно из двух значений, в зависимости от проверяемого условия
         Shapes.Range(Array("Поле 1")).Visible = .Caption Like ">> *"
         'MsgBox "English" & vbCrLf & "CV", vbInformation, "",
     End With
 End Sub








Цитата Iska:



один код с небольшими изменениями прошёл реинкарнацию
2010 - Конвертация кода VBA 2003 в 2010\макросы




У меня код при переходе с 2003 на 2010 не имел ни одного изменения по тексту, при этом не работал вообще никак. Спасло только перекопирование текста кода. Заработало без внесения каких-либо изменений по коду. Как я понял - кроме текста кода сохраняется большое количество служебной информации, которая также может содержать ошибки, из-за которых код может работать не вполне правильно. Речь правда про Excel.
Аватара пользователя
victor21043

Re: 2010 - Конвертация кода VBA 2003 в 2010\макросы

Сообщение victor21043 »

Поле 1 Кто это такой? Переменная?

Компонент с указанным именем не найден


Цитата:



По крайней мере у меня в таком варианте поле скрывается и отображается.



Спасибо,
Аватара пользователя
a_axe

Re: 2010 - Конвертация кода VBA 2003 в 2010\макросы

Сообщение a_axe »

Цитата victor21043:



Поле 1 Кто это такой? Переменная?
2010 - Конвертация кода VBA 2003 в 2010\макросы




victor21043, я беру ваш файл под названием "режим огран функц 2010.docm", в исходном состоянии кнопка не скрывает поле.

Соответственно "Поле 1" - это имя вашего текстового поля (у вас оно обозначено как Shape(1)).



Замените в своем коде Me.Shapes(1).Visible на Me.Shapes(2).Visible, и все должно заработать.



Либо замените строку Me.Shapes(1).Visible = .Caption Like ">> *" на Shapes.Range(Array("Поле 1")).Visible = .Caption Like ">> *", также все должно работать.
Аватара пользователя
Iska

Re: 2010 - Конвертация кода VBA 2003 в 2010\макросы

Сообщение Iska »

a_axe, посмотрите, нет ли там возможности простого именного доступа к объекту, т.е. — «Shapes.Item("Поле 1")» (мне нечем проверять)?!
Ответить

Вернуться в «Microsoft Office (Word, Excel, Outlook и т.д.)»