Отлично, спасибо тебе. Я с макросами вообще не дружу, можешь поправить код чтоб при сохранении запрашивал имя файла, так же возможно сохранить ширину колонок при копировании, а то все колонки сжимаются как при стандартном виде. Так же можно сделать чтоб не сохранялись последние 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
Если статья была вам полезна, то буду благодарен, если вы поделитесь ей со своими друзьями с помощью кнопок расположенных ниже.
Спасибо за внимание.



» и все это в течении двух суток.
[/img]

[/img]
[/img]
[/img]
[/img]
СПАСИБО ВАМ ОГРОМНОЕ АЛЕКСАНДР!!!