PDA

Показать полную графическую версию : [решено] Макрос Office 2013, with


victor21043
03-08-2017, 13:03
Уважаемый пользователи,

В файле есть несколько форм(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
В файле есть несколько форм »
Приложите к сообщению образец файла, упакованного в архив.

victor21043
03-08-2017, 23:35
Спасибо,
https://cloud.mail.ru/public/83W4/rZp2DPoc6

Iska
04-08-2017, 09:46
несколько форм(shape 1,2,3 итд) »
Рисунков?

к ним хочется применить единые правила оформления »
Так?
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

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

victor21043
05-08-2017, 09:39
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
victor21043, я ничего не могу сказать, поскольку а) не понимаю, что Вы хотите сделать и б) у меня другая верси Office.

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

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

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

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

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

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

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




© OSzone.net 2001-2012