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

Вход

Регистрация

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

 

= Мир MS Excel/Программное изменение кода модуля - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Программное изменение кода модуля (Макросы/Sub)
Программное изменение кода модуля
farscince Дата: Пятница, 06.10.2017, 18:52 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Всем доброго дня!

Возникла проблема после обновлении кода модуля. Код процедуры обновляется, но при вызове процедуры, воспроизводится её "предыдущая версия", будто ничего не обновилось. Итак
Есть книга с модулем tt.

[vba]
Код
Sub test()
t = 1
MsgBox t
End Sub
[/vba]

На листе Лист1 - кнопка вызывает форму. На форме - Textbox и две кнопки.
Кнопка 1 вызывает процедуру test - Результат 1.
[vba]
Код
Private Sub CommandButton1_Click()
Call test
End Sub
[/vba]

Кнопка 2 изменяет код в процедуре test. Значение переменной t заменяем на значение, введенное в Textbox - пусть будет 2.

[vba]
Код
Private Sub CommandButton2_Click()
t = "t ="
X = "t = " & TextBox1.Text
    With ThisWorkbook.VBProject.VBComponents("tt").CodeModule
        N = .ProcBodyLine("test", 0)
        For i = N To .ProcCountLines("test", 0) + N - 1
            If InStr(.Lines(i, 1), t) > 0 Then .ReplaceLine i, X
        Next
    End With
End Sub
[/vba]

После нажатия на Кнопку2 код изменен - видно по окну VBA. Но повторное нажатие на Кнопку 1 выдает значение - 1. Подскажите почему? Как исправить?
К сообщению приложен файл: 4462759.xlsm(24Kb)


Сообщение отредактировал farscince - Пятница, 06.10.2017, 19:24
 
Ответить
СообщениеВсем доброго дня!

Возникла проблема после обновлении кода модуля. Код процедуры обновляется, но при вызове процедуры, воспроизводится её "предыдущая версия", будто ничего не обновилось. Итак
Есть книга с модулем tt.

[vba]
Код
Sub test()
t = 1
MsgBox t
End Sub
[/vba]

На листе Лист1 - кнопка вызывает форму. На форме - Textbox и две кнопки.
Кнопка 1 вызывает процедуру test - Результат 1.
[vba]
Код
Private Sub CommandButton1_Click()
Call test
End Sub
[/vba]

Кнопка 2 изменяет код в процедуре test. Значение переменной t заменяем на значение, введенное в Textbox - пусть будет 2.

[vba]
Код
Private Sub CommandButton2_Click()
t = "t ="
X = "t = " & TextBox1.Text
    With ThisWorkbook.VBProject.VBComponents("tt").CodeModule
        N = .ProcBodyLine("test", 0)
        For i = N To .ProcCountLines("test", 0) + N - 1
            If InStr(.Lines(i, 1), t) > 0 Then .ReplaceLine i, X
        Next
    End With
End Sub
[/vba]

После нажатия на Кнопку2 код изменен - видно по окну VBA. Но повторное нажатие на Кнопку 1 выдает значение - 1. Подскажите почему? Как исправить?

Автор - farscince
Дата добавления - 06.10.2017 в 18:52
Pelena Дата: Пятница, 06.10.2017, 21:40 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11829
Репутация: 2604 ±
Замечаний: 0% ±

Excel 2010, 2016 & Mac Excel
Пока открыта форма изменить текст модуля не получится


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеПока открыта форма изменить текст модуля не получится

Автор - Pelena
Дата добавления - 06.10.2017 в 21:40
farscince Дата: Суббота, 07.10.2017, 11:20 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Пока открыта форма изменить текст модуля не получится


Спасибо за ответ! Поправил так
[vba]
Код
Private Sub CommandButton2_Click()
t = "t ="
X = "t = " & TextBox1.Text
    With ThisWorkbook.VBProject.VBComponents("tt").CodeModule
        N = .ProcBodyLine("test", 0)
        For i = N To .ProcCountLines("test", 0) + N - 1
            If InStr(.Lines(i, 1), t) > 0 Then .ReplaceLine i, X
        Next
    End With
Unload UserForm1
UserForm1.Show
End Sub
[/vba]
Но результата нет. Может есть другой способ?


Сообщение отредактировал farscince - Суббота, 07.10.2017, 11:40
 
Ответить
Сообщение
Пока открыта форма изменить текст модуля не получится


Спасибо за ответ! Поправил так
[vba]
Код
Private Sub CommandButton2_Click()
t = "t ="
X = "t = " & TextBox1.Text
    With ThisWorkbook.VBProject.VBComponents("tt").CodeModule
        N = .ProcBodyLine("test", 0)
        For i = N To .ProcCountLines("test", 0) + N - 1
            If InStr(.Lines(i, 1), t) > 0 Then .ReplaceLine i, X
        Next
    End With
Unload UserForm1
UserForm1.Show
End Sub
[/vba]
Но результата нет. Может есть другой способ?

Автор - farscince
Дата добавления - 07.10.2017 в 11:20
buchlotnik Дата: Суббота, 07.10.2017, 12:39 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3431
Репутация: 920 ±
Замечаний: 0% ±

2010, 2013, 2016 RUS / ENG


"заступлюсь за Юрия" - публичный плевок в душу!
 
Ответить
Сообщениекросс на планете

Автор - buchlotnik
Дата добавления - 07.10.2017 в 12:39
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Программное изменение кода модуля (Макросы/Sub)
Страница 1 из 11
Поиск:

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