powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Автозапуск кода
9 сообщений из 9, страница 1 из 1
Автозапуск кода
    #38804491
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, я новичок в VBA поэтому прошу сильно не бить.
Вопрос такой, есть маленький простенький код написанный в Excel на VBA.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Sub concat()
    Dim tabel As String
    Dim tabel_num As String
    
    Dim invoice As String
    Dim invoice_num As String
    
    Dim comma As String
    
    Dim total As String
    
    tabel = "Табель "
    tabel_num = Sheets("Calculation").Range("E3")
    
    invoice = " калькуляция к счету номер "
    invoice_num = Sheets("invoice").Range("G2")
    
    comma = ","
    
    total = tabel + tabel_num + comma + invoice + invoice_num
    
    Sheets("P-1").Range("L44") = total

End Sub


Как вы видите в конце я получу что то наподобние:

Табель 5, калькуляция к счету номер 300

Как сделать так чтобы когда меняли ячейки:
Sheets("Calculation").Range("E3")
Sheets("invoice").Range("G2")

Чтобы в Sheets("P-1").Range("L44") тоже менялось?
Скажем в нашем примере если я поставлю в Sheets("Calculation").Range("E3") цифру 100 то автоматически в Чтобы в Sheets("P-1").Range("L44") должно измениться и получиться Табель 100, калькуляция к счету номер 300

Вот такой вопрос.
Спасибо за помощь
...
Рейтинг: 0 / 0
Автозапуск кода
    #38804519
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как-то так (в модуле листа):
Код: vbnet
1.
2.
3.
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$E$3" Then



правда, не очень понятно, почему все это не сделать формулой
...
Рейтинг: 0 / 0
Автозапуск кода
    #38804521
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuidКак сделать так чтобы когда меняли ячейки:
[skipped]
Чтобы в
[skipped]
тоже менялось?
Написать код в Worksheet_Change. Проверить Target, и если он соответствует - внести изменения в Destination.

Код: vbnet
1.
2.
3.
4.
5.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = strTargetAddress Then 
  Range(strDestinationAddress).Value = someValue
End If  
End Sub
...
Рейтинг: 0 / 0
Автозапуск кода
    #38804532
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если честно ничего не понял, понял что есть функция отвечающая за изменение а как будет в моем случае с процедурой concat()?
Вы меня уж извините за недальновидность.
...
Рейтинг: 0 / 0
Автозапуск кода
    #38804535
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще я этот код написал в SheetP-1, нужно в ThisBook?
...
Рейтинг: 0 / 0
Автозапуск кода
    #38804565
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я написал теперь меняется, есть одно но:
Исходные данные:

Табель 100, калькуляция к счету номер 300

Поменял 100 на 200 сработало, поменял 300 на 500 не сработало. Такое оущение что макрос один раз только работает.\
Почему?
И как сделать что функция вызывала макрос каждый раз при изменении, мойд код:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim tabel As String
    Dim tabel_num As String
    
    Dim invoice As String
    Dim invoice_num As String
    
    Dim comma As String
    
    Dim total As String
    
    tabel = "Табель "
    tabel_num = Sheets("Calculation").Range("E3")
    
    invoice = " калькуляция к счету номер "
    invoice_num = Sheets("invoice").Range("G2")
    
    comma = ","
    
    total = tabel + tabel_num + comma + invoice + invoice_num
    
    Sheets("P-1").Range("L44") = total
End Sub



Где моя ошибка?
...
Рейтинг: 0 / 0
Автозапуск кода
    #38804591
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Worksheet_SelectionChange нужно использовать на всех листах, где ожидаются изменения
...
Рейтинг: 0 / 0
Автозапуск кода
    #38804640
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вы видите мой код то он обновляет с одной страницы другую.
Даже если поставил Change все равно макрос отрабатывает только один раз.
Почему?
...
Рейтинг: 0 / 0
Автозапуск кода
    #38804780
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вижу ваш код, а также вижу исходные условия
LiQuidкогда меняли ячейки:
Sheets(" Calculation ").Range("E3")
Sheets(" invoice ").Range("G2")то есть ячейки, которые надо менять, располагаются на двух разных листах. Процедура Worksheet_SelectionChange должна быть на каждом листе, который надо отслеживать.

Если вы считаете, что я вас по-прежнему не понимаю - приложите файл.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Автозапуск кода
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]