Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Автозапуск кода / 9 сообщений из 9, страница 1 из 1
13.11.2014, 11:01
    #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
13.11.2014, 11:11
    #38804519
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автозапуск кода
как-то так (в модуле листа):
Код: vbnet
1.
2.
3.
Private Sub Worksheet_Change(ByVal Target As Range)

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



правда, не очень понятно, почему все это не сделать формулой
...
Рейтинг: 0 / 0
13.11.2014, 11:12
    #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
13.11.2014, 11:19
    #38804532
LiQuid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автозапуск кода
Если честно ничего не понял, понял что есть функция отвечающая за изменение а как будет в моем случае с процедурой concat()?
Вы меня уж извините за недальновидность.
...
Рейтинг: 0 / 0
13.11.2014, 11:20
    #38804535
LiQuid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автозапуск кода
Еще я этот код написал в SheetP-1, нужно в ThisBook?
...
Рейтинг: 0 / 0
13.11.2014, 11:36
    #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
13.11.2014, 11:48
    #38804591
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автозапуск кода
Worksheet_SelectionChange нужно использовать на всех листах, где ожидаются изменения
...
Рейтинг: 0 / 0
13.11.2014, 12:11
    #38804640
LiQuid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автозапуск кода
Если вы видите мой код то он обновляет с одной страницы другую.
Даже если поставил Change все равно макрос отрабатывает только один раз.
Почему?
...
Рейтинг: 0 / 0
13.11.2014, 13:20
    #38804780
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автозапуск кода
Я вижу ваш код, а также вижу исходные условия
LiQuidкогда меняли ячейки:
Sheets(" Calculation ").Range("E3")
Sheets(" invoice ").Range("G2")то есть ячейки, которые надо менять, располагаются на двух разных листах. Процедура Worksheet_SelectionChange должна быть на каждом листе, который надо отслеживать.

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


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