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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Office (Word, Excel, Outlook и т.д.) (http://forum.oszone.net/forumdisplay.php?f=115)
-   -   [решено] Макрос Office 2013, with (http://forum.oszone.net/showthread.php?t=328845)

victor21043 03-08-2017 13:03 2755996

Макрос Office 2013, with
 
Уважаемый пользователи,

В файле есть несколько форм(shape 1,2 итд),к ним хочется применить единые правила оформления и сократить код.

Не получается вынести повторяющиеся участки кода в отдельную процедуру-подпрограмму-ошибка компилятора,при инициализации кода макроса.

Есть возможность реализовать это на языке VBA?

Благодарю,всего доброго Вам,
Код:

Sub style
With ActiveDocument.Shapes() rem () все формы в проекте
.Visible = msoTriStateToggle
.BackgroundStyle = msoBackgroundStylePreset10

N-1,2,3 итд
Код:

Public Sub ButtonN_click()
Call style
end sub


Iska 03-08-2017 13:50 2756006

Цитата:

Цитата victor21043
В файле есть несколько форм »

Приложите к сообщению образец файла, упакованного в архив.

victor21043 03-08-2017 23:35 2756162

Спасибо,
HTML код:

https://cloud.mail.ru/public/83W4/rZp2DPoc6

Iska 04-08-2017 09:46 2756228

Цитата:

Цитата victor21043
несколько форм(shape 1,2,3 итд) »

Рисунков?

Цитата:

Цитата victor21043
к ним хочется применить единые правила оформления »

Так?
Скрытый текст
Код:

Sub Sample()
    Dim objShape As Shape
   
    For Each objShape In ThisDocument.Shapes
        With objShape
            .Visible = msoTriStateToggle
            .BackgroundStyle = msoBackgroundStylePreset10
           
            With .Reflection
                .Type = msoReflectionType1
                .Transparency = 0.5
                .Size = 22
                .Offset = 0
            End With
        End With
    Next objShape
End Sub


Цитата:

Цитата victor21043
Не получается вынести повторяющиеся участки кода в отдельную процедуру-подпрограмму-ошибка компилятора,при инициализации кода макроса. »

Не могу понять вопроса. Возможно ещё и потому, что у меня более ранняя версия Microsoft Office.

victor21043 05-08-2017 09:39 2756446

Run time error 445-Объект не поддерживает такого действия

Код:

Sub style()
Dim objShape As Shape

    For Each objShape In ThisDocument.Shapes
        With objShape
            .BackgroundStyle = msoBackgroundStylePreset10   
            With .Reflection
                .Type = msoReflectionType1
                .Transparency = 0.5
                .Size = 22
                .Offset = 0
            End With
        End With
    Next objShape
End Sub

 Public Sub ButtonN_click()
ActiveDocument.Shapes(N).Visible = msoTriStateToggle
Call style
end sub


Iska 05-08-2017 09:51 2756449

victor21043, я ничего не могу сказать, поскольку а) не понимаю, что Вы хотите сделать и б) у меня другая верси Office.

a_axe 05-08-2017 11:48 2756467

К сожалению, у меня в ближайшее - до среды - время доступ только к смарту на Андроиде, посмотреть работу кода негде. В остальном - нечего добавить к словам Iska .

victor21043, в изначальном коде алгоритм пытается присвоить свойства одного экземпляра shape коллекции (совокупности) таких элементов, подобные задачи решаются перебором всех экземпляров коллекции и присваиванием значения свойства каждого экземпляра (то, что привел в коде Iska)

Так вот, мне не очень понятно, как сработал этот (правильный) код, ошибку вы приводите для него, или для своего? Цель вашей корректировки - привязать код к кнопке?

В вашем варианте N2 меня смущает строчка ActiveDocument.Shapes(N).Visible = msoTriStateToggle, на мой взгляд - работать не должна.

Попробуйте запустить код Iska пошагово, через нажатие в vba редакторе F8, отследите исполнение какой строчки кода вызывает ошибку, по возможности удалите эту строку дабы понять, будет ли работать остальная часть кода.

Если вы хотите привязать код к кнопке, просто замените заглавие Sub Sample() на Public Sub ButtonN_click()

PS мысли вслух: не имея возможности открыть ваш файл - вы уверены, что перебирать нужно коллекцию shapes?


Время: 07:19.

Время: 07:19.
© OSzone.net 2001-