день добрый, прошу помощи у гуру! есть таблица учета: столбец А сколько ушло столбец B сколько есть на складе столбец С кнопка счетчик для каждой строки (+1 к столбцу А и -1 к столбцу B соответственно) строк- позиций много и в каждой строке кнопка счетчик на свою строку вопрос такой: для первой строки я в конструкторе вставил кнопку и написал макрос (первый раз в жизни)
вот как бы теперь ее(кнопку счетчик) размножить на остальные строки чтобы макрос автоматически менял значения строк и еще, не маловажно, как можно написать макрос так, чтобы, допустим, я хочу вставить столбец между столбцами А и Б - функциональность таблицы не пострадала
вариант когда прописываешь в нужных строках единички а потом жмешь на большую кнопку и происходит общий пересчет не пройдет.... может кто знает как сделать так чтобы можно было скопировать кнопку счетчик всем заранее спасибо [moder]Оформите код! И пример приложите[/moder]
день добрый, прошу помощи у гуру! есть таблица учета: столбец А сколько ушло столбец B сколько есть на складе столбец С кнопка счетчик для каждой строки (+1 к столбцу А и -1 к столбцу B соответственно) строк- позиций много и в каждой строке кнопка счетчик на свою строку вопрос такой: для первой строки я в конструкторе вставил кнопку и написал макрос (первый раз в жизни)
вот как бы теперь ее(кнопку счетчик) размножить на остальные строки чтобы макрос автоматически менял значения строк и еще, не маловажно, как можно написать макрос так, чтобы, допустим, я хочу вставить столбец между столбцами А и Б - функциональность таблицы не пострадала
вариант когда прописываешь в нужных строках единички а потом жмешь на большую кнопку и происходит общий пересчет не пройдет.... может кто знает как сделать так чтобы можно было скопировать кнопку счетчик всем заранее спасибо [moder]Оформите код! И пример приложите[/moder]toto80
Я бы не стал делать такую тучу кнопок. Достаточно одной, которая отрабатывает те ячейки, в строке которых находится курсор. Вынести ее в строку 1 и закрепить области (вкладка Вид) по строке 2 Примерно вот так: [vba]
Код
Private Sub CommandButton1_Click() ad_ = Selection.Address c1_ = WorksheetFunction.Match("Купили", Range("2:2"), 0) c2_ = WorksheetFunction.Match("В наличии", Range("2:2"), 0) r_ = Selection(1).Row If Cells(r_, c2_) = 0 Then MsgBox "В наличии 0" Exit Sub End If Cells(r_, c1_) = Cells(r_, c1_) + 1 Cells(r_, c2_) = Cells(r_, c2_) - 1 Range(ad_).Select End Sub
[/vba] Ткнитесь в любую ячейку (не обязательно в столбцах А или В) и нажмите кнопку. Еще вариант - можно сделать по даблклику или правому клику на ячейке. В файле _2 сделал по даблклику на любую ячейку в нужной строке
Я бы не стал делать такую тучу кнопок. Достаточно одной, которая отрабатывает те ячейки, в строке которых находится курсор. Вынести ее в строку 1 и закрепить области (вкладка Вид) по строке 2 Примерно вот так: [vba]
Код
Private Sub CommandButton1_Click() ad_ = Selection.Address c1_ = WorksheetFunction.Match("Купили", Range("2:2"), 0) c2_ = WorksheetFunction.Match("В наличии", Range("2:2"), 0) r_ = Selection(1).Row If Cells(r_, c2_) = 0 Then MsgBox "В наличии 0" Exit Sub End If Cells(r_, c1_) = Cells(r_, c1_) + 1 Cells(r_, c2_) = Cells(r_, c2_) - 1 Range(ad_).Select End Sub
[/vba] Ткнитесь в любую ячейку (не обязательно в столбцах А или В) и нажмите кнопку. Еще вариант - можно сделать по даблклику или правому клику на ячейке. В файле _2 сделал по даблклику на любую ячейку в нужной строке_Boroda_
Достаточно одной, которая отрабатывает те ячейки, в строке которых находится курсор. Вынести ее в строку 1 и закрепить области (вкладка Вид) по строке 2
как я уже писал "вариант когда прописываешь в нужных строках единички а потом жмешь на большую кнопку и происходит общий пересчет не пройдет...." и ваш пример №1 ( 2227482.xls) не рабочий он должен стирать то что добавил, это мелочи - все рано вариант не интересен, просто не подойдет исходя из других внутренних соображений
Достаточно одной, которая отрабатывает те ячейки, в строке которых находится курсор. Вынести ее в строку 1 и закрепить области (вкладка Вид) по строке 2
как я уже писал "вариант когда прописываешь в нужных строках единички а потом жмешь на большую кнопку и происходит общий пересчет не пройдет...." и ваш пример №1 ( 2227482.xls) не рабочий он должен стирать то что добавил, это мелочи - все рано вариант не интересен, просто не подойдет исходя из других внутренних соображений
toto80, опытнейший экселист предложил вам 2 простейших решения задачи, только потому, что нет такой возможности копировать кнопку вместе с макросом да еще и с изменяющимися критериями в нем при смене строк, а потом еще и вставке столбцов.
ваш пример №1 ( 2227482.xls) не рабочий он должен стирать то что добавил,
У меня очень даже рабочий. Для того что бы он стал рабочим и у вас, надо поставить курсор на нужную вам строку потом нажать кнопку и посмотреть результат в этой же строке. А вот вы, даже не удосужились в этом разобраться.
так можно же случайно не туда кликнуть и будет полная каша
Так значит, двойной клик может быть случайным, а случайность клика по кнопке исключена? Успехов.
toto80, опытнейший экселист предложил вам 2 простейших решения задачи, только потому, что нет такой возможности копировать кнопку вместе с макросом да еще и с изменяющимися критериями в нем при смене строк, а потом еще и вставке столбцов.
ваш пример №1 ( 2227482.xls) не рабочий он должен стирать то что добавил,
У меня очень даже рабочий. Для того что бы он стал рабочим и у вас, надо поставить курсор на нужную вам строку потом нажать кнопку и посмотреть результат в этой же строке. А вот вы, даже не удосужились в этом разобраться.
Так значит, двойной клик может быть случайным, а случайность клика по кнопке исключена?
вероятность случайного клика в определенной ячейке или на кнопке на порядок, а то и на несколько, меньше чем вероятность двойного клика в любом месте в строке....
Так значит, двойной клик может быть случайным, а случайность клика по кнопке исключена?
вероятность случайного клика в определенной ячейке или на кнопке на порядок, а то и на несколько, меньше чем вероятность двойного клика в любом месте в строке....toto80
Сообщение отредактировал toto80 - Вторник, 10.11.2015, 15:12
Я бы вообще не стал так усложнять. Вставляете этот код в модуль листа и кнопки не нужны. Можно изменять количество не на 1 + проверяет, чтобы вводимое количество не превышало то, что в наличии[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim Min If Target.Count > 1 Then Exit Sub If Intersect(Target, Range("C2:C" & Cells(Rows.Count, 1).End(xlUp).Row)) Is Nothing Then Exit Sub Application.EnableEvents = False With Target Min = Application.WorksheetFunction.Min(.Value, .Offset(0, -1)) .Offset(0, -2) = .Offset(0, -2) + Min .Offset(0, -1) = .Offset(0, -1) - Min .Value = Empty End With Application.EnableEvents = True End Sub
[/vba]
Я бы вообще не стал так усложнять. Вставляете этот код в модуль листа и кнопки не нужны. Можно изменять количество не на 1 + проверяет, чтобы вводимое количество не превышало то, что в наличии[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim Min If Target.Count > 1 Then Exit Sub If Intersect(Target, Range("C2:C" & Cells(Rows.Count, 1).End(xlUp).Row)) Is Nothing Then Exit Sub Application.EnableEvents = False With Target Min = Application.WorksheetFunction.Min(.Value, .Offset(0, -1)) .Offset(0, -2) = .Offset(0, -2) + Min .Offset(0, -1) = .Offset(0, -1) - Min .Value = Empty End With Application.EnableEvents = True End Sub
огромное спасибо всем а особенно _Boroda_, итак, прошу не кидать тапками, так как программирую (вернее пытаюсь) на VBA всего 3 часа и вот что получилось задача: сделать чтобы при любом перемещении столбцов и строк соответствующие кнопки(ячейки) добавляли(удаляли) значения в соответствующих ячейках вот что получилось активные ячейки в столбцах сделка и отмена [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim DELTA Cancel = True w1_ = WorksheetFunction.Match("Купили", Range("2:2"), 0) w2_ = WorksheetFunction.Match("В наличии", Range("2:2"), 0) w3_ = WorksheetFunction.Match("Дельта", Range("2:2"), 0) w4_ = WorksheetFunction.Match("СДЕЛКА", Range("2:2"), 0) w5_ = WorksheetFunction.Match("ОТМЕНА", Range("2:2"), 0) If Target.Column < w4_ Then Exit Sub If Target.Column > w5_ Then Exit Sub r_ = Target(1).Row DELTA = Cells(r_, w3_) If Cells(r_, w3_) = 0 Then DELTA = 1 End If If Target.Column = w4_ Then Cells(r_, w1_) = Cells(r_, w1_) + DELTA Cells(r_, w2_) = Cells(r_, w2_) - DELTA End If If Target.Column = w5_ Then Cells(r_, w1_) = Cells(r_, w1_) - DELTA Cells(r_, w2_) = Cells(r_, w2_) + DELTA End If End Sub
[/vba]
осталось еще несколько вопросов 1. что значит Range("2:2") в WorksheetFunction.Match 2. как можно сделать так чтобы после двойного клика на активную ячейку она, помимо арифметических функций, меняла цвет на определенное время - типа команда выполнена 3. добавил строку перед шапкой(купили, в наличии, сделка...) то есть строка купили, в наличии, сделка... стала третьей строкой - не работает.... и еще раз прошу не кидаться тапками)
огромное спасибо всем а особенно _Boroda_, итак, прошу не кидать тапками, так как программирую (вернее пытаюсь) на VBA всего 3 часа и вот что получилось задача: сделать чтобы при любом перемещении столбцов и строк соответствующие кнопки(ячейки) добавляли(удаляли) значения в соответствующих ячейках вот что получилось активные ячейки в столбцах сделка и отмена [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim DELTA Cancel = True w1_ = WorksheetFunction.Match("Купили", Range("2:2"), 0) w2_ = WorksheetFunction.Match("В наличии", Range("2:2"), 0) w3_ = WorksheetFunction.Match("Дельта", Range("2:2"), 0) w4_ = WorksheetFunction.Match("СДЕЛКА", Range("2:2"), 0) w5_ = WorksheetFunction.Match("ОТМЕНА", Range("2:2"), 0) If Target.Column < w4_ Then Exit Sub If Target.Column > w5_ Then Exit Sub r_ = Target(1).Row DELTA = Cells(r_, w3_) If Cells(r_, w3_) = 0 Then DELTA = 1 End If If Target.Column = w4_ Then Cells(r_, w1_) = Cells(r_, w1_) + DELTA Cells(r_, w2_) = Cells(r_, w2_) - DELTA End If If Target.Column = w5_ Then Cells(r_, w1_) = Cells(r_, w1_) - DELTA Cells(r_, w2_) = Cells(r_, w2_) + DELTA End If End Sub
[/vba]
осталось еще несколько вопросов 1. что значит Range("2:2") в WorksheetFunction.Match 2. как можно сделать так чтобы после двойного клика на активную ячейку она, помимо арифметических функций, меняла цвет на определенное время - типа команда выполнена 3. добавил строку перед шапкой(купили, в наличии, сделка...) то есть строка купили, в наличии, сделка... стала третьей строкой - не работает.... и еще раз прошу не кидаться тапками)toto80
1. Это строка 2 3. Тогда нужно поменять 2:2 на 3:3 2. Последней строкой напишите[vba]
Код
Target.Interior.Color=8420607
[/vba] Удалять закраску вот так [vba]
Код
Range("A1:A3").Interior.Pattern = xlNone
[/vba] Эту строку (с своими диапазонами, рассчитанными как у Вас в коде w1, w2, ...) повесьте в модуль книги (а не листа, как предыдущий код) на сохранение (Workbook_BeforeSave), или открытие (Workbook_Open), или закрытие (Workbook_BeforeClose), или еще какую подходящую операцию. Вы, я вижу, любите самостоятельно разбираться, поэтому почитайте про события листа и события книги - эти темы обычно хорошо описаны.
1. Это строка 2 3. Тогда нужно поменять 2:2 на 3:3 2. Последней строкой напишите[vba]
Код
Target.Interior.Color=8420607
[/vba] Удалять закраску вот так [vba]
Код
Range("A1:A3").Interior.Pattern = xlNone
[/vba] Эту строку (с своими диапазонами, рассчитанными как у Вас в коде w1, w2, ...) повесьте в модуль книги (а не листа, как предыдущий код) на сохранение (Workbook_BeforeSave), или открытие (Workbook_Open), или закрытие (Workbook_BeforeClose), или еще какую подходящую операцию. Вы, я вижу, любите самостоятельно разбираться, поэтому почитайте про события листа и события книги - эти темы обычно хорошо описаны._Boroda_
_Boroda_, удалить сообщение не могу, заработало, см след сообщение)
чуть чуть не то надо, я хочу чтобы ячейка при двойном клике на нее мигнула (цет поменяла на время) - по типу комада выполнена вставляю такой код по моим скудным познаниям - запоминаем цвет, меняем его, пауза, возврат цвета на место [vba]
_Boroda_, удалить сообщение не могу, заработало, см след сообщение)
чуть чуть не то надо, я хочу чтобы ячейка при двойном клике на нее мигнула (цет поменяла на время) - по типу комада выполнена вставляю такой код по моим скудным познаниям - запоминаем цвет, меняем его, пауза, возврат цвета на место [vba]
заработало)))) sleep поставил в модуль хе хе может кто нибудь проверит простенький код на глобальные косяки? мне вот это пока еще не понятно зачем нужно и можно ли избавиться [vba]
Код
Dim DELTA Dim COLOR_CH
[/vba]
заработало)))) sleep поставил в модуль хе хе может кто нибудь проверит простенький код на глобальные косяки? мне вот это пока еще не понятно зачем нужно и можно ли избавиться [vba]
toto80, непонятно, что такое Dim или за что отвечаю эти переменные? Dim - это объявление переменных. Ваш код будет работать и без этих 2-х строчек (почитайте что-нибудь про явное и неявное объявление переменных).
DELTA - значение, которое прибавляется к "Купили" и вычитается из "В наличии". COLOR_CH - возвращает исходный цвет ячейки. Если у Вас все ячейки в поле Сделка и Отмена бесцветные, то можно убрать эту переменную: [vba]
Код
If Target.Column = w4_ Then Cells(r_, w1_) = Cells(r_, w1_) + DELTA Cells(r_, w2_) = Cells(r_, w2_) - DELTA Cells(r_, w4_).Interior.ColorIndex = 6 Sleep (500) Cells(r_, w4_).Interior.ColorIndex = xlNo End If
Я бы убрала Cancel = True из начала макроса и поставила сюда: [vba]
Код
If Target.Column < w4_ Then Exit Sub If Target.Column > w5_ Then Exit Sub Cancel = True
[/vba] Тогда можно будет редактировать остальные ячейки 2-м кликом (которые НЕ в столбцах Сделка, Отмена)
toto80, непонятно, что такое Dim или за что отвечаю эти переменные? Dim - это объявление переменных. Ваш код будет работать и без этих 2-х строчек (почитайте что-нибудь про явное и неявное объявление переменных).
DELTA - значение, которое прибавляется к "Купили" и вычитается из "В наличии". COLOR_CH - возвращает исходный цвет ячейки. Если у Вас все ячейки в поле Сделка и Отмена бесцветные, то можно убрать эту переменную: [vba]
Код
If Target.Column = w4_ Then Cells(r_, w1_) = Cells(r_, w1_) + DELTA Cells(r_, w2_) = Cells(r_, w2_) - DELTA Cells(r_, w4_).Interior.ColorIndex = 6 Sleep (500) Cells(r_, w4_).Interior.ColorIndex = xlNo End If
Manyasha, большое спасибо за объяснения....я брал за исходный код тот что с сообщении №2 и подумав полтора дня, ни имеея ни малейшего опыта, сделал код который в файле сообщения №12 отсюда и получились вопросы
с DIM понятно, но пусть остается...
DELTA COLOR_CH эти переменные я сам вводил, исходя из того что ячейки Сделка и Отмена могут быть цветными, бесцветный это тоже цвет) переменная дельта - это модуль счета, иногда приходится по 10 или 5 прибавлять(вычитать) - количество в коробке изделий
Cancel = True из начала макроса....... идею понял, но мне лучше зафиксировать конкретные столбцы.... еще раз, спасибо большой
Manyasha, большое спасибо за объяснения....я брал за исходный код тот что с сообщении №2 и подумав полтора дня, ни имеея ни малейшего опыта, сделал код который в файле сообщения №12 отсюда и получились вопросы
с DIM понятно, но пусть остается...
DELTA COLOR_CH эти переменные я сам вводил, исходя из того что ячейки Сделка и Отмена могут быть цветными, бесцветный это тоже цвет) переменная дельта - это модуль счета, иногда приходится по 10 или 5 прибавлять(вычитать) - количество в коробке изделий
Cancel = True из начала макроса....... идею понял, но мне лучше зафиксировать конкретные столбцы.... еще раз, спасибо большойtoto80
Сообщение отредактировал toto80 - Четверг, 12.11.2015, 11:43