Учиться имеет смысл если сразу после учёбы, а ещё лучше - прямо во время неё начинать пользоваться полученными теоретическими знаниями для нарабатывания практических навыков. А презентации мне приходится делать от силы раз в году, да и то самые простые - без анимации. Поэтому когда это в очередной раз понадобится, я уже всё благополучно успею забыть за ненадобностью и отсутствием наработанных навыков. Да и учёба - чистая профанация: 8 часов за один день! Да за 4 часа-то нормального изучения программы башка опухнет, а тут сразу 8!
Учиться имеет смысл если сразу после учёбы, а ещё лучше - прямо во время неё начинать пользоваться полученными теоретическими знаниями для нарабатывания практических навыков. А презентации мне приходится делать от силы раз в году, да и то самые простые - без анимации. Поэтому когда это в очередной раз понадобится, я уже всё благополучно успею забыть за ненадобностью и отсутствием наработанных навыков. Да и учёба - чистая профанация: 8 часов за один день! Да за 4 часа-то нормального изучения программы башка опухнет, а тут сразу 8!Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Четверг, 13.12.2012, 22:02
Вспомнил, что собирался чуть доработать процедуру сортировки листов книги так, чтобы кроме ярлыков по именам сортировались ещё и листы в VBProject (расставлялись ещё и CodeName). Решил, что совмещать эти две сортировки неудобно, а лучше сделать отдельную процедуру, которая изменит CodeName каждого листа в соответствии с положением его ярлыка (т.е. в соответствии с индексом). Вот так получилось, если это, конечно, кому-нибудь ещё интересно
[vba]
Code
Private Sub ChangeCodeNames() ' изменить CodeName листов в соответствии с расположением из ярлыков (индексом) Dim Sh As Worksheet For Each Sh In .Sheets ActiveWorkbook.VBProject.VBComponents(Sh.CodeName).Name = "Sheet" & Application.WorksheetFunction.Text(Sh.Index, "00") Next End Sub
[/vba]
Вспомнил, что собирался чуть доработать процедуру сортировки листов книги так, чтобы кроме ярлыков по именам сортировались ещё и листы в VBProject (расставлялись ещё и CodeName). Решил, что совмещать эти две сортировки неудобно, а лучше сделать отдельную процедуру, которая изменит CodeName каждого листа в соответствии с положением его ярлыка (т.е. в соответствии с индексом). Вот так получилось, если это, конечно, кому-нибудь ещё интересно
[vba]
Code
Private Sub ChangeCodeNames() ' изменить CodeName листов в соответствии с расположением из ярлыков (индексом) Dim Sh As Worksheet For Each Sh In .Sheets ActiveWorkbook.VBProject.VBComponents(Sh.CodeName).Name = "Sheet" & Application.WorksheetFunction.Text(Sh.Index, "00") Next End Sub
Alex_ST, конечно интересно. Только у меня выдает ошибку "Invalid or unqualified reference". Что я делаю не так? В параметрах безопасности "Доверятьдоступ к объектной модели стоит" птичка стоит.
Alex_ST, конечно интересно. Только у меня выдает ошибку "Invalid or unqualified reference". Что я делаю не так? В параметрах безопасности "Доверятьдоступ к объектной модели стоит" птичка стоит.Мур
Сообщение отредактировал Мур - Вторник, 18.12.2012, 12:26
Странно... Я специально использовал позднее связывание чтобы не нужно было заранее подключать в референсах библиотеку Microsoft Visual Basic for Applications Extensibility 5.3
О! А в безопасности макросов на вкладке "Надёжные издатели" у Вас гулька "Доверять доступ к Visual Basic Project" установлена? Скорее всего нет. Поэтому и не удаётся обратиться к референсам.
Странно... Я специально использовал позднее связывание чтобы не нужно было заранее подключать в референсах библиотеку Microsoft Visual Basic for Applications Extensibility 5.3
О! А в безопасности макросов на вкладке "Надёжные издатели" у Вас гулька "Доверять доступ к Visual Basic Project" установлена? Скорее всего нет. Поэтому и не удаётся обратиться к референсам.Alex_ST
Пока я писал предыдущий ответ на Ваш вопрос, вы уже успели дать уточнение про "Доверять доступ к Visual Basic Project" но пусть уж для других останется.
А на какой оператор ругается можете выяснить? Там, конечно, у меня всё сокращено в одну строку, поэтому если вылетает, то вылетает сразу. Ну так разбейте на отдельные переменные и пройдитесь пошагово чтобы высянить, на что конкретно ругается..
Пока я писал предыдущий ответ на Ваш вопрос, вы уже успели дать уточнение про "Доверять доступ к Visual Basic Project" но пусть уж для других останется.
А на какой оператор ругается можете выяснить? Там, конечно, у меня всё сокращено в одну строку, поэтому если вылетает, то вылетает сразу. Ну так разбейте на отдельные переменные и пройдитесь пошагово чтобы высянить, на что конкретно ругается..Alex_ST
А при чём тут Справка? В ней не написано, на какой оператор или команду в коде ругается Excel.
А при чём тут вкладка "Надёжные издатели", если у Вас, оказывается, 2007/2010? И как я мог об этом догадаться? "Доверять доступ к Visual Basic Project" в них ставится на вкладке "Безопасность макросов" Но ведь Вы же утверждаете, что
Quote (Мур)
В параметрах безопасности "Доверятьдоступ к объектной модели стоит" птичка стоит.
Значит, Вы сами должны знать, где эта "птичка" ставится и, наверное, прежде чем писать, что она стоит, проверили?
А при чём тут Справка? В ней не написано, на какой оператор или команду в коде ругается Excel.
А при чём тут вкладка "Надёжные издатели", если у Вас, оказывается, 2007/2010? И как я мог об этом догадаться? "Доверять доступ к Visual Basic Project" в них ставится на вкладке "Безопасность макросов" Но ведь Вы же утверждаете, что
Quote (Мур)
В параметрах безопасности "Доверятьдоступ к объектной модели стоит" птичка стоит.
Значит, Вы сами должны знать, где эта "птичка" ставится и, наверное, прежде чем писать, что она стоит, проверили?Alex_ST
Ну да, и я облажался не проверив Выдрал кусок из кода и точку не заметил Конечно, так должно быть:
[vba]
Code
Sub ChangeCodeNames() ' изменить CodeName листов в соответствии с расположением из ярлыков (индексом) Dim Sh As Worksheet For Each Sh In ActiveWorkbook.Sheets ActiveWorkbook.VBProject.VBComponents(Sh.CodeName).Name = "Sheet" & Application.WorksheetFunction.Text(Sh.Index, "00") Next Sh End Sub
[/vba]
Но, честно говоря, Мур при его уже вполне, кажется, достаточном опыте мог бы и сам это заметить и определить почему не работает.
Ну да, и я облажался не проверив Выдрал кусок из кода и точку не заметил Конечно, так должно быть:
[vba]
Code
Sub ChangeCodeNames() ' изменить CodeName листов в соответствии с расположением из ярлыков (индексом) Dim Sh As Worksheet For Each Sh In ActiveWorkbook.Sheets ActiveWorkbook.VBProject.VBComponents(Sh.CodeName).Name = "Sheet" & Application.WorksheetFunction.Text(Sh.Index, "00") Next Sh End Sub
[/vba]
Но, честно говоря, Мур при его уже вполне, кажется, достаточном опыте мог бы и сам это заметить и определить почему не работает.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Вторник, 18.12.2012, 15:25