Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Дублирование таблицы на другой лист нужных столбцов - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Дублирование таблицы на другой лист нужных столбцов (Макросы/Sub)
Дублирование таблицы на другой лист нужных столбцов
lebensvoll Дата: Среда, 05.12.2018, 12:02 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 858
Репутация: 22 ±
Замечаний: 0% ±

Excel 2010
Добрый день многоуважаемые форумчане.
Прошу Вас помощи в решении.
ЧЕСТНО! Пытался сам, пытал ГУГЛ помощи, смотрел в книгу "видел фигу %) :'( " и все это в течении двух суток.
Информации очень много с решением, но увы не смог достичь что нужно мне.
Имеется таблица "Отгрузка" на листе1, условие такое
Нужно чтоб при любом изменении в данной таблице эти данные "дублировались, копировались" на лист2 в таблицу (пусть будет "Отчет") но не вся полностью а лишь три ДАТА, НОМЕР СЧЕТ.
Прекрасно понимаю что для каких либо изменений в таблице я должен применить вот этот код

Но тут я потерялся совсем
Объявление переменных, поиск последней строки, выделение, копирование на другой лист в нужный мне диапазон %)
Наткнулся на код который копирует но всю таблицу переносит на нужный лист но не как таблицу а лишь значения
Прошу Вас подскажите как более правильно преобразовать код в нужное мне русло, спасибо за ранее за ответы
Сам код вот
[vba]
Код
Sub iCopy()
Dim Sht As Worksheet
Dim iLastRow As Long
  iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
    For Each Sht In Worksheets
      If Sht.Name <> "Лист1" Then
       If Sht.Name = "Лист2" Then
         With Sht
            Range("A3:D" & iLastRow).Copy
            .Cells(3, 1).PasteSpecial xlPasteColumnWidths
            .Cells(3, 1).PasteSpecial xlPasteValues
         End With
       End If
      End If
    Next
End Sub
[/vba]
Пытался записать свое действие и применить это все для листа3 при этом на листе1 применить Worksheet_Change тогда код ругается
[vba]
Код
Sub Макрос2()
' Макрос2 Макрос
    Range("A2:A8,C2:D8").Select
    Range("Отгрузка[[#Headers],[номер]]").Activate
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Лист3").Select
    Range("A2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$2:$C$8"), , xlYes).Name = _
        "Таблица2"
    Range("Таблица2[#All]").Select
End Sub
[/vba]

ааааааа
К сообщению приложен файл: 1203623.xlsm(21.1 Kb)


Кто бы ты ни был, мир в твоих руках
 
Ответить
СообщениеДобрый день многоуважаемые форумчане.
Прошу Вас помощи в решении.
ЧЕСТНО! Пытался сам, пытал ГУГЛ помощи, смотрел в книгу "видел фигу %) :'( " и все это в течении двух суток.
Информации очень много с решением, но увы не смог достичь что нужно мне.
Имеется таблица "Отгрузка" на листе1, условие такое
Нужно чтоб при любом изменении в данной таблице эти данные "дублировались, копировались" на лист2 в таблицу (пусть будет "Отчет") но не вся полностью а лишь три ДАТА, НОМЕР СЧЕТ.
Прекрасно понимаю что для каких либо изменений в таблице я должен применить вот этот код

Но тут я потерялся совсем
Объявление переменных, поиск последней строки, выделение, копирование на другой лист в нужный мне диапазон %)
Наткнулся на код который копирует но всю таблицу переносит на нужный лист но не как таблицу а лишь значения
Прошу Вас подскажите как более правильно преобразовать код в нужное мне русло, спасибо за ранее за ответы
Сам код вот
[vba]
Код
Sub iCopy()
Dim Sht As Worksheet
Dim iLastRow As Long
  iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
    For Each Sht In Worksheets
      If Sht.Name <> "Лист1" Then
       If Sht.Name = "Лист2" Then
         With Sht
            Range("A3:D" & iLastRow).Copy
            .Cells(3, 1).PasteSpecial xlPasteColumnWidths
            .Cells(3, 1).PasteSpecial xlPasteValues
         End With
       End If
      End If
    Next
End Sub
[/vba]
Пытался записать свое действие и применить это все для листа3 при этом на листе1 применить Worksheet_Change тогда код ругается
[vba]
Код
Sub Макрос2()
' Макрос2 Макрос
    Range("A2:A8,C2:D8").Select
    Range("Отгрузка[[#Headers],[номер]]").Activate
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Лист3").Select
    Range("A2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$2:$C$8"), , xlYes).Name = _
        "Таблица2"
    Range("Таблица2[#All]").Select
End Sub
[/vba]

ааааааа

Автор - lebensvoll
Дата добавления - 05.12.2018 в 12:02
boa Дата: Среда, 05.12.2018, 12:40 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 264
Репутация: 55 ±
Замечаний: 0% ±

2013, 365
Здравствуйте, lebensvoll,
вам надо что бы скопировались изменения, т.е. было-стало?
или просто колонки целиком?
Если целиком, то можно добавить таблицу которая будет ссылаться на таблицу "Отгрузка" и обновлять ее по удобному событию: то ли внесение изменений, то ли активация/деактивация листа

В примере добавил таблицу и события. Не нужное закомментируйте.
ну или
[vba]
Код
Sheets("Лист1").Range("A2:A8,C2:C8,D2:D8").Copy Sheets("Лист3").Cells(2, 1)
[/vba]
К сообщению приложен файл: 1203623.7z(41.9 Kb)


 
Ответить
СообщениеЗдравствуйте, lebensvoll,
вам надо что бы скопировались изменения, т.е. было-стало?
или просто колонки целиком?
Если целиком, то можно добавить таблицу которая будет ссылаться на таблицу "Отгрузка" и обновлять ее по удобному событию: то ли внесение изменений, то ли активация/деактивация листа

В примере добавил таблицу и события. Не нужное закомментируйте.
ну или
[vba]
Код
Sheets("Лист1").Range("A2:A8,C2:C8,D2:D8").Copy Sheets("Лист3").Cells(2, 1)
[/vba]

Автор - boa
Дата добавления - 05.12.2018 в 12:40
lebensvoll Дата: Среда, 05.12.2018, 12:49 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 858
Репутация: 22 ±
Замечаний: 0% ±

Excel 2010
boa, спасибо за отзывчивость...
Но файл не смог открыть [img][/img]
Цитата
вам надо что бы скопировались изменения, т.е. было-стало?

Нужно чтоб при любых изменениях в таблице на листе 1 (данные "копировались, дублировались" Не вся таблица а лишь 1;3;4 графы) на другой лист2 в таблицу


Кто бы ты ни был, мир в твоих руках
 
Ответить
Сообщениеboa, спасибо за отзывчивость...
Но файл не смог открыть [img][/img]
Цитата
вам надо что бы скопировались изменения, т.е. было-стало?

Нужно чтоб при любых изменениях в таблице на листе 1 (данные "копировались, дублировались" Не вся таблица а лишь 1;3;4 графы) на другой лист2 в таблицу

Автор - lebensvoll
Дата добавления - 05.12.2018 в 12:49
boa Дата: Среда, 05.12.2018, 12:56 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 264
Репутация: 55 ±
Замечаний: 0% ±

2013, 365
lebensvoll, надо пересоздать таблицу на sheet1, а то она ссылается на мой путь


 
Ответить
Сообщениеlebensvoll, надо пересоздать таблицу на sheet1, а то она ссылается на мой путь

Автор - boa
Дата добавления - 05.12.2018 в 12:56
boa Дата: Среда, 05.12.2018, 13:01 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 264
Репутация: 55 ±
Замечаний: 0% ±

2013, 365
или используйте копирование
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("Отгрузка[#All]")) Is Nothing Then
        Application.EnableEvents = 0
        Range("A2:A8,C2:C8,D2:D8").Copy Sheets("Лист3").Cells(2, 1)
        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
        Range("A2:A8,C2:C8,D2:D8").Copy Sheets("Лист3").Cells(2, 1)
        Application.EnableEvents = 1
    End If
End Sub
[/vba]

Автор - boa
Дата добавления - 05.12.2018 в 13:01
boa Дата: Среда, 05.12.2018, 13:06 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 264
Репутация: 55 ±
Замечаний: 0% ±

2013, 365
можно даже столбцы целиком
[vba]
Код
Range("A:A,C:D").Copy Sheets("Лист2").Cells(1, 1)
[/vba]


 
Ответить
Сообщениеможно даже столбцы целиком
[vba]
Код
Range("A:A,C:D").Copy Sheets("Лист2").Cells(1, 1)
[/vba]

Автор - boa
Дата добавления - 05.12.2018 в 13:06
lebensvoll Дата: Среда, 05.12.2018, 13:35 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 858
Репутация: 22 ±
Замечаний: 0% ±

Excel 2010
boa, Спасибо огромное!!!
Блин это все можно было лишь в одну строку прописать :o
Но буду все равно искать и пробывать как сделать так (вот оператор дополнил таблицу новыми данными "увеличил диапазон" примерно) тогда код уже не приемлем :(
Спасибо еще раз


Кто бы ты ни был, мир в твоих руках
 
Ответить
Сообщениеboa, Спасибо огромное!!!
Блин это все можно было лишь в одну строку прописать :o
Но буду все равно искать и пробывать как сделать так (вот оператор дополнил таблицу новыми данными "увеличил диапазон" примерно) тогда код уже не приемлем :(
Спасибо еще раз

Автор - lebensvoll
Дата добавления - 05.12.2018 в 13:35
_Boroda_ Дата: Среда, 05.12.2018, 13:50 | Сообщение № 8
Группа: Модераторы
Ранг: Местный житель
Сообщений: 13660
Репутация: 5574 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
увеличил диапазон
это фигня. А вот если уменьшил кол-во строк, вот здесь засада
Я бы вот так написал. Пробегается по второй таблице, берет названия столбцов, ищет их в первой таблице и копирует найденный столбец
Обработчик ошибки в случае ненахождения искомого столбца самостоятельно добавьте там, я забыл
Добавил. Файл перевложил
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("Отгрузка")) Is Nothing Then
        Set tb1_ = Sheets("Лист3").ListObjects("Таблица2")
        With tb1_
            nc_ = .ListColumns.Count
            nr_ = .ListRows.Count
            If nr_ Then
                .Range(1).Offset(1).Resize(nr_, nc_).Delete
            End If
            On Error Resume Next
            For i = 1 To nc_
                Range("Отгрузка[" & .Range(i) & "]").Copy .Range(nc_ + i)
            Next i
            On Error GoTo 0
        End With
    End If
End Sub
[/vba]
К сообщению приложен файл: 1203623_1.xlsm(20.5 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
увеличил диапазон
это фигня. А вот если уменьшил кол-во строк, вот здесь засада
Я бы вот так написал. Пробегается по второй таблице, берет названия столбцов, ищет их в первой таблице и копирует найденный столбец
Обработчик ошибки в случае ненахождения искомого столбца самостоятельно добавьте там, я забыл
Добавил. Файл перевложил
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("Отгрузка")) Is Nothing Then
        Set tb1_ = Sheets("Лист3").ListObjects("Таблица2")
        With tb1_
            nc_ = .ListColumns.Count
            nr_ = .ListRows.Count
            If nr_ Then
                .Range(1).Offset(1).Resize(nr_, nc_).Delete
            End If
            On Error Resume Next
            For i = 1 To nc_
                Range("Отгрузка[" & .Range(i) & "]").Copy .Range(nc_ + i)
            Next i
            On Error GoTo 0
        End With
    End If
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 05.12.2018 в 13:50
lebensvoll Дата: Среда, 05.12.2018, 15:50 | Сообщение № 9
Группа: Проверенные
Ранг: Ветеран
Сообщений: 858
Репутация: 22 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, Ваш пример более выразителен и убийственен в решении задачи...
Но увы...
Данный пример хотел применить для файла другого :( :'( %)
(Другие листы скрыты) имеется два листа (Отгрузка и Отчет списание). Задача моя была в следующем (ну как думал Я, в итоге подход был задуман не верен)
Оператор вносит отгрузку в таблицу Отгрузка на листе Отгрузка по кнопке.
Как только данная запись была внесена, то она сразу дублируется (куском, не все таблица а нужное) на другой лист.
Ваш код Александр гениален но почему то для моего примера он не подошел. Но хотя не могу понять почему. Ведь даже на Вашем примере если бы я добавил новую хоть какую то запись то она дополняется сразу на другой лист.
А скопировал его в файл (((( потерпел крах
Он работает если я после внесении новой записи изменяю что то либо в таблице тогда она сразу на ура работает.
К сообщению приложен файл: _1.xlsm(71.5 Kb)


Кто бы ты ни был, мир в твоих руках
 
Ответить
Сообщение_Boroda_, Ваш пример более выразителен и убийственен в решении задачи...
Но увы...
Данный пример хотел применить для файла другого :( :'( %)
(Другие листы скрыты) имеется два листа (Отгрузка и Отчет списание). Задача моя была в следующем (ну как думал Я, в итоге подход был задуман не верен)
Оператор вносит отгрузку в таблицу Отгрузка на листе Отгрузка по кнопке.
Как только данная запись была внесена, то она сразу дублируется (куском, не все таблица а нужное) на другой лист.
Ваш код Александр гениален но почему то для моего примера он не подошел. Но хотя не могу понять почему. Ведь даже на Вашем примере если бы я добавил новую хоть какую то запись то она дополняется сразу на другой лист.
А скопировал его в файл (((( потерпел крах
Он работает если я после внесении новой записи изменяю что то либо в таблице тогда она сразу на ура работает.

Автор - lebensvoll
Дата добавления - 05.12.2018 в 15:50
boa Дата: Среда, 05.12.2018, 15:53 | Сообщение № 10
Группа: Проверенные
Ранг: Обитатель
Сообщений: 264
Репутация: 55 ±
Замечаний: 0% ±

2013, 365
lebensvoll, если оператор увеличивает количество строк(что есть нормально), то используйте копирование из сообщения №6
определив последнюю строку можно переписать Range
[vba]
Код
    Dim LastRow&: LastRow = Me.UsedRange.SpecialCells(xlLastCell).Row
    Range("A2:A" & LastRow & ",C2:C" & LastRow & ",D2:D" & LastRow).Copy Sheets("Лист3").Cells(2, 1)
[/vba]
ну а если он столбцы будет добавлять/двигать, то можно финдом по заголовку таблицы пройтись и определить копируемый диапазон.
[vba]
Код
Sub NewMacros()
    Dim LastRow&, LetterCol$, AddressRange$, a
    With Sheets("Лист1")
        LastRow = .UsedRange.SpecialCells(xlLastCell).Row   'получаем номер последней строки
        For Each a In Array("дата", "номер", "счет")
            LetterCol = Split(.Columns(.Range("Отгрузка[[#Headers]]").Find(a, LookIn:=xlValues, LookAt:=xlWhole).Column).Address(0, 0), ":")(0)    'получаем букву столбца
            AddressRange = AddressRange & IIf(Len(AddressRange) > 0, ",", "") & LetterCol & "2:" & LetterCol & LastRow    'генерируем строку адреса
        Next
        .Range(AddressRange).Copy Sheets("Лист3").Cells(2, 1)
    End With
End Sub
[/vba]




Сообщение отредактировал boa - Среда, 05.12.2018, 15:54
 
Ответить
Сообщениеlebensvoll, если оператор увеличивает количество строк(что есть нормально), то используйте копирование из сообщения №6
определив последнюю строку можно переписать Range
[vba]
Код
    Dim LastRow&: LastRow = Me.UsedRange.SpecialCells(xlLastCell).Row
    Range("A2:A" & LastRow & ",C2:C" & LastRow & ",D2:D" & LastRow).Copy Sheets("Лист3").Cells(2, 1)
[/vba]
ну а если он столбцы будет добавлять/двигать, то можно финдом по заголовку таблицы пройтись и определить копируемый диапазон.
[vba]
Код
Sub NewMacros()
    Dim LastRow&, LetterCol$, AddressRange$, a
    With Sheets("Лист1")
        LastRow = .UsedRange.SpecialCells(xlLastCell).Row   'получаем номер последней строки
        For Each a In Array("дата", "номер", "счет")
            LetterCol = Split(.Columns(.Range("Отгрузка[[#Headers]]").Find(a, LookIn:=xlValues, LookAt:=xlWhole).Column).Address(0, 0), ":")(0)    'получаем букву столбца
            AddressRange = AddressRange & IIf(Len(AddressRange) > 0, ",", "") & LetterCol & "2:" & LetterCol & LastRow    'генерируем строку адреса
        Next
        .Range(AddressRange).Copy Sheets("Лист3").Cells(2, 1)
    End With
End Sub
[/vba]

Автор - boa
Дата добавления - 05.12.2018 в 15:53
boa Дата: Среда, 05.12.2018, 16:20 | Сообщение № 11
Группа: Проверенные
Ранг: Обитатель
Сообщений: 264
Репутация: 55 ±
Замечаний: 0% ±

2013, 365
а что бы отрабатывало и для новых строк таблицы в модульлиста вставьте
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim iCol&, a
    With Me
        For Each a In Array("дата", "номер", "счет")
            iCol = .Range("Отгрузка[[#Headers]]").Find(a, LookIn:=xlValues, LookAt:=xlWhole).Column
            If Target.Column = iCol Then Call NewMacros: Exit Sub
        Next
    End With
End Sub
[/vba]


 
Ответить
Сообщениеа что бы отрабатывало и для новых строк таблицы в модульлиста вставьте
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim iCol&, a
    With Me
        For Each a In Array("дата", "номер", "счет")
            iCol = .Range("Отгрузка[[#Headers]]").Find(a, LookIn:=xlValues, LookAt:=xlWhole).Column
            If Target.Column = iCol Then Call NewMacros: Exit Sub
        Next
    End With
End Sub
[/vba]

Автор - boa
Дата добавления - 05.12.2018 в 16:20
_Boroda_ Дата: Среда, 05.12.2018, 16:25 | Сообщение № 12
Группа: Модераторы
Ранг: Местный житель
Сообщений: 13660
Репутация: 5574 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
А все потому, что кто-то до сих пор не выучил п.3 Правил форума и кладет примеры, несоответствующие реальным файлам
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("Отгрузка")) Is Nothing Then
        Set tb1_ = Sheets("Отчет списание").ListObjects("Отчет")
        With tb1_
            nc_ = .ListColumns.Count
'            nr_ = .ListRows.Count
'            If nr_ Then
'                .Range(1).Offset(1).Resize(nr_, nc_).Delete
'            End If
            On Error Resume Next
            For i = 1 To nc_
                Range("Отгрузка[" & .Range(i) & "]").Copy .Range(nc_ + i)
            Next i
            On Error GoTo 0
        End With
    End If
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА все потому, что кто-то до сих пор не выучил п.3 Правил форума и кладет примеры, несоответствующие реальным файлам
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("Отгрузка")) Is Nothing Then
        Set tb1_ = Sheets("Отчет списание").ListObjects("Отчет")
        With tb1_
            nc_ = .ListColumns.Count
'            nr_ = .ListRows.Count
'            If nr_ Then
'                .Range(1).Offset(1).Resize(nr_, nc_).Delete
'            End If
            On Error Resume Next
            For i = 1 To nc_
                Range("Отгрузка[" & .Range(i) & "]").Copy .Range(nc_ + i)
            Next i
            On Error GoTo 0
        End With
    End If
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 05.12.2018 в 16:25
lebensvoll Дата: Среда, 05.12.2018, 16:44 | Сообщение № 13
Группа: Проверенные
Ранг: Ветеран
Сообщений: 858
Репутация: 22 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, спорить не буду. Простите если что не так...
Но задача ведь была аналогична задумке на другом листе. Но понимание того что ошибочно пришло с ответом.
Потому как в теме поста был файл с данными которые просто либо заполняются или дополняются. А куда это решение хотел применить дополнение через кнопку
Но я то думал что и там и там умные таблицы и итог решения одинаков
Закоментирование части кода не дало решения. Запись вносится а на другой лист она дублируется лишь тогда когда начинаешь корректировать записи в таблице.
[vba]
Код
'            nr_ = .ListRows.Count
'            If nr_ Then
'                .Range(1).Offset(1).Resize(nr_, nc_).Delete
'            End If
[/vba]
Мое мнение возможно ли что нужно как то прописать определение последней ячейки в таблице. Но не уверен в логике
[vba]
Код
lLastRow = Cells(Rows.Count,1).End(xlUp).Row
[/vba]
Скорее всего можно поступить иначе и привязаться к кнопке "Внесения записи" но тогда теряется "задача". Потому как оператор может потом взять и удалить запись из таблицы :'( в одной таблицы запись будет а в другой не будет. Или еще хуже в одной она будет с одними данными (а потом оператор меняет что нибудь, есть такое за ними) а у меня будут записаны другие данные....


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvoll - Среда, 05.12.2018, 16:52
 
Ответить
Сообщение_Boroda_, спорить не буду. Простите если что не так...
Но задача ведь была аналогична задумке на другом листе. Но понимание того что ошибочно пришло с ответом.
Потому как в теме поста был файл с данными которые просто либо заполняются или дополняются. А куда это решение хотел применить дополнение через кнопку
Но я то думал что и там и там умные таблицы и итог решения одинаков
Закоментирование части кода не дало решения. Запись вносится а на другой лист она дублируется лишь тогда когда начинаешь корректировать записи в таблице.
[vba]
Код
'            nr_ = .ListRows.Count
'            If nr_ Then
'                .Range(1).Offset(1).Resize(nr_, nc_).Delete
'            End If
[/vba]
Мое мнение возможно ли что нужно как то прописать определение последней ячейки в таблице. Но не уверен в логике
[vba]
Код
lLastRow = Cells(Rows.Count,1).End(xlUp).Row
[/vba]
Скорее всего можно поступить иначе и привязаться к кнопке "Внесения записи" но тогда теряется "задача". Потому как оператор может потом взять и удалить запись из таблицы :'( в одной таблицы запись будет а в другой не будет. Или еще хуже в одной она будет с одними данными (а потом оператор меняет что нибудь, есть такое за ними) а у меня будут записаны другие данные....

Автор - lebensvoll
Дата добавления - 05.12.2018 в 16:44
_Boroda_ Дата: Среда, 05.12.2018, 16:48 | Сообщение № 14
Группа: Модераторы
Ранг: Местный житель
Сообщений: 13660
Репутация: 5574 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
А что нужно-то? Это -
Как только данная запись была внесена, то она сразу дублируется (куском, не все таблица а нужное) на другой лист.

Тогда нужно совсем другой код писать. Совсем-совсем. Мой как раз был заточен на то, чтобы менять столбцы целиком


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА что нужно-то? Это -
Как только данная запись была внесена, то она сразу дублируется (куском, не все таблица а нужное) на другой лист.

Тогда нужно совсем другой код писать. Совсем-совсем. Мой как раз был заточен на то, чтобы менять столбцы целиком

Автор - _Boroda_
Дата добавления - 05.12.2018 в 16:48
boa Дата: Среда, 05.12.2018, 16:58 | Сообщение № 15
Группа: Проверенные
Ранг: Обитатель
Сообщений: 264
Репутация: 55 ±
Замечаний: 0% ±

2013, 365
lebensvoll,
у вас на кнопке стоит EnableEvents = False следовательно ни какие события не будут обрабатываться.
в т.ч. и Worksheet_Change




Сообщение отредактировал boa - Среда, 05.12.2018, 16:59
 
Ответить
Сообщениеlebensvoll,
у вас на кнопке стоит EnableEvents = False следовательно ни какие события не будут обрабатываться.
в т.ч. и Worksheet_Change

Автор - boa
Дата добавления - 05.12.2018 в 16:58
lebensvoll Дата: Среда, 05.12.2018, 17:04 | Сообщение № 16
Группа: Проверенные
Ранг: Ветеран
Сообщений: 858
Репутация: 22 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, Ну вот смотрите
на листе ОТГРУЗКА оператором вносится запись, которую он формирует тут
[img][/img]
Затем вносит эти данные в таблицу на лист Отгрузка при нажатии кнопки
[img][/img]
Данные вносятся в таблицу
[img][/img]
И как только эти данные внеслись в таблицу то они дублируются на лист Отчет списание
Но лишь часть нужных столбцов из таблицы Отгрузка (Дата; Контрагент; Госномер ТС; Продукция; Количество)
[img][/img]
Но есть нюанс.
Любые изменения в таблице Отгрузка, должны сразу же дублироваться (конечно же интересует лишь столбцы Дата; Контрагент; Госномер ТС; Продукция; Количество) в другой таблице Отчет.
Ваше решение было отличным и оно срабытавает.
Но лишь только тогда когда оператор производит изменения в таблице Отгрузка. А вот когда появляется новая запись увы (хотя в файле первого файла сообщения №8 она срабатывает на ура просто. К примеру я беру и протягиваю таблицу дальше на две три строки и забиваю туда информация и как только я ее завершаю они дублируются). ПОЧЕМУ ТАК ТО


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvoll - Среда, 05.12.2018, 17:07
 
Ответить
Сообщение_Boroda_, Ну вот смотрите
на листе ОТГРУЗКА оператором вносится запись, которую он формирует тут
[img][/img]
Затем вносит эти данные в таблицу на лист Отгрузка при нажатии кнопки
[img][/img]
Данные вносятся в таблицу
[img][/img]
И как только эти данные внеслись в таблицу то они дублируются на лист Отчет списание
Но лишь часть нужных столбцов из таблицы Отгрузка (Дата; Контрагент; Госномер ТС; Продукция; Количество)
[img][/img]
Но есть нюанс.
Любые изменения в таблице Отгрузка, должны сразу же дублироваться (конечно же интересует лишь столбцы Дата; Контрагент; Госномер ТС; Продукция; Количество) в другой таблице Отчет.
Ваше решение было отличным и оно срабытавает.
Но лишь только тогда когда оператор производит изменения в таблице Отгрузка. А вот когда появляется новая запись увы (хотя в файле первого файла сообщения №8 она срабатывает на ура просто. К примеру я беру и протягиваю таблицу дальше на две три строки и забиваю туда информация и как только я ее завершаю они дублируются). ПОЧЕМУ ТАК ТО

Автор - lebensvoll
Дата добавления - 05.12.2018 в 17:04
_Boroda_ Дата: Среда, 05.12.2018, 17:10 | Сообщение № 17
Группа: Модераторы
Ранг: Местный житель
Сообщений: 13660
Репутация: 5574 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
В макрос для кнопки последней строкой (перед End sub) добавьте
[vba]
Код
Range("Отгрузка").Cells(1) = Range("Отгрузка").Cells(1)
[/vba]

См. пост boa выше
К сообщению приложен файл: _1-5-1.xlsm(65.4 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995


Сообщение отредактировал _Boroda_ - Среда, 05.12.2018, 17:11
 
Ответить
СообщениеВ макрос для кнопки последней строкой (перед End sub) добавьте
[vba]
Код
Range("Отгрузка").Cells(1) = Range("Отгрузка").Cells(1)
[/vba]

См. пост boa выше

Автор - _Boroda_
Дата добавления - 05.12.2018 в 17:10
lebensvoll Дата: Среда, 05.12.2018, 20:38 | Сообщение № 18
Группа: Проверенные
Ранг: Ветеран
Сообщений: 858
Репутация: 22 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, :o
Вот ну как так то одна строка а запрещала дальнейшее событие на листе %)
hands СПАСИБО ВАМ ОГРОМНОЕ АЛЕКСАНДР!!!
boa, Вам также!!! hands yes


Кто бы ты ни был, мир в твоих руках
 
Ответить
Сообщение_Boroda_, :o
Вот ну как так то одна строка а запрещала дальнейшее событие на листе %)
hands СПАСИБО ВАМ ОГРОМНОЕ АЛЕКСАНДР!!!
boa, Вам также!!! hands yes

Автор - lebensvoll
Дата добавления - 05.12.2018 в 20:38
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Дублирование таблицы на другой лист нужных столбцов (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2018 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!