Добрый день, многоуважаемые форумчане!!! Прошу Вас помочь в решении. Имеется файл (и думаю что в будущем будет весить очень много). Хотелось бы избежать этого и формулы перевести в код vba. На листе "1С Списание" в столбце "N" производится расчет по себестоимости. Хочется скрыть формулы (но не запоролить лист нет) но чтоб эти формулы работали на протяжении пополнения информации в умной таблице Попытался произвести запись, но почему то цвет текста красный (((( (скорее всего не верный перенос текста).
А также возможно ли предусматреть в коде вот что Вдруг таблица на листе "Цены на инертные" будет дополняться информацией о добавке другого вида. Соответственно в таблице на листе "1с Списание" также будет дополняться столбец с этой добавкой и чтоб в будущем уже не править код а автоматизировать (учесть) дополнение в расчете Заранее спасибо Вам за помощь
Добрый день, многоуважаемые форумчане!!! Прошу Вас помочь в решении. Имеется файл (и думаю что в будущем будет весить очень много). Хотелось бы избежать этого и формулы перевести в код vba. На листе "1С Списание" в столбце "N" производится расчет по себестоимости. Хочется скрыть формулы (но не запоролить лист нет) но чтоб эти формулы работали на протяжении пополнения информации в умной таблице Попытался произвести запись, но почему то цвет текста красный (((( (скорее всего не верный перенос текста).
А также возможно ли предусматреть в коде вот что Вдруг таблица на листе "Цены на инертные" будет дополняться информацией о добавке другого вида. Соответственно в таблице на листе "1с Списание" также будет дополняться столбец с этой добавкой и чтоб в будущем уже не править код а автоматизировать (учесть) дополнение в расчете Заранее спасибо Вам за помощьlebensvoll
_Boroda_, добрейшего утра!!! да как так то... Вы даже укоротили формулу в два раза, ГЕНИАЛЬНО НО!!!
Цитата
Хочется скрыть формулы (но не запоролить лист нет) но чтоб эти формулы работали на протяжении пополнения информации в умной таблице
решил дополнить Ваш код вот так вот: [vba]
Код
'очищаем столбец от формул и оставляем лишь значение Range("Списание[Себестоимость]").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False
[/vba] Все получилось формул нет а значения остались НО!!! При этом, если начинаешь пополнять таблицу другими данными в столбце "себестоимость" не производится расчет Как сделать так чтоб данный макрос, работал на этом листе всегда (я так понимаю если в ячейке будет формула то это ведь лишняя информация в объеме а также зачем людям знать что и как рассчитывается). Формула работает всегда при пополнении новой информации в данной таблице и сразу же после расчета отображала лишь значение.
Цитата
у меня есть огроменный код где подобное уже делалось, но я не могу разобраться где именно и как это там прописано
Заранее спасибо!!!
_Boroda_, добрейшего утра!!! да как так то... Вы даже укоротили формулу в два раза, ГЕНИАЛЬНО НО!!!
Цитата
Хочется скрыть формулы (но не запоролить лист нет) но чтоб эти формулы работали на протяжении пополнения информации в умной таблице
решил дополнить Ваш код вот так вот: [vba]
Код
'очищаем столбец от формул и оставляем лишь значение Range("Списание[Себестоимость]").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False
[/vba] Все получилось формул нет а значения остались НО!!! При этом, если начинаешь пополнять таблицу другими данными в столбце "себестоимость" не производится расчет Как сделать так чтоб данный макрос, работал на этом листе всегда (я так понимаю если в ячейке будет формула то это ведь лишняя информация в объеме а также зачем людям знать что и как рассчитывается). Формула работает всегда при пополнении новой информации в данной таблице и сразу же после расчета отображала лишь значение.
Цитата
у меня есть огроменный код где подобное уже делалось, но я не могу разобраться где именно и как это там прописано
StoTisteg, спасибо огромное за ответ! я теряюсь в дальнейшем (((( прекрасно осознаю что 1.данный код нужно прописать в самом листе 2. Worksheet_Change (Событие изменения содержимого ячейки) 3. дальше ведь я должен объявить эти переменные через Dim (вроде бы) затем лишь код формулы и после уже очищение столбца от формул и оставляем значение Получается так (((( но увы [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target = Range("Списание[Себестоимость]") Then 'расчет в таблице макросом (на листе: "1С списание") Range("Списание[Себестоимость]").FormulaR1C1 = _ "=IFERROR(SUMPRODUCT(INDEX(Цены_инертные[[Цемент]:[Криопласт]],SUMPRODUCT(ROW(Цены_инертные[Начало])" & _ "*(Цены_инертные[Начало]>0)*(Цены_инертные[Начало]<=[@[Начало])*((Цены_инертные[Окончание]="""")" & _ "*99999+Цены_инертные[Окончание]>=[@Окончание]))-1,)*Списание[@[Цемент]:[Криопласт]]" & _ "/1000^(COLUMN(Списание[@[Цемент]:[Криопласт]])<COLUMN([@[СП-3]]))),)" 'очищаем столбец от формул и оставляем лишь значение Range("Списание[Себестоимость]").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End Sub
[/vba] Полную ересь написал сам сижу читаю и понимаю.... посидел на гугл помощь и понимаю что ни чего я объявлять переменную не обязан, но могу если хочу тогда можно было так написать код [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) 'при изменении в столбце 1 If Target.Column = 1 Then 'расчет в таблице макросом (на листе: "1С списание") Range("Списание[Себестоимость]").FormulaR1C1 = _ "=IFERROR(SUMPRODUCT(INDEX(Цены_инертные[[Цемент]:[Криопласт]],SUMPRODUCT(ROW(Цены_инертные[Начало])" & _ "*(Цены_инертные[Начало]>0)*(Цены_инертные[Начало]<=[@[Начало])*((Цены_инертные[Окончание]="""")" & _ "*99999+Цены_инертные[Окончание]>=[@Окончание]))-1,)*Списание[@[Цемент]:[Криопласт]]" & _ "/1000^(COLUMN(Списание[@[Цемент]:[Криопласт]])<COLUMN([@[СП-3]]))),)" 'очищаем столбец от формул и оставляем лишь значение Range("Списание[Себестоимость]").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End If End Sub
[/vba] НО, увы ругается (выделяя желтым цветом формулы в коде)
StoTisteg, спасибо огромное за ответ! я теряюсь в дальнейшем (((( прекрасно осознаю что 1.данный код нужно прописать в самом листе 2. Worksheet_Change (Событие изменения содержимого ячейки) 3. дальше ведь я должен объявить эти переменные через Dim (вроде бы) затем лишь код формулы и после уже очищение столбца от формул и оставляем значение Получается так (((( но увы [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target = Range("Списание[Себестоимость]") Then 'расчет в таблице макросом (на листе: "1С списание") Range("Списание[Себестоимость]").FormulaR1C1 = _ "=IFERROR(SUMPRODUCT(INDEX(Цены_инертные[[Цемент]:[Криопласт]],SUMPRODUCT(ROW(Цены_инертные[Начало])" & _ "*(Цены_инертные[Начало]>0)*(Цены_инертные[Начало]<=[@[Начало])*((Цены_инертные[Окончание]="""")" & _ "*99999+Цены_инертные[Окончание]>=[@Окончание]))-1,)*Списание[@[Цемент]:[Криопласт]]" & _ "/1000^(COLUMN(Списание[@[Цемент]:[Криопласт]])<COLUMN([@[СП-3]]))),)" 'очищаем столбец от формул и оставляем лишь значение Range("Списание[Себестоимость]").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End Sub
[/vba] Полную ересь написал сам сижу читаю и понимаю.... посидел на гугл помощь и понимаю что ни чего я объявлять переменную не обязан, но могу если хочу тогда можно было так написать код [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) 'при изменении в столбце 1 If Target.Column = 1 Then 'расчет в таблице макросом (на листе: "1С списание") Range("Списание[Себестоимость]").FormulaR1C1 = _ "=IFERROR(SUMPRODUCT(INDEX(Цены_инертные[[Цемент]:[Криопласт]],SUMPRODUCT(ROW(Цены_инертные[Начало])" & _ "*(Цены_инертные[Начало]>0)*(Цены_инертные[Начало]<=[@[Начало])*((Цены_инертные[Окончание]="""")" & _ "*99999+Цены_инертные[Окончание]>=[@Окончание]))-1,)*Списание[@[Цемент]:[Криопласт]]" & _ "/1000^(COLUMN(Списание[@[Цемент]:[Криопласт]])<COLUMN([@[СП-3]]))),)" 'очищаем столбец от формул и оставляем лишь значение Range("Списание[Себестоимость]").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End If End Sub
[/vba] НО, увы ругается (выделяя желтым цветом формулы в коде) lebensvoll
Кто бы ты ни был, мир в твоих руках
Сообщение отредактировал lebensvoll - Среда, 31.10.2018, 11:10
[/vba] А проверку изменения нужно вешать не на событие, а на события Worksheet_Change. У нас формула смотрит на две таблицы в двух листах, следовательно, переписывать ее (формулу) нужно при изменениях в этих листах. И не просто в изменениях, а в диапазонах таблиц. Можно повесить на Workbook_SheetChange, но там сложнее получится И сыму формулу Вы как-то не так переписали. Короче, в обычном модуле [vba]
Код
Sub vst1() With Range("Списание[Себестоимость]") .FormulaR1C1 = _ "=IFERROR(SUMPRODUCT(INDEX(Цены_инертные[[Цемент]:[Криопласт]],SUMPRODUCT(ROW(Цены_инертные[Начало])" & _ "*(Цены_инертные[Начало]>0)*(Цены_инертные[Начало]<=[@Начало])*((Цены_инертные[Окончание]="""")" & _ "*99999+Цены_инертные[Окончание]>=[@Окончание]))-1,)*Списание[@[Цемент]:[Криопласт]]" & _ "/1000^(COLUMN(Списание[@[Цемент]:[Криопласт]])<COLUMN([@[СП-3]]))),)" .Value = .Value End With End Sub
[/vba] В модуле листа Списание [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("Списание[#All]")) Is Nothing Then Application.EnableEvents = 0 vst1 Application.EnableEvents = 1 End If End Sub
[/vba] В модуле листа Цены [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("Цены_инертные[#All]")) Is Nothing Then Application.EnableEvents = 0 vst1 Application.EnableEvents = 1 End If End Sub
[/vba] А проверку изменения нужно вешать не на событие, а на события Worksheet_Change. У нас формула смотрит на две таблицы в двух листах, следовательно, переписывать ее (формулу) нужно при изменениях в этих листах. И не просто в изменениях, а в диапазонах таблиц. Можно повесить на Workbook_SheetChange, но там сложнее получится И сыму формулу Вы как-то не так переписали. Короче, в обычном модуле [vba]
Код
Sub vst1() With Range("Списание[Себестоимость]") .FormulaR1C1 = _ "=IFERROR(SUMPRODUCT(INDEX(Цены_инертные[[Цемент]:[Криопласт]],SUMPRODUCT(ROW(Цены_инертные[Начало])" & _ "*(Цены_инертные[Начало]>0)*(Цены_инертные[Начало]<=[@Начало])*((Цены_инертные[Окончание]="""")" & _ "*99999+Цены_инертные[Окончание]>=[@Окончание]))-1,)*Списание[@[Цемент]:[Криопласт]]" & _ "/1000^(COLUMN(Списание[@[Цемент]:[Криопласт]])<COLUMN([@[СП-3]]))),)" .Value = .Value End With End Sub
[/vba] В модуле листа Списание [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("Списание[#All]")) Is Nothing Then Application.EnableEvents = 0 vst1 Application.EnableEvents = 1 End If End Sub
[/vba] В модуле листа Цены [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("Цены_инертные[#All]")) Is Nothing Then Application.EnableEvents = 0 vst1 Application.EnableEvents = 1 End If End Sub
_Boroda_, Александр, как я понимаю что два кода на листах в которых мы как раз таки отслеживаем события изменений. А сам код для работы с формулой остается в модуле Но даже Ваш файл не дает решения (((( Если начинаешь вносить изменения либо в таблицу "Цены на инертные" или же дополняя ее либо в таблицу "списания" или же дополнения ее новыми списания ми
вот смотрите приложенный файл где дополняю информацию в этих таблицах но ни чего не происходит. А хочется сделать так, чтоб активация макроса (обсчет результата значения по себестоимости) срабатывал сразу как только вносятся изменения в таблицах и без нажатия каких либо кнопок и активаций через команды
_Boroda_, Александр, как я понимаю что два кода на листах в которых мы как раз таки отслеживаем события изменений. А сам код для работы с формулой остается в модуле Но даже Ваш файл не дает решения (((( Если начинаешь вносить изменения либо в таблицу "Цены на инертные" или же дополняя ее либо в таблицу "списания" или же дополнения ее новыми списания ми
вот смотрите приложенный файл где дополняю информацию в этих таблицах но ни чего не происходит. А хочется сделать так, чтоб активация макроса (обсчет результата значения по себестоимости) срабатывал сразу как только вносятся изменения в таблицах и без нажатия каких либо кнопок и активаций через командыlebensvoll
_Boroda_, тут я признаюсь совершил оплошность (((( потому как когда решил внести изменения в таблицы или дополнить их информации смотрю ни чего не произошло. Подумал что скорее всего нужно через вкладку разработчик выбрать нужный макрос, но при его нажатии на выбранный макрос создался модуль 3. Удалил файл и еще раз скачал Ваш
Цитата
Дата: Среда, 31.10.2018, 11:46 | Сообщение № 6
Изменяя значения цен [img][/img] даже решил изменить расход [img][/img] но как ответ был 35358,22 так и остался Я немогу понять почему так. Я вот уверен что у вас все верно и прописано и работает (а у меня все шиворот на выворот)
_Boroda_, тут я признаюсь совершил оплошность (((( потому как когда решил внести изменения в таблицы или дополнить их информации смотрю ни чего не произошло. Подумал что скорее всего нужно через вкладку разработчик выбрать нужный макрос, но при его нажатии на выбранный макрос создался модуль 3. Удалил файл и еще раз скачал Ваш
Цитата
Дата: Среда, 31.10.2018, 11:46 | Сообщение № 6
Изменяя значения цен [img][/img] даже решил изменить расход [img][/img] но как ответ был 35358,22 так и остался Я немогу понять почему так. Я вот уверен что у вас все верно и прописано и работает (а у меня все шиворот на выворот)lebensvoll
_Boroda_, я давно установил этот флажок. Прекрасно осознаю что это чревато но (((( лень каждый раз разрешать (иной раз все срочно и быстро нужно сделать) [img][/img]
_Boroda_, я давно установил этот флажок. Прекрасно осознаю что это чревато но (((( лень каждый раз разрешать (иной раз все срочно и быстро нужно сделать) [img][/img]lebensvoll
_Boroda_, вот смотрите скачал вновь Ваш файл пытаюсь изменить значение в ценах, получаю это [img][/img] и начинает ругаться на [img][/img] И даже если я пропускаю данную ошибку и начинаю изменять цены то себестоимость не изменяется
_Boroda_, вот смотрите скачал вновь Ваш файл пытаюсь изменить значение в ценах, получаю это [img][/img] и начинает ругаться на [img][/img] И даже если я пропускаю данную ошибку и начинаю изменять цены то себестоимость не изменяетсяlebensvoll
Запишите макрорекодером вставку формулы. Скопируйте оттуда формулу, вставьте на место желтого. Добавьте переносы строк. Попробуйте еще раз что-нибудь поменять в таблице Excel
У меня приложенный Вами файл нормально работает
Запишите макрорекодером вставку формулы. Скопируйте оттуда формулу, вставьте на место желтого. Добавьте переносы строк. Попробуйте еще раз что-нибудь поменять в таблице Excel
У меня приложенный Вами файл нормально работает_Boroda_
[/vba] Тут все ясно включение и выключение цикла события в момент выполнения В приложенном примере я записал макрос3 [vba]
Код
Sub Макрос3() ' Макрос3 Макрос With Range("Списание[Себестоимость]") .FormulaR1C1 = _ "=Цены[[Цена]*Списание[цемент]" .Value = .Value End With End Sub
[/vba] который должен сработать при любых изменениях на двух листах и произвел расчет цемент * цену а после оставил лишь значение И что вы думаете вновь НЕ РАБОТАЕТ даже на простом примере... Может у меня что то не то с экселем. Не могли бы посмотреть файл во вложении как у вас работает он!? Люди добрые подскажите в чем могут быть проблемы, почему так происходит И чт
_Boroda_, Александр целый день сижу читаю смотрю ищу пробую на других примерах (подобиях). [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
[/vba] является событием в любой ячейки на конкретном листе (куда мы его прописываем) тут все понятно [vba]
Код
If Not Intersect(Target, Range("Цены[#All]")) Is Nothing Then
[/vba] является определением конкретики (что не на всем листе а именно в умной таблице) [vba]
[/vba] Тут все ясно включение и выключение цикла события в момент выполнения В приложенном примере я записал макрос3 [vba]
Код
Sub Макрос3() ' Макрос3 Макрос With Range("Списание[Себестоимость]") .FormulaR1C1 = _ "=Цены[[Цена]*Списание[цемент]" .Value = .Value End With End Sub
[/vba] который должен сработать при любых изменениях на двух листах и произвел расчет цемент * цену а после оставил лишь значение И что вы думаете вновь НЕ РАБОТАЕТ даже на простом примере... Может у меня что то не то с экселем. Не могли бы посмотреть файл во вложении как у вас работает он!? Люди добрые подскажите в чем могут быть проблемы, почему так происходит И чтlebensvoll
_Boroda_, нет вы правы я в начале записал смотрю не работает решил использовать подобие вашего примера и похоже совершаю ошибку Блиииииин и что Вы думаете!? Исправил и все работает Сейчас тогда попробую применить другой метод по варианту
Цитата
Запишите макрорекодером вставку формулы. Скопируйте оттуда формулу, вставьте на место желтого. Добавьте переносы строк. Попробуйте еще раз что-нибудь поменять в таблице Excel
Но сделать иначе не копировать а именно прописать и посмотреть что получится тогда ПОЛУЧИЛОСЬ!!!! НО, заметил разницу при написании и копировании ( с чем это связано не могу понять) Вот Ваш код: [vba]
Код
Sub vst1() With Range("Списание[Себестоимость]") .FormulaR1C1 = _ "=IFERROR(SUMPRODUCT(INDEX(Цены_инертные[[Цемент]:[Криопласт]],SUMPRODUCT(ROW(Цены_инертные[Начало])" & _ "*(Цены_инертные[Начало]>0)*(Цены_инертные[Начало]<=[@Начало])*((Цены_инертные[Окончание]="""")" & _ "*99999+Цены_инертные[Окончание]>=[@Окончание]))-1,)*Списание[@[Цемент]:[Криопласт]]" & _ "/1000^(COLUMN(Списание[@[Цемент]:[Криопласт]])<COLUMN([@[СП-3]]))),)" .Value = .Value End With End Sub
[/vba] А вот код когда начинаешь прописывать [vba]
Код
Sub vst1() With Range("Списание[Себестоимость]") .FormulaR1C1 = _ "=IFERROR(SUMPRODUCT(INDEX(Цены_инертные[[Цемент]:[Криопласт]],SUMPRODUCT(ROW(Цены_инертные[Начало])" & _ "*(Цены_инертные[Начало]>0)*(Цены_инертные[Начало]<=Списание[[#This Row],[Начало]])*((Цены_инертные[Окончание]="""")" & _ "*99999+Цены_инертные[Окончание]>=Списание[[#This Row],[Окончание]]))-1,)*Списание[[#This Row],[Цемент]:[Криопласт]]" & _ "/1000*(COLUMN(Списание[[#This Row],[Цемент]:[Криопласт]])<COLUMN(Списание[[#This Row],[СП-3]]))),)" .Value = .Value End With End Sub
[/vba] И разница лишь в вот в этом
Цитата
[#This Row]
СПАСИБО ОГРОМНЕЙШЕЕ ВАМ за то я еще и еще раз пропустил через себя всю информацию что означает то то и то то. Пусть не без ошибок но все равно
_Boroda_, нет вы правы я в начале записал смотрю не работает решил использовать подобие вашего примера и похоже совершаю ошибку Блиииииин и что Вы думаете!? Исправил и все работает Сейчас тогда попробую применить другой метод по варианту
Цитата
Запишите макрорекодером вставку формулы. Скопируйте оттуда формулу, вставьте на место желтого. Добавьте переносы строк. Попробуйте еще раз что-нибудь поменять в таблице Excel
Но сделать иначе не копировать а именно прописать и посмотреть что получится тогда ПОЛУЧИЛОСЬ!!!! НО, заметил разницу при написании и копировании ( с чем это связано не могу понять) Вот Ваш код: [vba]
Код
Sub vst1() With Range("Списание[Себестоимость]") .FormulaR1C1 = _ "=IFERROR(SUMPRODUCT(INDEX(Цены_инертные[[Цемент]:[Криопласт]],SUMPRODUCT(ROW(Цены_инертные[Начало])" & _ "*(Цены_инертные[Начало]>0)*(Цены_инертные[Начало]<=[@Начало])*((Цены_инертные[Окончание]="""")" & _ "*99999+Цены_инертные[Окончание]>=[@Окончание]))-1,)*Списание[@[Цемент]:[Криопласт]]" & _ "/1000^(COLUMN(Списание[@[Цемент]:[Криопласт]])<COLUMN([@[СП-3]]))),)" .Value = .Value End With End Sub
[/vba] А вот код когда начинаешь прописывать [vba]
Код
Sub vst1() With Range("Списание[Себестоимость]") .FormulaR1C1 = _ "=IFERROR(SUMPRODUCT(INDEX(Цены_инертные[[Цемент]:[Криопласт]],SUMPRODUCT(ROW(Цены_инертные[Начало])" & _ "*(Цены_инертные[Начало]>0)*(Цены_инертные[Начало]<=Списание[[#This Row],[Начало]])*((Цены_инертные[Окончание]="""")" & _ "*99999+Цены_инертные[Окончание]>=Списание[[#This Row],[Окончание]]))-1,)*Списание[[#This Row],[Цемент]:[Криопласт]]" & _ "/1000*(COLUMN(Списание[[#This Row],[Цемент]:[Криопласт]])<COLUMN(Списание[[#This Row],[СП-3]]))),)" .Value = .Value End With End Sub
[/vba] И разница лишь в вот в этом
Цитата
[#This Row]
СПАСИБО ОГРОМНЕЙШЕЕ ВАМ за то я еще и еще раз пропустил через себя всю информацию что означает то то и то то. Пусть не без ошибок но все равноlebensvoll
Кто бы ты ни был, мир в твоих руках
Сообщение отредактировал lebensvoll - Четверг, 01.11.2018, 17:40
в продолжении темы но на другом листе На листе "ОТГРУЗКА" имеется диапазон (А1:В16) который является (как бы формой) - При внесении данных в нужные ячейки и нажатии кнопки "Внести запись" в таблицу "ОТГРУЗКА" вносятся эти данные:
[vba]
Код
Private Sub CommandButton1_Click() Application.EnableEvents = 0 Call Add_Sell Application.EnableEvents = 1 End Sub
[/vba]
а это код "формы"
[vba]
Код
Sub Add_Sell() 'Макрос для "формы" на листе ОТГРУЗКА Application.EnableEvents = 0 n = Range("A100000").End(xlUp).Row + 1 'определяем номер последней строки в табл. Продажи Cells(n, 1) = Range("B2") 'вставляем в следующую пустую строку Cells(n, 2) = Range("B4") Cells(n, 3) = Range("B6") Cells(n, 4) = Range("B8") Cells(n, 5) = Range("B10") Cells(n, 6) = Range("B12") Cells(n, 8) = Range("B14") Cells(n, 14) = Range("B16") Range("B2,B4,B6,B8,B10,B12,B14,B16").ClearContents 'очищаем форму Application.EnableEvents = 1 End Sub
[/vba]
Решил аналогично уйти от формул с таблицы "ОТГРУЗКА" как с таблицы "СПИСАНИЕ в столбце "Себестоимость"" [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("Отгрузка[#All]")) Is Nothing Then Application.EnableEvents = 0 vst2 Application.EnableEvents = 1 End If End Sub
[/vba] Ну и соответственно код для таблицы "ОТГРУЗКА" столбец "Стоимость" [vba]
Код
Sub vst2() 'Макрос для расчета стоимости на листе ОТГРУЗКА With Range("Отгрузка[Стоимость]") .FormulaR1C1 = _ "=SUMPRODUCT(Спецификация[Цена]*(Спецификация[Продукция]=Отгрузка[[#This Row],[Продукция]])" & _ "*(Спецификация[Контрагент]=Отгрузка[[#This Row],[Контрагент]])*(Спецификация[Начало]<=Отгрузка[[#This Row],[Дата]])" & _ "*((Спецификация[Окончание]="""")*99999+Спецификация[Окончание]>=Отгрузка[[#This Row],[Дата]]))" .Value = .Value End With End Sub
[/vba] код для добавления данных в таблицу срабатывает но вот расчет "Стоимости" нет. В чем моя ошибка!? Просто хочу по аналогии убрать формулы со всей этой таблицы и с других столбцов при добавлении новой записи в таблицу. Мне кажется что
Цитата
Add_Sell() 'Макрос для "формы" на листе ОТГРУЗКА
я должен дополнить код для расчета столбца "Стоимость", если я верно понимаю
в продолжении темы но на другом листе На листе "ОТГРУЗКА" имеется диапазон (А1:В16) который является (как бы формой) - При внесении данных в нужные ячейки и нажатии кнопки "Внести запись" в таблицу "ОТГРУЗКА" вносятся эти данные:
[vba]
Код
Private Sub CommandButton1_Click() Application.EnableEvents = 0 Call Add_Sell Application.EnableEvents = 1 End Sub
[/vba]
а это код "формы"
[vba]
Код
Sub Add_Sell() 'Макрос для "формы" на листе ОТГРУЗКА Application.EnableEvents = 0 n = Range("A100000").End(xlUp).Row + 1 'определяем номер последней строки в табл. Продажи Cells(n, 1) = Range("B2") 'вставляем в следующую пустую строку Cells(n, 2) = Range("B4") Cells(n, 3) = Range("B6") Cells(n, 4) = Range("B8") Cells(n, 5) = Range("B10") Cells(n, 6) = Range("B12") Cells(n, 8) = Range("B14") Cells(n, 14) = Range("B16") Range("B2,B4,B6,B8,B10,B12,B14,B16").ClearContents 'очищаем форму Application.EnableEvents = 1 End Sub
[/vba]
Решил аналогично уйти от формул с таблицы "ОТГРУЗКА" как с таблицы "СПИСАНИЕ в столбце "Себестоимость"" [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("Отгрузка[#All]")) Is Nothing Then Application.EnableEvents = 0 vst2 Application.EnableEvents = 1 End If End Sub
[/vba] Ну и соответственно код для таблицы "ОТГРУЗКА" столбец "Стоимость" [vba]
Код
Sub vst2() 'Макрос для расчета стоимости на листе ОТГРУЗКА With Range("Отгрузка[Стоимость]") .FormulaR1C1 = _ "=SUMPRODUCT(Спецификация[Цена]*(Спецификация[Продукция]=Отгрузка[[#This Row],[Продукция]])" & _ "*(Спецификация[Контрагент]=Отгрузка[[#This Row],[Контрагент]])*(Спецификация[Начало]<=Отгрузка[[#This Row],[Дата]])" & _ "*((Спецификация[Окончание]="""")*99999+Спецификация[Окончание]>=Отгрузка[[#This Row],[Дата]]))" .Value = .Value End With End Sub
[/vba] код для добавления данных в таблицу срабатывает но вот расчет "Стоимости" нет. В чем моя ошибка!? Просто хочу по аналогии убрать формулы со всей этой таблицы и с других столбцов при добавлении новой записи в таблицу. Мне кажется что
Цитата
Add_Sell() 'Макрос для "формы" на листе ОТГРУЗКА
я должен дополнить код для расчета столбца "Стоимость", если я верно понимаюlebensvoll
Блииин СОГЛАСЕН!!! Т.е. получается что мне не нужно было писать этот код
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("Отгрузка[#All]")) Is Nothing Then Application.EnableEvents = 0 vst2 Application.EnableEvents = 1 End If End Sub
[/vba]
А лишь дополнить уже существующий на странице вторым макросом Спасибо Вам огромное!!! Я даже неверно думал
Цитата
Мне кажется что Цитата Add_Sell() 'Макрос для "формы" на листе ОТГРУЗКА
я должен дополнить код для расчета столбца "Стоимость", если я верно понимаю
_Boroda_, а как тогда продолжить вычисления в других столбцах в коде vst2!? как я могу прописать через If в продолжение следующего расчета на столбце или же после End With [vba]
Код
With Range("Отгрузка[ИТОГО]") .FormulaR1C1 = _ "=Отгрузка[[#This Row],[Количество]]*Отгрузка[[#This Row],[Стоимость]]" & _ "+Отгрузка[[#This Row],[Доставка]]*Отгрузка[[#This Row]" .Value = .Value End With End Sub
[/vba] Спасибо огромное еще раз
_Boroda_,
Цитата
Да, намутили Вы там...
Блииин СОГЛАСЕН!!! Т.е. получается что мне не нужно было писать этот код
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("Отгрузка[#All]")) Is Nothing Then Application.EnableEvents = 0 vst2 Application.EnableEvents = 1 End If End Sub
[/vba]
А лишь дополнить уже существующий на странице вторым макросом Спасибо Вам огромное!!! Я даже неверно думал
Цитата
Мне кажется что Цитата Add_Sell() 'Макрос для "формы" на листе ОТГРУЗКА
я должен дополнить код для расчета столбца "Стоимость", если я верно понимаю
_Boroda_, а как тогда продолжить вычисления в других столбцах в коде vst2!? как я могу прописать через If в продолжение следующего расчета на столбце или же после End With [vba]
Код
With Range("Отгрузка[ИТОГО]") .FormulaR1C1 = _ "=Отгрузка[[#This Row],[Количество]]*Отгрузка[[#This Row],[Стоимость]]" & _ "+Отгрузка[[#This Row],[Доставка]]*Отгрузка[[#This Row]" .Value = .Value End With End Sub