Показать полную графическую версию : Конвертация кода VBA 2003 в 2010\макросы
victor21043
29-02-2016, 12:04
Уважаемые пользователи,
При переводе в формат word-docm 2010 из word 2003 перестаёт работать код макроса ( VBA)
В чём может быть причина?
Благодарю,
Вот два образца:
https://cloud.mail.ru/public/Kor2/MxEcwuNMP
https://cloud.mail.ru/public/2Kmh/tNAXP7A8f
PS Буду благодарен,если вы добавите вспл.подсказку .tooltiptext="xxx" к "button" »
В объектной модели 2003 такое свойство у элемента управления CommandButton отсутствует.
victor21043
29-02-2016, 16:39
У кого есть на WORD 2010 2013 2016
Не уверен, что это справедливо для word, при переходе с excell 2003 на 2010 была аналогичная проблема - код не запускался. Помогло копирование текста кода из старого в новый чистый созданный файл (у меня речь шла про надстройку, в вашем случае - вместо конвертирования).
Возможно - распостраненность подобной проблемы может подтверждаться существованием программы, которая делает это автоматически: Excel VBA Code Cleaner (www.appspro.com/Utilities/CodeCleaner.htm)
victor21043
02-03-2016, 10:24
Cпасибо, копирование кода в чистый новый файл не помогло
Получается, для каждой новой версии word нужно заново писать макросы... »
Крайне редко. В большинстве случаев код работает без изменений или после небольшой доработки под новую объектную модель. У меня лично один код с небольшими изменениями прошёл реинкарнацию от Office 4.5 через Office 97 и Office 2000 до Office 2003.
Получается, для каждой новой версии word нужно заново писать макросы... »
victor21043, я очень слабо представляю объектную модель Word, но насколько я понимаю - изменить нужно только обращение к полю, которое вы хотите скрыть (выделено в коде красным).
По крайней мере у меня в таком варианте поле скрывается и отображается.
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
один код с небольшими изменениями прошёл реинкарнацию »
У меня код при переходе с 2003 на 2010 не имел ни одного изменения по тексту, при этом не работал вообще никак. Спасло только перекопирование текста кода. Заработало без внесения каких-либо изменений по коду. Как я понял - кроме текста кода сохраняется большое количество служебной информации, которая также может содержать ошибки, из-за которых код может работать не вполне правильно. Речь правда про Excel.
victor21043
02-03-2016, 15:03
Поле 1 Кто это такой? Переменная?
Компонент с указанным именем не найден
По крайней мере у меня в таком варианте поле скрывается и отображается.
Спасибо,
Поле 1 Кто это такой? Переменная? »
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 ">> *", также все должно работать.
a_axe, посмотрите, нет ли там возможности простого именного доступа к объекту, т.е. — «Shapes.Item("Поле 1")» (мне нечем проверять)?!
a_axe, посмотрите, нет ли там возможности простого именного доступа к объекту, т.е. — «Shapes.Item("Поле 1")» »
Iska, указанная строчка корректно выполняется в Word 2010. Сейчас понимаю, что это самая логичная форма обратиться к экземпляру из коллекции объектов, стормозил.
victor21043, замените строку на код указанный Iska: Shapes.Item("Поле 1").Visible = .Caption Like ">> *" это непосредственное обращение к объекту (вне зависимости какой он по счету). "Поле 1" - имя, данное Excel вашему текстовому окошку.
Iska, указанная строчка корректно выполняется в Word 2010. »
a_axe, спасибо, ясно.
victor21043
02-03-2016, 22:32
Cпасибо ,всем
Очень хорошо,что макросы написаны не на фортране,алгоу или с++
Очень хорошо,что макросы написаны не на фортране,алгоу или с++ »
Вполне нормальные языки :).
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC