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 и дело в шляпе!

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

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

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



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

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


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

 

Ответить

Задача состоит в том, чтобы скопировать определенный диапазон текущего листа, открыть другую книгу, и вставить эти скопированные данные в определенную ячейку, сохранить этот файл и закрыть. Ниже приведен код VBA.

Sub Название_Макроса()

'Выделить диапазон который необходимо скопировать
Range("A1:F52").Select
'Скопировать то, что выделено
Selection.Copy
ChDir "путь к папке где лежит файл в который необходимо скопировать"
Workbooks.Open Filename:= "Название файла, который находится в папке, путь к которой указан выше"
'Выделить начальную ячейку в которую необходимо вставить скопированные данные
Range("A6").Select
'Вставить данные
ActiveSheet.Paste
'сохранить текущую книгу
ActiveWorkbook.Save
'Закрыть книгу
ActiveWorkbook.Close
End Sub

Вариант 2: В открывшейся книге запускаем макрос, чтобы он открыл нужную нам книгу, скопировал от туда нужные нам данные и вставил в нашу открытую книгу, закрыв файл из которого эти данные были скопированы

Sub Название_Макроса2()
'Открываем файл с которого нужно скопировать данные
Workbooks.Open Filename:="C:Данные.xlsx"

'Скопировать нужный диапазон в открывшейся книге на листе 1
Workbooks("Данные.xlsx").Worksheets("Лист1").Range("A16:E16").Copy
'Активируем нужную нам книгу
Workbooks("Книга1.xlsm").Activate

'Выделяем и вставляем скопированные данные в ячейку А1
ActiveWorkbook.Worksheets("Лист1").Range("A1").Select
ActiveSheet.Paste

'Закрываем книгу откуда мы скопировали данные
Workbooks("Данные.xlsx").Close

End Sub

Еще пример — Скопировать диапазоны данных из активной открытой книги Excel нескольких листов (в нашем примере 3-х листов) в другую книгу, которая хранится в определенном месте. Данные будут вставлены как значения, плюс будут перенесены форматы ячеек.

Sub Копируем_листы_в_другую_книгу()
Dim bookconst As Workbook
Dim abook As Workbook
Set abook = ActiveWorkbook 'присваиваем перменную активной книге
Set bookconst = Workbooks.Open("C:UsersUserDesktop1.xlsx") 'присваиваем перменную книге куда необходимо копировать данные

'переходим в активную книгу откуда необходимо скопировать данные
abook.Worksheets("Лист1").Activate
Range("A1:I23").Copy 'копируем определенный диапазон листа, укажите свой диапазон
bookconst.Worksheets("Лист1").Activate 'активируем лист куда необходимо вставить данные
Range("A1:I23").Select 'встаем на ячейку А1
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'вставляем только форматы ячеек
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
'второй лист
abook.Worksheets("Лист2").Activate
Range("A1:I23").Copy
bookconst.Worksheets("Лист2").Activate
Range("A1:I23").Select 'выделяем диапазон
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'вставляем только форматы ячеек
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
'третий лист
abook.Worksheets("Лист3").Activate
Range("A1:I23").Copy
bookconst.Worksheets("Лист3").Activate
Range("A1:I23").Select 'выделяем диапазон
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'вставляем только форматы ячеек
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
'сохранить текущую книгу
bookconst.Save
'Закрыть книгу
bookconst.Close
abook.Activate

End Sub

Если статья была вам полезна, то буду благодарен, если вы поделитесь ей со своими друзьями с помощью кнопок расположенных ниже.

Спасибо за внимание.

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Excel копировать строку в столбец excel
  • Excel копировать с другого листа макрос
  • Excel копировать размер ячейки
  • Excel копировать при фильтре
  • Excel копировать правила условного форматирования на ячейки

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии