Всем привет и хорошего дня! Я сюда пришёл, конечно же, за помощью. У меня было задание: давался сводный лист с компаниями в сводном листе были заголовки и одна огромная таблица, компаний в ней было 44. Я разбил таблицу на отдельные листы, т.е. данные одной компании находились на одном листе, другой компании на другом листе и т.д. Задание заключалось в автоматическом заполнении сводного листа по кнопке, т.е. я ввожу данные в лист компании №13, например, и в сводном листе в таблице заполнялись нужные ячейки, там где были данные о компании №13, всё это делалось по нажатии кнопки(но с заданием я не совсем справился, т.к. макрос выполнялся через Ctrl+q). Теперь, мне нужно чтобы всё также заполнялось, но автоматически, т.е. достаточно просто написать в листе №13 и всё, и данные уже были в сводном. Возможно так сделать? Вот код по предыдущему заданию: [vba]
Код
Option Explicit
Sub PerenosTarget() Dim TargetRow As Long Dim TargetColumn As Integer Dim FoundNomer As Range Dim FoundOkno As Range Dim FoundOknoRow As Long
TargetRow = ActiveCell.Row TargetColumn = ActiveCell.Column With Sheets("Ñâîä") ' Set FoundNomer = .Columns(1).Find("8602/" & ActiveSheet.Name, , xlValues, xlWhole)
Set FoundOkno = .Columns(1).Find(What:=Cells(ActiveCell.Row, 1), After:=FoundNomer, LookIn:=xlValues, _ LookAt:=xlWhole, SearchDirection:=xlPrevious) FoundOknoRow = FoundOkno.Row .Cells(FoundOknoRow, TargetColumn) = ActiveCell End With End Sub
[/vba]
код записан в стандартном модуле.
Всем привет и хорошего дня! Я сюда пришёл, конечно же, за помощью. У меня было задание: давался сводный лист с компаниями в сводном листе были заголовки и одна огромная таблица, компаний в ней было 44. Я разбил таблицу на отдельные листы, т.е. данные одной компании находились на одном листе, другой компании на другом листе и т.д. Задание заключалось в автоматическом заполнении сводного листа по кнопке, т.е. я ввожу данные в лист компании №13, например, и в сводном листе в таблице заполнялись нужные ячейки, там где были данные о компании №13, всё это делалось по нажатии кнопки(но с заданием я не совсем справился, т.к. макрос выполнялся через Ctrl+q). Теперь, мне нужно чтобы всё также заполнялось, но автоматически, т.е. достаточно просто написать в листе №13 и всё, и данные уже были в сводном. Возможно так сделать? Вот код по предыдущему заданию: [vba]
Код
Option Explicit
Sub PerenosTarget() Dim TargetRow As Long Dim TargetColumn As Integer Dim FoundNomer As Range Dim FoundOkno As Range Dim FoundOknoRow As Long
TargetRow = ActiveCell.Row TargetColumn = ActiveCell.Column With Sheets("Ñâîä") ' Set FoundNomer = .Columns(1).Find("8602/" & ActiveSheet.Name, , xlValues, xlWhole)
Set FoundOkno = .Columns(1).Find(What:=Cells(ActiveCell.Row, 1), After:=FoundNomer, LookIn:=xlValues, _ LookAt:=xlWhole, SearchDirection:=xlPrevious) FoundOknoRow = FoundOkno.Row .Cells(FoundOknoRow, TargetColumn) = ActiveCell End With End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim TargetRow As Long Dim TargetColumn As Integer Dim FoundNomer As Range Dim FoundOkno As Range Dim FoundOknoRow As Long Application.EnableEvents = False TargetRow = Target.Row 'строка измененной ячейки TargetColumn = Target.Column 'столбец измененной ячейки With Sheets("Свод") 'надо перенести содержимое измененной ячейки на лист Свод 'ищем в столбце А строку с 8602/имя листа Set FoundNomer = .Columns(1).Find("8602/" & ActiveSheet.Name, , xlValues, xlWhole) 'ищем окно № на листе Свод, соответствующее окну измененной ячейки Set FoundOkno = .Columns(1).Find(What:=Cells(Target.Row, 1), After:=FoundNomer, LookIn:=xlValues, _ LookAt:=xlWhole, SearchDirection:=xlPrevious) FoundOknoRow = FoundOkno.Row .Cells(FoundOknoRow, TargetColumn) = Target.Value End With Application.EnableEvents = True End Sub
[/vba]
Если правильно понял, в модуль ЭтаКнига: [vba]
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim TargetRow As Long Dim TargetColumn As Integer Dim FoundNomer As Range Dim FoundOkno As Range Dim FoundOknoRow As Long Application.EnableEvents = False TargetRow = Target.Row 'строка измененной ячейки TargetColumn = Target.Column 'столбец измененной ячейки With Sheets("Свод") 'надо перенести содержимое измененной ячейки на лист Свод 'ищем в столбце А строку с 8602/имя листа Set FoundNomer = .Columns(1).Find("8602/" & ActiveSheet.Name, , xlValues, xlWhole) 'ищем окно № на листе Свод, соответствующее окну измененной ячейки Set FoundOkno = .Columns(1).Find(What:=Cells(Target.Row, 1), After:=FoundNomer, LookIn:=xlValues, _ LookAt:=xlWhole, SearchDirection:=xlPrevious) FoundOknoRow = FoundOkno.Row .Cells(FoundOknoRow, TargetColumn) = Target.Value End With Application.EnableEvents = True End Sub
После ваших правок вылазит ошибка после ввода в ячейку: Run-time error '91': Object variable or With Block variable not set. Знаете в чём дело?dmgust2704
[/vba] Что именно не выходит? В коде надо ограничить диапазон на каждом листе,где можно производить изменения, и лист Свод исключить из листов изменений
[vba]
Код
С этим кодом у меня ничего не выходит
[/vba] Что именно не выходит? В коде надо ограничить диапазон на каждом листе,где можно производить изменения, и лист Свод исключить из листов измененийKuzmich