Sub CopyKino() Dim cc As Object, from_ As Range, to_ As Range For Each cc In ActiveSheet.ListObjects If cc.HeaderRowRange(1, 1) = "Кинотеатр" Then Set from_ = cc.DataBodyRange If cc.HeaderRowRange(1, 1) = "№" Then Set to_ = cc.DataBodyRange Next Set to_ = to_.Offset(to_.Rows.Count) Application.ScreenUpdating = False from_.Columns(1).Copy to_.Columns(5) from_.Columns(2).Copy to_.Columns(6) Application.ScreenUpdating = True End Sub
Sub CopySale() Dim cc As Object, from_ As Range, to_ As Range For Each cc In ActiveSheet.ListObjects If cc.HeaderRowRange(1, 1) = "Торговля" Then Set from_ = cc.DataBodyRange If cc.HeaderRowRange(1, 1) = "№" Then Set to_ = cc.DataBodyRange Next Set to_ = to_.Offset(to_.Rows.Count) Application.ScreenUpdating = False from_.Columns(1).Copy to_.Columns(5) from_.Columns(2).Copy to_.Columns(6) Application.ScreenUpdating = True End Sub
[/vba] Но есть одно НО (лень бороться) - что-то уже в нижней таблице должно быть записано!
Если вообще ничего не известно: [vba]
Code
Sub CopyKino() Dim cc As Object, from_ As Range, to_ As Range For Each cc In ActiveSheet.ListObjects If cc.HeaderRowRange(1, 1) = "Кинотеатр" Then Set from_ = cc.DataBodyRange If cc.HeaderRowRange(1, 1) = "№" Then Set to_ = cc.DataBodyRange Next Set to_ = to_.Offset(to_.Rows.Count) Application.ScreenUpdating = False from_.Columns(1).Copy to_.Columns(5) from_.Columns(2).Copy to_.Columns(6) Application.ScreenUpdating = True End Sub
Sub CopySale() Dim cc As Object, from_ As Range, to_ As Range For Each cc In ActiveSheet.ListObjects If cc.HeaderRowRange(1, 1) = "Торговля" Then Set from_ = cc.DataBodyRange If cc.HeaderRowRange(1, 1) = "№" Then Set to_ = cc.DataBodyRange Next Set to_ = to_.Offset(to_.Rows.Count) Application.ScreenUpdating = False from_.Columns(1).Copy to_.Columns(5) from_.Columns(2).Copy to_.Columns(6) Application.ScreenUpdating = True End Sub
[/vba] Но есть одно НО (лень бороться) - что-то уже в нижней таблице должно быть записано!Hugo
Дата: Воскресенье, 09.09.2012, 09:20 |
Сообщение № 28
Группа: Гости
HUGO Не получился все равно ругает
Sub CopyKino2() Dim cc As Object, from_ As Range, to_ As Range Dim Msg, Style, Title, Response Msg = "Ìàêðîñ ñïðàâèëñÿ ñ çàäà÷åé?" Style = 4 Application.DisplayAlerts = False Sheets("Ëèñò1").Copy Before:=Sheets(1) For Each cc In ActiveSheet.ListObjects If cc.HeaderRowRange(1, 1) = "Êèíîòåàòð" Then Set from_ = cc.DataBodyRange If cc.HeaderRowRange(1, 1) = "¹" Then Set to_ = cc.DataBodyRange Next Set to_ = to_.Offset(to_.Rows.Count) Application.ScreenUpdating = False from_.Columns(1).Copy to_.Columns(5) from_.Columns(2).Copy to_.Columns(6) Application.ScreenUpdating = True Sheets("Ëèñò1 (2)").Visible = False Response = MsgBox(Msg, Style) If Response = vbYes Then Sheets("Ëèñò1 (2)").Delete Else Sheets("Ëèñò1 (2)").Visible = True Sheets("Ëèñò1").Delete Sheets("Ëèñò1 (2)").Name = "Ëèñò1" End If Application.DisplayAlerts = True End Sub
HUGO Не получился все равно ругает
Sub CopyKino2() Dim cc As Object, from_ As Range, to_ As Range Dim Msg, Style, Title, Response Msg = "Ìàêðîñ ñïðàâèëñÿ ñ çàäà÷åé?" Style = 4 Application.DisplayAlerts = False Sheets("Ëèñò1").Copy Before:=Sheets(1) For Each cc In ActiveSheet.ListObjects If cc.HeaderRowRange(1, 1) = "Êèíîòåàòð" Then Set from_ = cc.DataBodyRange If cc.HeaderRowRange(1, 1) = "¹" Then Set to_ = cc.DataBodyRange Next Set to_ = to_.Offset(to_.Rows.Count) Application.ScreenUpdating = False from_.Columns(1).Copy to_.Columns(5) from_.Columns(2).Copy to_.Columns(6) Application.ScreenUpdating = True Sheets("Ëèñò1 (2)").Visible = False Response = MsgBox(Msg, Style) If Response = vbYes Then Sheets("Ëèñò1 (2)").Delete Else Sheets("Ëèñò1 (2)").Visible = True Sheets("Ëèñò1").Delete Sheets("Ëèñò1 (2)").Name = "Ëèñò1" End If Application.DisplayAlerts = True End Sub
Кто кого ругает? Вы сперва заполнили первую строку сводной таблицы? А то сейчас я ругать буду И когда копируете на форум код - следите за раскладкой, и оформляйте тегами. А то позорище я под спойлер спрятал
Кто кого ругает? Вы сперва заполнили первую строку сводной таблицы? А то сейчас я ругать буду И когда копируете на форум код - следите за раскладкой, и оформляйте тегами. А то позорище я под спойлер спрятал Hugo
Дата: Воскресенье, 09.09.2012, 14:08 |
Сообщение № 30
Группа: Гости
Ок спасибо Да первый решился но я не знал что после макроса нельзя отменит просто из за прокси отключено функции Как вы решаете отмену после макроса? Просто то что дал Serge_007 я не могу применить..
[vba]
Code
Sub CopyKino2() Dim cc As Object, from_ As Range, to_ As Range Dim Msg, Style, Title, Response Msg = "Макрос справился с задачей?" Style = 4 Application.DisplayAlerts = False Sheets("Лист1").Copy Before:=Sheets(1) For Each cc In ActiveSheet.ListObjects If cc.HeaderRowRange(1, 1) = "Кинотеатр" Then Set from_ = cc.DataBodyRange If cc.HeaderRowRange(1, 1) = "№" Then Set to_ = cc.DataBodyRange Next Set to_ = to_.Offset(to_.Rows.Count) Application.ScreenUpdating = False from_.Columns(1).Copy to_.Columns(5) from_.Columns(2).Copy to_.Columns(6) Application.ScreenUpdating = True Sheets("Лист1 (2)").Visible = False Response = MsgBox(Msg, Style) If Response = vbYes Then Sheets("Лист1 (2)").Delete Else Sheets("Лист1 (2)").Visible = True Sheets("Лист1").Delete Sheets("Лист1 (2)").Name = "Лист1" End If Application.DisplayAlerts = True End Sub
[/vba]
Ок спасибо Да первый решился но я не знал что после макроса нельзя отменит просто из за прокси отключено функции Как вы решаете отмену после макроса? Просто то что дал Serge_007 я не могу применить..
[vba]
Code
Sub CopyKino2() Dim cc As Object, from_ As Range, to_ As Range Dim Msg, Style, Title, Response Msg = "Макрос справился с задачей?" Style = 4 Application.DisplayAlerts = False Sheets("Лист1").Copy Before:=Sheets(1) For Each cc In ActiveSheet.ListObjects If cc.HeaderRowRange(1, 1) = "Кинотеатр" Then Set from_ = cc.DataBodyRange If cc.HeaderRowRange(1, 1) = "№" Then Set to_ = cc.DataBodyRange Next Set to_ = to_.Offset(to_.Rows.Count) Application.ScreenUpdating = False from_.Columns(1).Copy to_.Columns(5) from_.Columns(2).Copy to_.Columns(6) Application.ScreenUpdating = True Sheets("Лист1 (2)").Visible = False Response = MsgBox(Msg, Style) If Response = vbYes Then Sheets("Лист1 (2)").Delete Else Sheets("Лист1 (2)").Visible = True Sheets("Лист1").Delete Sheets("Лист1 (2)").Name = "Лист1" End If Application.DisplayAlerts = True End Sub
Я пишу макрос так, чтоб отмену делать не пришлось. Ну а если заметил, что ошибка (в работе такого не было) - закрываю файл без сохранения, открываю заново. Ну тут уже упоминали такой вариант.
Я пишу макрос так, чтоб отмену делать не пришлось. Ну а если заметил, что ошибка (в работе такого не было) - закрываю файл без сохранения, открываю заново. Ну тут уже упоминали такой вариант.Hugo
Сперва Вам нужно было дописывать в конец, теперь заменять уже написанное... Это будут совсем разные коды и алгоритмы. И заменять значительно сложнее. Если я Вас правильно конечно понял. Может быть нужно не заменять, а всё стереть и подтянуть заново?
Сперва Вам нужно было дописывать в конец, теперь заменять уже написанное... Это будут совсем разные коды и алгоритмы. И заменять значительно сложнее. Если я Вас правильно конечно понял. Может быть нужно не заменять, а всё стереть и подтянуть заново?Hugo
Дата: Понедельник, 10.09.2012, 07:43 |
Сообщение № 35
Группа: Гости
Не очень понял Наверно не правильно объяснил Например Так получается Когда нажал на кинотеатр и указал сумму 1000 и дату 01,01,2012 эти значение вставляется в колонке общая сумма и дата
Когда нажал на торговля и указал сумму 2000 и дату 02,01,2012 эти значение вставляется в колонке общая сумма и дата
То последний сумма и дата который я ввел на всю колонку вставляет поверх то есть заменяет
Вашем коде не получится ? Можете помочь?
Не очень понял Наверно не правильно объяснил Например Так получается Когда нажал на кинотеатр и указал сумму 1000 и дату 01,01,2012 эти значение вставляется в колонке общая сумма и дата
Когда нажал на торговля и указал сумму 2000 и дату 02,01,2012 эти значение вставляется в колонке общая сумма и дата
То последний сумма и дата который я ввел на всю колонку вставляет поверх то есть заменяет
Дата: Понедельник, 10.09.2012, 13:30 |
Сообщение № 36
Группа: Гости
Ура получилось Уважаемые эксперты насколько правильно такой подход ? Но пока работает [CODE] Sub testKino() Dim table As ListObject Dim index As Long Dim rows As Long Dim oNewRow As ListRow Set table = Workbooks("FinansV2.xlsm").Worksheets("Настройки").ListObjects("Kino") Application.ScreenUpdating = False rows = table.ListRows.Count For index = 1 To rows Set oNewRow = ActiveSheet.ListObjects("Journal").ListRows.Add(AlwaysInsert:=True) oNewRow.Range.Columns(2).value = Cells(6, 2).value oNewRow.Range.Columns(6).value = Cells(7, 2).value oNewRow.Range.Columns(5).value = table.Range.Cells(index + 1, 1).value Next index Application.ScreenUpdating = True End Sub
/[CODE]
Ура получилось Уважаемые эксперты насколько правильно такой подход ? Но пока работает [CODE] Sub testKino() Dim table As ListObject Dim index As Long Dim rows As Long Dim oNewRow As ListRow Set table = Workbooks("FinansV2.xlsm").Worksheets("Настройки").ListObjects("Kino") Application.ScreenUpdating = False rows = table.ListRows.Count For index = 1 To rows Set oNewRow = ActiveSheet.ListObjects("Journal").ListRows.Add(AlwaysInsert:=True) oNewRow.Range.Columns(2).value = Cells(6, 2).value oNewRow.Range.Columns(6).value = Cells(7, 2).value oNewRow.Range.Columns(5).value = table.Range.Cells(index + 1, 1).value Next index Application.ScreenUpdating = True End Sub