Отлично, спасибо тебе. Я с макросами вообще не дружу, можешь поправить код чтоб при сохранении запрашивал имя файла, так же возможно сохранить ширину колонок при копировании, а то все колонки сжимаются как при стандартном виде. Так же можно сделать чтоб не сохранялись последние 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 | ||
|
как (куда) прописать его в этот код
Сообщение от Alex77755
Visual Basic | ||
|
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 и дело в шляпе!
ЦитироватьУ меня таблица по длинне и ширине каждый день меняется и я хочу пользоваться макросом который бы копировал все данные из этой таблицы независимо от колличества строк и столбцов на другой лист автоматически.
Зараннее всем огромное спасибо.
Путей к вершине — множество. Этот один из многих!
Дублирование таблицы на другой лист нужных столбцов |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Задача состоит в том, чтобы скопировать определенный диапазон текущего листа, открыть другую книгу, и вставить эти скопированные данные в определенную ячейку, сохранить этот файл и закрыть. Ниже приведен код 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
Если статья была вам полезна, то буду благодарен, если вы поделитесь ей со своими друзьями с помощью кнопок расположенных ниже.
Спасибо за внимание.