Всем привет! Не знаю на сколько данный вопрос будет трудный для вас, но просто хочется расшевелить макросо-знавцев Итак, вопрос: Как с помощью одного макроса изменить КОД другого макроса. Оба макроса находятся в одной книге. Пример: есть модуль "tt", в нём есть макрос "test", в котором есть строка MsgBox "No :(", необходимо с помощью второго макроса заменить данную строку с MsgBox на MsgBox с текстом "Yes :)" Что находится в модуле "tt", помимо макроса "test" - нам не известно. Также не известно расположение данного макроса. Мой вариант - 285 символов кода
Всем привет! Не знаю на сколько данный вопрос будет трудный для вас, но просто хочется расшевелить макросо-знавцев Итак, вопрос: Как с помощью одного макроса изменить КОД другого макроса. Оба макроса находятся в одной книге. Пример: есть модуль "tt", в нём есть макрос "test", в котором есть строка MsgBox "No :(", необходимо с помощью второго макроса заменить данную строку с MsgBox на MsgBox с текстом "Yes :)" Что находится в модуле "tt", помимо макроса "test" - нам не известно. Также не известно расположение данного макроса. Мой вариант - 285 символов кодаLightZ
в какой? текущей? в той же, в которой мы пишем свой макрос?
пока 252 символа, включая пробелы, вставляемые редактором автоматически.
upd свои поиски прекращаю. ничем подобным раньше не занимался, поэтому подбирал методы-свойства методом тыка. но укоротить свой код принципиальной возможности не вижу, кроме как подобрать другие методы-свойства. алгоритм один и тот же (и, скажем прямо, примитивный), длина кода зависит от доступных инструментов.
Цитата (LightZ)
Оба макроса находятся в одной книге.
в какой? текущей? в той же, в которой мы пишем свой макрос?
пока 252 символа, включая пробелы, вставляемые редактором автоматически.
upd свои поиски прекращаю. ничем подобным раньше не занимался, поэтому подбирал методы-свойства методом тыка. но укоротить свой код принципиальной возможности не вижу, кроме как подобрать другие методы-свойства. алгоритм один и тот же (и, скажем прямо, примитивный), длина кода зависит от доступных инструментов.ikki
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
Сообщение отредактировал ikki - Воскресенье, 03.02.2013, 14:29
У меня в текущей. В одном модуле "tt" некий макрос, у которого есть строка MsgBox "No :(" А во втором модуле макрос в 177 символов. Подсчет как в правилах форума, без строки заголовка макроса и без строки окончания.
У меня в текущей. В одном модуле "tt" некий макрос, у которого есть строка MsgBox "No :(" А во втором модуле макрос в 177 символов. Подсчет как в правилах форума, без строки заголовка макроса и без строки окончания.AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
у меня самое длинное решение, поэтому напишу: [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М'а
у меня самое длинное решение, поэтому напишу: [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
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
Сообщение отредактировал ikki - Воскресенье, 03.02.2013, 14:45
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]
У меня чуток не так, с циклом: [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