victor21043 |
29-02-2016 12:04 2611353 |
Конвертация кода VBA 2003 в 2010\макросы
Уважаемые пользователи,
При переводе в формат word-docm 2010 из word 2003 перестаёт работать код макроса ( VBA)
В чём может быть причина?
Благодарю,
Вот два образца:
|
Цитата:
Цитата victor21043
PS Буду благодарен,если вы добавите вспл.подсказку .tooltiptext="xxx" к "button" »
|
В объектной модели 2003 такое свойство у элемента управления CommandButton отсутствует.
|
victor21043 |
29-02-2016 16:39 2611449 |
У кого есть на WORD 2010 2013 2016
|
Не уверен, что это справедливо для word, при переходе с excell 2003 на 2010 была аналогичная проблема - код не запускался. Помогло копирование текста кода из старого в новый чистый созданный файл (у меня речь шла про надстройку, в вашем случае - вместо конвертирования).
Возможно - распостраненность подобной проблемы может подтверждаться существованием программы, которая делает это автоматически: Excel VBA Code Cleaner
|
victor21043 |
02-03-2016 10:24 2612024 |
Cпасибо, копирование кода в чистый новый файл не помогло
|
Цитата:
Цитата victor21043
Получается, для каждой новой версии word нужно заново писать макросы... »
|
Крайне редко. В большинстве случаев код работает без изменений или после небольшой доработки под новую объектную модель. У меня лично один код с небольшими изменениями прошёл реинкарнацию от Office 4.5 через Office 97 и Office 2000 до Office 2003.
|
Цитата:
Цитата victor21043
Получается, для каждой новой версии 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
Цитата:
Цитата Iska
один код с небольшими изменениями прошёл реинкарнацию »
|
У меня код при переходе с 2003 на 2010 не имел ни одного изменения по тексту, при этом не работал вообще никак. Спасло только перекопирование текста кода. Заработало без внесения каких-либо изменений по коду. Как я понял - кроме текста кода сохраняется большое количество служебной информации, которая также может содержать ошибки, из-за которых код может работать не вполне правильно. Речь правда про Excel.
|
victor21043 |
02-03-2016 15:03 2612156 |
Поле 1 Кто это такой? Переменная?
Компонент с указанным именем не найден
Цитата:
По крайней мере у меня в таком варианте поле скрывается и отображается.
|
Спасибо,
|
Цитата:
Цитата victor21043
Поле 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")» (мне нечем проверять)?!
|
Цитата:
Цитата Iska
a_axe, посмотрите, нет ли там возможности простого именного доступа к объекту, т.е. — «Shapes.Item("Поле 1")» »
|
Iska, указанная строчка корректно выполняется в Word 2010. Сейчас понимаю, что это самая логичная форма обратиться к экземпляру из коллекции объектов, стормозил.
victor21043, замените строку на код указанный Iska: Shapes.Item("Поле 1").Visible = .Caption Like ">> *" это непосредственное обращение к объекту (вне зависимости какой он по счету). "Поле 1" - имя, данное Excel вашему текстовому окошку.
|
Цитата:
Цитата a_axe
Iska, указанная строчка корректно выполняется в Word 2010. »
|
a_axe, спасибо, ясно.
|
victor21043 |
02-03-2016 22:32 2612282 |
Cпасибо ,всем
Очень хорошо,что макросы написаны не на фортране,алгоу или с++
|
Цитата:
Цитата victor21043
Очень хорошо,что макросы написаны не на фортране,алгоу или с++ »
|
Вполне нормальные языки :).
|
Время: 21:58.
© OSzone.net 2001-