Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2013, 08:09   #1
Depressive
Пользователь
 
Регистрация: 09.05.2011
Сообщений: 22
По умолчанию Вопрос о копировании ячеек в VBA

Здравствуйте!

В рабочей книге есть лист "ПРИХОД", его первая строка содержит заголовки колонок и управляющие кнопки.
Некий макрос, по неким условиям создает новый лист, например, "ИЖЕВСК", надо скопировать первую строку из листа "ПРИХОД" в лист "ИЖЕВСК" и установить в последнем такие же ширины колонок и форматы ячеек, как и в исходном листе "ПРИХОД".

При простом:
Код:
Sheets("ПРИХОД").Select
Sheets("ПРИХОД").Rows(1).Copy
Sheets("ИЖЕВСК").Select
Sheets("ИЖЕВСК").Rows(1).Select
Sheets("ИЖЕВСК").Paste
в лист "ИЖЕВСК" также копируются кнопки, что недопустимо, и не копируются ширины столбцов

В результате написал работающую, но жутко громоздкую конструкцию:
Код:
Sub copyHeader()
    Dim ss As String
    Dim ns As String
    Dim srcSh As Worksheet
    Dim newSh As Worksheet

    ss = "ПРИХОД"   ' имя исходного листа
    ns = "ИЖЕВСК"   ' имя нового листа

    Set srcSh = Sheets(ss)  ' исходный лист
    Set newSh = Sheets(ns)  ' новый лист

    newSh.Select    ' переход на новый лист

    newSh.Rows(1).RowHeight = 30    ' высота первой строки заголовка

    For i = 1 To 12  ' цикл по полям заголовка
        newSh.Cells(1, i).Value = srcSh.Cells(1, i).Value   ' копируем значение

        newSh.Cells(1, i).NumberFormat = "@"    ' текстовый формат

        newSh.Cells(1, i).Borders(xlEdgeLeft).Weight = xlThin   ' границы
        newSh.Cells(1, i).Borders(xlEdgeRight).Weight = xlThin
        newSh.Cells(1, i).Borders(xlEdgeTop).Weight = xlThin
        newSh.Cells(1, i).Borders(xlEdgeBottom).Weight = xlThick

        newSh.Cells(1, i).Interior.ColorIndex = srcSh.Cells(1, i).Interior.ColorIndex   ' фоновый цвет

        newSh.Cells(1, i).HorizontalAlignment = xlCenter    ' выравнивание
        newSh.Cells(1, i).VerticalAlignment = xlCenter

        newSh.Cells(1, i).Font.Name = "Arial"   ' гарнитура
        newSh.Cells(1, i).Font.FontStyle = "bold"
        newSh.Cells(1, i).Font.Size = 10    ' кегль

        newSh.Columns(i).ColumnWidth = srcSh.Columns(i).ColumnWidth ' ширина колонки
    Next i
    newSh.Range("A2").Select    ' идем на A2 для вставки
End Sub
Пожалуйста посоветуйте, как проще скопировать всю первую строку (исключая посторонние элементы на ней - кнопки) на новый лист.
Хотелось бы упростить цикл с последовательным копированием их свойств ячеек на новый лист.

Заранее благодарю!

Последний раз редактировалось Depressive; 03.04.2013 в 08:15.
Depressive вне форума Ответить с цитированием
Старый 03.04.2013, 09:30   #2
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Depressive, попробуйте использовать вместо команды "Paste" команду "PasteSpecial".
Скрипт вне форума Ответить с цитированием
Старый 03.04.2013, 09:38   #3
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

если правильно понял, примерно так:
Код:
Sub copyHeader()
    Dim ss$, ns$, srcSh As Worksheet, newSh As Worksheet

    ss = "ПРИХОД"   ' имя исходного листа
    ns = "ИЖЕВСК"   ' имя нового листа

    Set srcSh = Sheets(ss)  ' исходный лист
    Set newSh = Sheets(ns)  ' новый лист
    
    srcSh.Rows("1:1").Copy  ' копируем строку из листа приход
    newSh.Rows("1:1").PasteSpecial Paste:=xlPasteValues ' вставляем значения в строку в лист ижевск
    newSh.Rows("1:1").PasteSpecial Paste:=xlPasteFormats    ' вставляем форматы в строку в лист ижевск
    newSh.Rows("1:1").PasteSpecial Paste:=xlPasteColumnWidths   ' вставляем ширину столбцов в лист ижевск
    Application.CutCopyMode = False ' убираем выделения после копирования из листа приход
    
    newSh.Activate
    newSh.Range("A1").Select
End Sub
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 04.04.2013, 16:32   #4
Depressive
Пользователь
 
Регистрация: 09.05.2011
Сообщений: 22
По умолчанию

Огромное спасибо, staniiislav!
Как раз то, что нужно!
Depressive вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA,сумма ячеек Symple me Microsoft Office Excel 4 31.01.2013 13:53
Изменение ячеек при копировании Ellienn Microsoft Office Excel 3 30.08.2011 13:51
Выделение ячеек в VBA Munchkin Microsoft Office Excel 2 08.06.2011 17:06
вопрос О копировании значения в Exel 2007 vist17 Microsoft Office Excel 1 07.07.2009 19:21
Вопрос о копировании ячеек с данными gege Microsoft Office Excel 4 11.11.2008 09:29