Страницы: 1
RSS
запись макроса, изменение свойств документа в VBA
 
уважаемые форумчане,  
встретил в соседней теме отсылку The_Prist'а на свой сайт, где он оч. хорошо и с картинками описывает, что такое запись макроса и с чем её едят. там же написано, что макрорекодер записывает АБСОЛЮТНО ВСЕ действия юзера, выполняемые при его записи.  
вспомнил я свою давнишнюю проблемку, сходил в Ex, перепроверил...  
 
вопрос: при записи макроса не записываются изменения юзера, вносимые им на вкладке "Документ" окна "Свойства" (Автор, Тема и др.) - если выполнять только эти действия, макрос оказывается вообще пустой.  
более того, просмотрев свойства и методы объекта Workbook, я так ничего и не обнаружил, что относилось бы к этому вопросу :(  
 
просьба: пожалуйста, ткните носом - как можно в VBA прочитать или изменить, к примеру, Автора документа.  
 
спасибо за внимание.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
activeWorkbook.BuiltinDocumentProperties("Author")
 
{quote}{login=Юрий М}{date=23.04.2011 08:57}{thema=}{post}activeWorkbook.BuiltinDocumentProperties("Author"){/post}{/quote}  
 
вот как...  
спасибо, Юрий.    
 
правда, в справке написано:  
"Returns a DocumentProperties collection that represents all the built-in document properties for the specified workbook. Read-only."  
(смущают последние два слова, через интерфейс-то меняем без проблем)  
 
сейчас будем попробовать.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
попробовал.  
вроде бы всё нормально работает - и чтение свойств, и их изменение.  
правда, я так и не понял, к чему относится "Read-only" в справке. если к списку в коллекции - то тогда почему и для объекта DocumentProperty тоже написано только "to return" и нигде "to set" или "to change"...  
 
впрочем, это не так уж важно.  
проблемка решена.  
тема закрыта.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Обратите внимание на редко используемое свойство "База гиперссылки"  
Workbook.BuiltinDocumentProperties("Hyperlink Base")  
При его грамотном применении не возникает вопроса "Как изменить 100500 гиперссылок из-за перемещения папки с файлами?".
 
Мало того, макрос, записанный макрорекодером может не работать!  
На своей шкуре:  
20007    
Не пишет действия с внедренными объектами.  
Строка из под макрорекордера с изменением заливки отказалась работать!!!!!  
На мой вопрос, почему так происходит я получил много советов как изменить заливку, но так и не получил ответа на самый главный вопрос  - ПОЧЕМУ МАКРОС, ЗАПИСАННЫЙ МАКРОРЕКОРДЕРОМ, НЕ РАБОТАЕТ!!!
 
ага, спасибо Казанскому за наводку :)  
 
а то, что макрорекодер порой подглючивает, я уже сталкивался.  
кажется, на этом форуме я писал про глюки с установкой границ ячеек (Ex'2003).  
 
пс для адвокатов макрорекодера :) макрорекодер - штука хорошая, я им порой пользуюсь. просто, как и к любому инструменту, к нему надо относиться осторожно и, по возможности, знать о плюсах и минусах. "доверяй, но проверяй", как говорится.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
{quote}{login=RAN}{date=23.04.2011 10:55}{thema=макрорекодер записывает АБСОЛЮТНО ВСЕ 1000% врака!}{post} так и не получил ответа на самый главный вопрос  - ПОЧЕМУ МАКРОС, ЗАПИСАННЫЙ МАКРОРЕКОРДЕРОМ, НЕ РАБОТАЕТ!!!{/post}{/quote}  
RAN, ну вот как ответить на Ваш вопрос? Записал я сейчас (2003) заливку ячейки. Запускаю макрос - срабатывает правильно. А "не работает" - КАК? Не меняет заливку, выдаёт ошибку, заливает другим цветом...?
 
Когда-то все мы писали код хуже макрорекодера, но он при этом не записывал в комментариях, что мы тупые или глючим :-)  
До сих пор с удовольствием пользуюсь этим (ударение в следующем слове поставьте сами) чудным  созданием.  
 
Кстати, редко кто в своих  макросах помогает этому созданию.  
Покажу пример:  
 
Sub МойМакрос()  
 
 MsgBox "Если включен макрорекодер, то он запишет вызов моего макроса"  
 
 Application.RecordMacro "' Моя первая попытка помочь макрорекодеру" & _  
 vbLf & "Call МойМакрос" & vbLf  
 
 MsgBox "Выключите макрорекодер и посмотрите"  
 
End Sub  
 
Если включить макрорекодер, затем вызвать МойМакрос с помощью Alt-F8 или через меню, остановить макрорекодер, то он впишет в созданный макрос то, что ему было предписано Вами свыше.
 
ZVI, почему ?  
'  
Sub МойМакрос2()  
   Application.RecordMacro "Call МойМакрос2"  
End Sub  
Sub МойМакрос3()  
   Application.RecordMacro "Call МойМакрос3"  
   ActiveCell.Interior.Color = RGB(100, 100, 100)  
End Sub  
Sub Макрос6() '<--- Здесь получилось ---'  
' Макрос6 Макрос  
' Макрос записан 24.04.2011 (Саша)  
   Range("C7").Select  
   ActiveCell.FormulaR1C1 = "=1"  
   Range("C8").Select  
   Call МойМакрос2  
   ActiveCell.FormulaR1C1 = "=R[-1]C-1"
   Range("C10").Select  
End Sub  
Sub Макрос8()'<--- А здесь не получилось ---'  
' Макрос8 Макрос  
' Макрос записан 24.04.2011 (Саша)  
   Range("C7").Select  
   ActiveCell.FormulaR1C1 = "=1"  
   Range("C8").Select  
   ActiveCell.FormulaR1C1 = "=R[-1]C-1"
   Range("C10").Select  
End Sub
 
Макрорекодер и во 2-м случае записывает код вызова макроса МойМакрос3.  
Это легко можно обнаружить, подглядывая после каждого шага, что там макрорекодер пишет в свой  макрос. Или после выключения макрорекодера войти в VBE и понажимать отмену посредством Ctrl-Z или из меню VBE – Edit – Undo delete.  
 
Но, на нашу беду, макрорекодер обнаружив, что что-то делается с ячейками, удаляет из записываемого им кода действия, которые ему кажутся лишними.  
В данном случае он подумал, что мы просто топтались по ячейке С8 и пошли дальше. Наверное, сильно ругали разработчиков макрорекодера, что он пишет все подряд, вот они и оптимизировали, как смогли. Теперь можно ругать наоборот :-)  
 
В данном случае, если завершить запись вызовом макроса МойМакрос3 и не переходить в другие ячейки, то запись останется. Или если при записи макрорекодером после применения макроса МойМакрос3 что-то сделать с активной ячейкой (сигнал макрорекодеру, чтобы не удалял), например, нажать F2 и Enter, то вызов МойМакрос3 также не будет удален.
 
ZVI, спасибо. Я потом ещё 23,5 :-) раза повторил запись, пришёл к тем-же выводам и ... уснул.
 
Вот этот чудный(ой) макрос.  
Sub Макрос4()  
'  
   With Selection.Font  
       .Color = -1  
       .TintAndShade = 0  
   End With  
   With Selection.Interior  
       .Pattern = xlSolid  
       .PatternColorIndex = xlAutomatic  
       .Color = 16777215  
       .TintAndShade = 0  
       .PatternTintAndShade = 0  
   End With  
End Sub  
При записи нажимал одну и ту же кнопку цвета.  
При запуске меняет заливку на белую, а цвет текста на черный.  
А если поменять местами строки  
       .Color = -1  
     .Color = 16777215  
то и заливка, и текст становятся белыми.
Страницы: 1
Читают тему
Наверх