Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Изменить код модуля макросом - Мир MS Excel

Старая форма входа
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: китин  
Мир MS Excel » Работа и общение » Мозговой штурм » Изменить код модуля макросом (Мозговой штурм для программистов)
Изменить код модуля макросом
LightZ Дата: Суббота, 02.02.2013, 19:28 | Сообщение № 1
Группа: Авторы
Ранг: Форумчанин
Сообщений: 120
Репутация: 48 ±
Замечаний: 0% ±

Всем привет!
Не знаю на сколько данный вопрос будет трудный для вас, но просто хочется расшевелить макросо-знавцев smile
Итак, вопрос:
Как с помощью одного макроса изменить КОД другого макроса.
Оба макроса находятся в одной книге.
Пример: есть модуль "tt", в нём есть макрос "test", в котором есть строка MsgBox "No :(", необходимо с помощью второго макроса заменить данную строку с MsgBox на MsgBox с текстом "Yes :)"
Что находится в модуле "tt", помимо макроса "test" - нам не известно. Также не известно расположение данного макроса.
Мой вариант - 285 символов кода


E-mail: overseerpower@gmail.com
Skype: Bogdan_Rud
WMR: R166238237296


Сообщение отредактировал LightZ - Воскресенье, 03.02.2013, 12:51
 
Ответить
СообщениеВсем привет!
Не знаю на сколько данный вопрос будет трудный для вас, но просто хочется расшевелить макросо-знавцев smile
Итак, вопрос:
Как с помощью одного макроса изменить КОД другого макроса.
Оба макроса находятся в одной книге.
Пример: есть модуль "tt", в нём есть макрос "test", в котором есть строка MsgBox "No :(", необходимо с помощью второго макроса заменить данную строку с MsgBox на MsgBox с текстом "Yes :)"
Что находится в модуле "tt", помимо макроса "test" - нам не известно. Также не известно расположение данного макроса.
Мой вариант - 285 символов кода

Автор - LightZ
Дата добавления - 02.02.2013 в 19:28
AlexM Дата: Суббота, 02.02.2013, 22:53 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4491
Репутация: 1115 ±
Замечаний: 0% ±

Excel 2003
Цитата (LightZ)
модуль "tt", в нём есть MsgBox "No :("

Т.е в модуле "tt" макрос типа
[vba]
Код
Sub yy()
MsgBox "No :("
End Sub
[/vba]
Так?



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
Сообщение
Цитата (LightZ)
модуль "tt", в нём есть MsgBox "No :("

Т.е в модуле "tt" макрос типа
[vba]
Код
Sub yy()
MsgBox "No :("
End Sub
[/vba]
Так?

Автор - AlexM
Дата добавления - 02.02.2013 в 22:53
Hugo Дата: Воскресенье, 03.02.2013, 00:09 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3253
Репутация: 707 ±
Замечаний: 0% ±

2019


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
Сообщениеhttp://msoffice.nm.ru/faq/macros/module.htm#faq327

Автор - Hugo
Дата добавления - 03.02.2013 в 00:09
AlexM Дата: Воскресенье, 03.02.2013, 08:28 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4491
Репутация: 1115 ±
Замечаний: 0% ±

Excel 2003
Цитата (Hugo)
http://msoffice.nm.ru/faq/macros/module.htm#faq327

Это значит раскрылись? smile



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
Сообщение
Цитата (Hugo)
http://msoffice.nm.ru/faq/macros/module.htm#faq327

Это значит раскрылись? smile

Автор - AlexM
Дата добавления - 03.02.2013 в 08:28
Serge_007 Дата: Воскресенье, 03.02.2013, 09:29 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Цитата (AlexM)
Это значит раскрылись?

А где
Цитата (LightZ)
285 символов кода

?
wink


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Цитата (AlexM)
Это значит раскрылись?

А где
Цитата (LightZ)
285 символов кода

?
wink

Автор - Serge_007
Дата добавления - 03.02.2013 в 09:29
AlexM Дата: Воскресенье, 03.02.2013, 09:55 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4491
Репутация: 1115 ±
Замечаний: 0% ±

Excel 2003
Я про ссылку. Там много решений
Видно что можно сделать значительно короче 285. Почти в три раза.



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.


Сообщение отредактировал AlexM - Воскресенье, 03.02.2013, 10:03
 
Ответить
СообщениеЯ про ссылку. Там много решений
Видно что можно сделать значительно короче 285. Почти в три раза.

Автор - AlexM
Дата добавления - 03.02.2013 в 09:55
Serge_007 Дата: Воскресенье, 03.02.2013, 10:05 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Цитата (AlexM)
можно сделать

Тогда за чем дело стало? smile


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Цитата (AlexM)
можно сделать

Тогда за чем дело стало? smile

Автор - Serge_007
Дата добавления - 03.02.2013 в 10:05
AlexM Дата: Воскресенье, 03.02.2013, 10:08 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4491
Репутация: 1115 ±
Замечаний: 0% ±

Excel 2003
Ок.
[vba]
Код
ThisWorkbook.VBProject.VBComponents.Item("tt").CodeModule.ReplaceLine 2, "MsgBox ""Yes :)"""
[/vba]
92 символа
Если в модуле "tt" макрос типа
[vba]
Код
Sub yy()
MsgBox "No :("
End Sub
[/vba]



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.


Сообщение отредактировал AlexM - Воскресенье, 03.02.2013, 10:09
 
Ответить
СообщениеОк.
[vba]
Код
ThisWorkbook.VBProject.VBComponents.Item("tt").CodeModule.ReplaceLine 2, "MsgBox ""Yes :)"""
[/vba]
92 символа
Если в модуле "tt" макрос типа
[vba]
Код
Sub yy()
MsgBox "No :("
End Sub
[/vba]

Автор - AlexM
Дата добавления - 03.02.2013 в 10:08
ikki Дата: Воскресенье, 03.02.2013, 11:46 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
Цитата (AlexM)
Если в модуле "tt" макрос типа

а условия каждый сам под себя переписывает как заблагорассудится? biggrin

автором темы сказано лишь:
Цитата (LightZ)
есть модуль "tt", в нём есть MsgBox "No :("


пс. у меня решения пока нет.


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщение
Цитата (AlexM)
Если в модуле "tt" макрос типа

а условия каждый сам под себя переписывает как заблагорассудится? biggrin

автором темы сказано лишь:
Цитата (LightZ)
есть модуль "tt", в нём есть MsgBox "No :("


пс. у меня решения пока нет.

Автор - ikki
Дата добавления - 03.02.2013 в 11:46
AlexM Дата: Воскресенье, 03.02.2013, 12:04 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4491
Репутация: 1115 ±
Замечаний: 0% ±

Excel 2003
Цитата (ikki)
условия каждый сам под себя переписывает как заблагорассудится?

Что не запрещено, то можно. smile



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
Сообщение
Цитата (ikki)
условия каждый сам под себя переписывает как заблагорассудится?

Что не запрещено, то можно. smile

Автор - AlexM
Дата добавления - 03.02.2013 в 12:04
LightZ Дата: Воскресенье, 03.02.2013, 12:15 | Сообщение № 11
Группа: Авторы
Ранг: Форумчанин
Сообщений: 120
Репутация: 48 ±
Замечаний: 0% ±

Изначально не известно как выглядит модуль "tt", дано только условие, что в макросе есть строка MsgBox "No :("


E-mail: overseerpower@gmail.com
Skype: Bogdan_Rud
WMR: R166238237296
 
Ответить
СообщениеИзначально не известно как выглядит модуль "tt", дано только условие, что в макросе есть строка MsgBox "No :("

Автор - LightZ
Дата добавления - 03.02.2013 в 12:15
LightZ Дата: Воскресенье, 03.02.2013, 12:27 | Сообщение № 12
Группа: Авторы
Ранг: Форумчанин
Сообщений: 120
Репутация: 48 ±
Замечаний: 0% ±

Сократил до 229 символов


E-mail: overseerpower@gmail.com
Skype: Bogdan_Rud
WMR: R166238237296


Сообщение отредактировал LightZ - Воскресенье, 03.02.2013, 12:30
 
Ответить
СообщениеСократил до 229 символов

Автор - LightZ
Дата добавления - 03.02.2013 в 12:27
LightZ Дата: Воскресенье, 03.02.2013, 12:52 | Сообщение № 13
Группа: Авторы
Ранг: Форумчанин
Сообщений: 120
Репутация: 48 ±
Замечаний: 0% ±

Обновил условия в первом посте.


E-mail: overseerpower@gmail.com
Skype: Bogdan_Rud
WMR: R166238237296
 
Ответить
СообщениеОбновил условия в первом посте.

Автор - LightZ
Дата добавления - 03.02.2013 в 12:52
AlexM Дата: Воскресенье, 03.02.2013, 12:59 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4491
Репутация: 1115 ±
Замечаний: 0% ±

Excel 2003
Тогда 177 знаков



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
СообщениеТогда 177 знаков

Автор - AlexM
Дата добавления - 03.02.2013 в 12:59
ikki Дата: Воскресенье, 03.02.2013, 14:11 | Сообщение № 15
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
Цитата (LightZ)
Оба макроса находятся в одной книге.

в какой?
текущей?
в той же, в которой мы пишем свой макрос?

пока 252 символа, включая пробелы, вставляемые редактором автоматически.

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


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki


Сообщение отредактировал ikki - Воскресенье, 03.02.2013, 14:29
 
Ответить
Сообщение
Цитата (LightZ)
Оба макроса находятся в одной книге.

в какой?
текущей?
в той же, в которой мы пишем свой макрос?

пока 252 символа, включая пробелы, вставляемые редактором автоматически.

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

Автор - ikki
Дата добавления - 03.02.2013 в 14:11
AlexM Дата: Воскресенье, 03.02.2013, 14:30 | Сообщение № 16
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4491
Репутация: 1115 ±
Замечаний: 0% ±

Excel 2003
У меня в текущей.
В одном модуле "tt" некий макрос, у которого есть строка MsgBox "No :("
А во втором модуле макрос в 177 символов. Подсчет как в правилах форума, без строки заголовка макроса и без строки окончания.



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
СообщениеУ меня в текущей.
В одном модуле "tt" некий макрос, у которого есть строка MsgBox "No :("
А во втором модуле макрос в 177 символов. Подсчет как в правилах форума, без строки заголовка макроса и без строки окончания.

Автор - AlexM
Дата добавления - 03.02.2013 в 14:30
ikki Дата: Воскресенье, 03.02.2013, 14:34 | Сообщение № 17
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
Цитата (AlexM)
некий макрос

почему "некий"?
у него есть вполне конкретное имя.

Цитата (AlexM)
А во втором модуле

а откуда это следует?

вообще - смотрите первый пост. там всё довольно неплохо написано wink


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki


Сообщение отредактировал ikki - Воскресенье, 03.02.2013, 14:38
 
Ответить
Сообщение
Цитата (AlexM)
некий макрос

почему "некий"?
у него есть вполне конкретное имя.

Цитата (AlexM)
А во втором модуле

а откуда это следует?

вообще - смотрите первый пост. там всё довольно неплохо написано wink

Автор - ikki
Дата добавления - 03.02.2013 в 14:34
LightZ Дата: Воскресенье, 03.02.2013, 14:39 | Сообщение № 18
Группа: Авторы
Ранг: Форумчанин
Сообщений: 120
Репутация: 48 ±
Замечаний: 0% ±

Ну, цель была расшевелить макросо-знавцев, возможно даже кому-то вникнуть в что-то новое smile
Так что - раскрываем карты?


E-mail: overseerpower@gmail.com
Skype: Bogdan_Rud
WMR: R166238237296
 
Ответить
СообщениеНу, цель была расшевелить макросо-знавцев, возможно даже кому-то вникнуть в что-то новое smile
Так что - раскрываем карты?

Автор - LightZ
Дата добавления - 03.02.2013 в 14:39
ikki Дата: Воскресенье, 03.02.2013, 14:41 | Сообщение № 19
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
у меня самое длинное решение, поэтому напишу:
[vba]
Код
Sub x()
     With ThisWorkbook.VBProject.VBComponents.Item("tt").CodeModule
       n = .ProcStartLine("test", 0)
       m = .ProcCountLines("test", 0)
       s = .Lines(n, m)
       .DeleteLines n, m
       .AddFromString Replace(s, "MsgBox ""No :(""", "MsgBox ""Yes :)""")
     End With
End Sub
[/vba]

а вообще времени немного прошло.
может, ещё желающие найдутся побить рекорд AlexМ


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki


Сообщение отредактировал ikki - Воскресенье, 03.02.2013, 14:45
 
Ответить
Сообщениеу меня самое длинное решение, поэтому напишу:
[vba]
Код
Sub x()
     With ThisWorkbook.VBProject.VBComponents.Item("tt").CodeModule
       n = .ProcStartLine("test", 0)
       m = .ProcCountLines("test", 0)
       s = .Lines(n, m)
       .DeleteLines n, m
       .AddFromString Replace(s, "MsgBox ""No :(""", "MsgBox ""Yes :)""")
     End With
End Sub
[/vba]

а вообще времени немного прошло.
может, ещё желающие найдутся побить рекорд AlexМ

Автор - ikki
Дата добавления - 03.02.2013 в 14:41
LightZ Дата: Воскресенье, 03.02.2013, 14:59 | Сообщение № 20
Группа: Авторы
Ранг: Форумчанин
Сообщений: 120
Репутация: 48 ±
Замечаний: 0% ±

У меня чуток не так, с циклом:
[vba]
Код
    s = "MsgBox " & Chr(34) & "No :(" & Chr(34)
     x = "MsgBox " & Chr(34) & "Yes :)" & Chr(34)
     With ThisWorkbook.VBProject.VBComponents("tt").CodeModule
         For i = .ProcBodyLine("test", 0) To (.ProcCountLines("test", 0) + .ProcBodyLine("test", 0))
             If .Lines(i, 1) = s Then
                 .ReplaceLine i, x
             End If
         Next
     End With
[/vba]


E-mail: overseerpower@gmail.com
Skype: Bogdan_Rud
WMR: R166238237296
 
Ответить
СообщениеУ меня чуток не так, с циклом:
[vba]
Код
    s = "MsgBox " & Chr(34) & "No :(" & Chr(34)
     x = "MsgBox " & Chr(34) & "Yes :)" & Chr(34)
     With ThisWorkbook.VBProject.VBComponents("tt").CodeModule
         For i = .ProcBodyLine("test", 0) To (.ProcCountLines("test", 0) + .ProcBodyLine("test", 0))
             If .Lines(i, 1) = s Then
                 .ReplaceLine i, x
             End If
         Next
     End With
[/vba]

Автор - LightZ
Дата добавления - 03.02.2013 в 14:59
Мир MS Excel » Работа и общение » Мозговой штурм » Изменить код модуля макросом (Мозговой штурм для программистов)
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!