Макрос excel для копирования таблица

Отлично, спасибо тебе. Я с макросами вообще не дружу, можешь поправить код чтоб при сохранении запрашивал имя файла, так же возможно сохранить ширину колонок при копировании, а то все колонки сжимаются как при стандартном виде. Так же можно сделать чтоб не сохранялись последние 3 строки под таблицей и пятая (если смотреть снизу), то есть нужно чтоб под таблицей только осталась «общая сумму в юанях»

Добавлено через 51 минуту
немного подредактировал, вообщем
1. не могу добиться чтоб колонки сохраняли свой размер, причина скорее всего в этом:

Отчет о совместимости для Заказ.xls
Дата отчета: 7/28/2013 16:01

Некоторые свойства данной книги не поддерживаются более ранними версиями Excel. Открытие книги в более ранней версии Excel или ее сохранение в формате более ранней версии приведет к потере или ограничению функциональности этих свойств.

Несущественная потеря точности Число экземпляров Версия

Некоторые ячейки или стили в этой книге содержат форматирование, не поддерживаемое выбранным форматом файла. Эти форматы будут преобразованы в наиболее близкий из имеющихся форматов. 20 Excel 97-2003

Можете поправить код под 2010.
2. Как заставить прописывать имя я нашел где, а вот как заставить спрашивать имя документа перед сохранением?
3. не могу прописать чтоб последние 5 строки под таблицей не сохранялись, их под таблицей 8, нужно чтоб сохранялись 3 первые

Добавлено через 1 час 19 минут
Размер столюцов в сохраненной таблице должен быть:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    Columns("A:A").Select
    Selection.ColumnWidth = 12.86
    Columns("B:B").Select
    Selection.ColumnWidth = 10.86
    Columns("C:C").Select
    Selection.ColumnWidth = 14.43
    Columns("D:D").Select
    Selection.ColumnWidth = 21.71
    Columns("E:E").Select
    Selection.ColumnWidth = 41.29
    Columns("F:F").Select
    Selection.ColumnWidth = 6.86
    Columns("G:G").Select
    Selection.ColumnWidth = 10.29

как (куда) прописать его в этот код

Цитата
Сообщение от Alex77755
Посмотреть сообщение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub Макрос1()
'
' Макрос1 Макрос
' Макрос записан 28.07.2013 (Александр)
    Dim LR
    LR = Cells(Rows.Count, 1).End(xlUp).Row
    Range("A1:G" & LR).Copy
    Workbooks.Add
    ActiveSheet.Paste
    ActiveSheet.Shapes("Блок-схема: ИЛИ 1").Cut
    Range("F" & LR - 1 & ":G" & LR - 1).UnMerge
    Range("F" & LR - 1 & ":G" & LR - 1).ClearContents
    ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
    ChDir "D:"
    ActiveWorkbook.SaveAs Filename:="D:1.xls", FileFormat:=xlNormal, Password _
        :="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:= _
        False
End Sub

Kizirus, опечатка в коде. Для проверки сделайте

Кстати не Вы первый…
Пока это не поправите — далее код писать рано.
Ну а рамки — это тогда проще копировать не данные через массив, а весь диапазон. Ну или отдельно формат.
Вот копирование диапазона в цикле, косяк поправил:

Код
Sub makros()
    Dim lLastRow As Long
    With Range("B7").CurrentRegion
        lLastRow = .Cells(.Cells.CountLarge).Row
    End With

    If lLastRow < 2 Then Exit Sub

    Dim rngSrc As Range
    Set rngSrc = Range("B7:G" & lLastRow)

    For i = 1 To [g3]
        With Range("B7").CurrentRegion
            lLastRow = .Cells(.Cells.CountLarge).Row + 1
        End With

        Dim rngArchiv As Range
        Set rngArchiv = Range("B" & lLastRow & ":G" & (lLastRow + rngSrc.Rows.CountLarge - 1))

        rngSrc.Copy rngArchiv.Cells(1)
    Next
End Sub

Ребята, помогите пожалуйста рядовому бухгалтеру.

Я работаю с таблицей на одном листе, делаю ряд преобразований, потом мне эту таблицу нужно скопировать и перенести на другой лист и вставить начиная с определенной строки. Я автоматически записала макрос, но проблема в том, что он мне все время копирует таблицу в одно и то же место (т.е. в самое начало листа), а мне надо, чтобы он копировал ее именно с той ячейки где у меня курсор находится. Как это сделать подскажите, пожалуйста.

Sub Macro7()

    Rows(«1:1»).Select
    Selection.Delete Shift:=xlUp
    Cells.Select
    Selection.Sort Key1:=Range(«A1»), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    Selection.Copy
    Sheets(«Master»).Select
    ActiveSheet.Paste
End Sub

И еще… Для того чтобы скопировать таблицу я обычно нажимаю Ctrl+A, что конечно же не совсем правильно — он ведь выделяет абсолютно все ячейки листа. А существует какая-то комбинация клавиш, чтобы выделить только диапазон заполненный данными? У меня таблица по длинне и ширине каждый день меняется и я хочу пользоваться макросом который бы копировал все данные из этой таблицы независимо от колличества строк и столбцов на другой лист автоматически.

Зараннее всем огромное спасибо.


Цитата: JennyK от 13.05.2009, 03:59
Ребята, помогите пожалуйста рядовому бухгалтеру.

Привет коллега!

Цитировать
Я работаю с таблицей на одном листе, делаю ряд преобразований, потом мне эту таблицу нужно скопировать и перенести на другой лист и вставить начиная с определенной строки. Я автоматически записала макрос, но проблема в том, что он мне все время копирует таблицу в одно и то же место (т.е. в самое начало листа), а мне надо, чтобы он копировал ее именно с той ячейки где у меня курсор находится. Как это сделать подскажите, пожалуйста.

Sub Macro7()

    Rows(«1:1»).Select
    Selection.Delete Shift:=xlUp
    Cells.Select
    Selection.Sort Key1:=Range(«A1»), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    Selection.Copy
    Sheets(«Master»).Select
    ActiveSheet.Paste
End Sub

Попробуй вот так:

Sub Macro7()
    Dim blok As Object
    Dim nREnd As Long
    Dim nCEnd As Integer, k As Integer

        With ThisWorkbook
        With .ActiveSheet
            Set blok = .Cells(1, 1).CurrentRegion
            nREnd = blok.Rows.Count
            nCEnd = blok.Columns.Count

                .Rows(1).Delete Shift:=xlUp

                Range(.Cells(1, 1), .Cells(nREnd, nCEnd)).Sort Key1:=Range(.Cells(1, 1), .Cells(1, 1)), _
                    Order1:=xlAscending, _
                    Header:=xlGuess, _
                    OrderCustom:=1, _
                    MatchCase:=False, _
                    Orientation:=xlTopToBottom, _
                    DataOption1:=xlSortNormal
            Range(.Cells(1, 1), .Cells(nREnd, nCEnd)).Copy
        End With

        k = 5
        With Worksheets(«Master»)
            .Paste Destination:=.Range(.Cells(k, 1), .Cells(nREnd + k, nCEnd + k))
        End With
    End With
End Sub

ЦитироватьИ еще… Для того чтобы скопировать таблицу я обычно нажимаю Ctrl+A, что конечно же не совсем правильно — он ведь выделяет абсолютно все ячейки листа. А существует какая-то комбинация клавиш, чтобы выделить только диапазон заполненный данными?

А зачем комбинация клавишь? CurrentRegion и дело в шляпе!

ЦитироватьУ меня таблица по длинне и ширине каждый день меняется и я хочу пользоваться макросом который бы копировал все данные из этой таблицы независимо от колличества строк и столбцов на другой лист автоматически.

Зараннее всем огромное спасибо.

Путей к вершине — множество. Этот один из многих!



How to copy and paste data using a Macro in Excel. I’ll show you multiple ways to do this, including across worksheets and workbooks.

Sections:

Simple Copy/Paste

Copy Entire Range

Copy between Worksheets

Copy between Workbooks

Notes

Simple Copy/Paste

Range("A1").Copy Range("B1")

This copies cell A1 to cell B1.

Range(«A1»).Copy is the part that copies the cell.

Range(«B1») is the cell where the data will be copied.

This is a simple one line piece of code and it’s very easy to use.

Notice that there is a space between these two parts of the code.

Copy Entire Range

Range("A1:A5").Copy Range("B1:B5")

Range(«A1:A5»).Copy is the part that copies the range.

Range(«B1:B5») is the range where the data will be copied.

You can also write it like this:

Range("A1:A5").Copy Range("B1")

Notice that the range to where you will copy the data has only a reference to cell B1.

You only have to reference the very first cell to which the range will be copied and the entire range will copy in the cells below there.

NOTE: if you do it like this, you may end up overwriting data and Excel will not give you a warning about this; the data will simply be filled down as far as it needs to go to copy the first range.

Copy between Worksheets

Sheets("Sheet1").Range("A1").Copy Sheets("Sheet2").Range("B1")

This follows the same pattern as the above examples except that we need to tell the macro from which sheet we want to get the data and to which sheet we want to copy the data.

Sheets(«Sheet1»). is placed in front of the first range and that means to get the data from Sheet1, which is the name of a worksheet in the workbook.

Sheets(«Sheet2»). is placed in front of the range to which we want to copy the data and Sheet2 is the name of the worksheet where the data will be copied.

Copy between Workbooks

Workbooks("Copy and Paste Data using Macro VBA in Excel.xlsm").Sheets("Sheet1").Range("A1").Copy Workbooks("Copy and Paste Data using Macro VBA in Excel.xlsm").Sheets("Sheet3").Range("A1")

Here, we follow the above examples and, this time, add a reference to the workbooks from which we want to get the data and to which we want to place the data.

Workbooks(«Copy and Paste Data using Macro VBA in Excel.xlsm»). is the code that says in which workbook we want to place the data. Copy and Paste Data using Macro VBA in Excel.xlsm is the name of the workbook. In this example I used this for both parts, the workbook from which the data comes and where it goes. This allows you to run this macro within a single workbook and still show you how it works. In a real-world example, the first part contains the name of the workbook where you get the data from and the second contains the name of the workbook where you want to place the data.

Read this tutorial to copy values from another workbook, even if it’s closed.

Notes

All examples in the attached workbook have been commented out. Simply remove the single quote from the line of code you want to test and then run the macro.

cf5e0ebf6d62c9ec73df03c55f727e77.jpg

Download the attached file to get these examples in Excel.

Similar Content on TeachExcel

Activate or Navigate to a Worksheet using Macros VBA in Excel

Tutorial: Make a particular worksheet visible using a macro in Excel.
This is called activating a wo…

Get the Name of a Worksheet in Macros VBA in Excel

Tutorial: How to get the name of a worksheet in Excel using VBA and Macros and also how to store tha…

Get the Last Row using VBA in Excel

Tutorial:
(file used in the video above)
How to find the last row of data using a Macro/VBA in Exce…

Remove Dashed Lines from Copy Paste VBA in Excel

Tutorial: How to remove the flashing dashes from a copy/paste range using VBA in Excel; this removes…

Copy one range and paste in another range

Tutorial: Below is a macro, just copy and paste it into a module in your workbook and go from there…

Guide to Combine and Consolidate Data in Excel

Tutorial: Guide to combining and consolidating data in Excel. This includes consolidating data from …

Subscribe for Weekly Tutorials

BONUS: subscribe now to download our Top Tutorials Ebook!

Дублирование таблицы на другой лист нужных столбцов

lebensvoll

Дата: Среда, 05.12.2018, 12:02 |
Сообщение № 1

Группа: Проверенные

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

Замечаний:
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)


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

 

Ответить

boa

Дата: Среда, 05.12.2018, 12:40 |
Сообщение № 2

Группа: Друзья

Ранг: Ветеран

Сообщений: 543


Репутация:

166

±

Замечаний:
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

Дата: Среда, 05.12.2018, 12:49 |
Сообщение № 3

Группа: Проверенные

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

Замечаний:
0% ±


Excel 2010

boa, спасибо за отзывчивость…
Но файл не смог открыть [img][/img]

Цитата

вам надо что бы скопировались изменения, т.е. было-стало?

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


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

 

Ответить

boa

Дата: Среда, 05.12.2018, 12:56 |
Сообщение № 4

Группа: Друзья

Ранг: Ветеран

Сообщений: 543


Репутация:

166

±

Замечаний:
0% ±


2013, 365

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


 

Ответить

boa

Дата: Среда, 05.12.2018, 13:01 |
Сообщение № 5

Группа: Друзья

Ранг: Ветеран

Сообщений: 543


Репутация:

166

±

Замечаний:
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]


 

Ответить

boa

Дата: Среда, 05.12.2018, 13:06 |
Сообщение № 6

Группа: Друзья

Ранг: Ветеран

Сообщений: 543


Репутация:

166

±

Замечаний:
0% ±


2013, 365

можно даже столбцы целиком
[vba]

Код

Range(«A:A,C:D»).Copy Sheets(«Лист2»).Cells(1, 1)

[/vba]


 

Ответить

lebensvoll

Дата: Среда, 05.12.2018, 13:35 |
Сообщение № 7

Группа: Проверенные

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

Замечаний:
0% ±


Excel 2010

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


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

 

Ответить

_Boroda_

Дата: Среда, 05.12.2018, 13:50 |
Сообщение № 8

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
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]


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

 

Ответить

lebensvoll

Дата: Среда, 05.12.2018, 15:50 |
Сообщение № 9

Группа: Проверенные

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

Замечаний:
0% ±


Excel 2010

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

К сообщению приложен файл:

_1.xlsm
(71.5 Kb)


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

 

Ответить

boa

Дата: Среда, 05.12.2018, 15:53 |
Сообщение № 10

Группа: Друзья

Ранг: Ветеран

Сообщений: 543


Репутация:

166

±

Замечаний:
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

 

Ответить

boa

Дата: Среда, 05.12.2018, 16:20 |
Сообщение № 11

Группа: Друзья

Ранг: Ветеран

Сообщений: 543


Репутация:

166

±

Замечаний:
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]


 

Ответить

_Boroda_

Дата: Среда, 05.12.2018, 16:25 |
Сообщение № 12

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
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

 

Ответить

lebensvoll

Дата: Среда, 05.12.2018, 16:44 |
Сообщение № 13

Группа: Проверенные

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

Замечаний:
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

 

Ответить

boa

Дата: Среда, 05.12.2018, 16:58 |
Сообщение № 14

Группа: Друзья

Ранг: Ветеран

Сообщений: 543


Репутация:

166

±

Замечаний:
0% ±


2013, 365

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


Сообщение отредактировал boaСреда, 05.12.2018, 16:59

 

Ответить

lebensvoll

Дата: Среда, 05.12.2018, 17:04 |
Сообщение № 15

Группа: Проверенные

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

Замечаний:
0% ±


Excel 2010

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


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

Сообщение отредактировал lebensvollСреда, 05.12.2018, 17:07

 

Ответить

_Boroda_

Дата: Среда, 05.12.2018, 17:10 |
Сообщение № 16

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
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

 

Ответить

lebensvoll

Дата: Среда, 05.12.2018, 20:38 |
Сообщение № 17

Группа: Проверенные

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

Замечаний:
0% ±


Excel 2010

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


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

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Макрос excel заменить все
  • Макрос excel для копирования таблиц
  • Макрос excel замена текста в ячейках
  • Макрос excel для запуска файла
  • Макрос excel заливка ячеек цветом