Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Office (Word, Excel, Outlook и т.д.) (http://forum.oszone.net/forumdisplay.php?f=115)
-   -   Конвертация кода VBA 2003 в 2010\макросы (http://forum.oszone.net/showthread.php?t=312142)

victor21043 29-02-2016 12:04 2611353

Конвертация кода VBA 2003 в 2010\макросы
 
Уважаемые пользователи,
При переводе в формат word-docm 2010 из word 2003 перестаёт работать код макроса ( VBA)
В чём может быть причина?
Благодарю,
Вот два образца:

Iska 29-02-2016 12:36 2611366

Цитата:

Цитата victor21043
PS Буду благодарен,если вы добавите вспл.подсказку .tooltiptext="xxx" к "button" »

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

victor21043 29-02-2016 16:39 2611449

У кого есть на WORD 2010 2013 2016

a_axe 01-03-2016 18:32 2611858

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

victor21043 02-03-2016 10:24 2612024

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

Iska 02-03-2016 10:51 2612036

Цитата:

Цитата victor21043
Получается, для каждой новой версии word нужно заново писать макросы... »

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

a_axe 02-03-2016 11:44 2612055

Цитата:

Цитата 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 Кто это такой? Переменная?
Компонент с указанным именем не найден
Цитата:

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

a_axe 02-03-2016 15:19 2612164

Цитата:

Цитата 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 ">> *", также все должно работать.

Iska 02-03-2016 15:37 2612171

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

a_axe 02-03-2016 16:09 2612180

Цитата:

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

Iska, указанная строчка корректно выполняется в Word 2010. Сейчас понимаю, что это самая логичная форма обратиться к экземпляру из коллекции объектов, стормозил.

victor21043, замените строку на код указанный Iska: Shapes.Item("Поле 1").Visible = .Caption Like ">> *" это непосредственное обращение к объекту (вне зависимости какой он по счету). "Поле 1" - имя, данное Excel вашему текстовому окошку.

Iska 02-03-2016 17:41 2612208

Цитата:

Цитата a_axe
Iska, указанная строчка корректно выполняется в Word 2010. »

a_axe, спасибо, ясно.

victor21043 02-03-2016 22:32 2612282

Cпасибо ,всем
Очень хорошо,что макросы написаны не на фортране,алгоу или с++

Iska 03-03-2016 06:11 2612324

Цитата:

Цитата victor21043
Очень хорошо,что макросы написаны не на фортране,алгоу или с++ »

Вполне нормальные языки :).


Время: 21:58.

Время: 21:58.
© OSzone.net 2001-