Страницы: 1
RSS
копирование листа в другую книгу (или создание или замена данных) кнопка VBA
 
Добрый день!
Помогите разобраться, чувствую себя полным нубом!

Имется одна книга "общий", в которой ведется учет на отдельных листах по годам и общий
и книга "2014" текущего года в которой листы месяца и общий за год.
Задача-кнопка на userform (при открытии книги появляется) "копировать" при нажатии копирует в книгу-"общий" данные за год-из книги 2014(так называется таблица, с которой копируются данные-каждый год-2014,2015 и т.д.) с листа "за год" в лист "2014"(книги "общий" ;) , если такого нет(в книги "общий" ;) , то вставляет лист с названием 2014 и туда данные

поинмаю что задача решается как то так


Код
нажата кнопка "КОПИРОВАТЬ" в книге "2014"  `книги будут так и называться-2014, потом 2015 и т.д.
открыть книгу "обший" 
проверить наличие листа с названием как у активной книги `2014
если есть, то скопировать диапазон данных А1:Н20
если нет, то создать такой лист и скопировать туда данные А1:Н20
сохранить книгу "общий" и закрыть её 
вернуться к книге "2014"
Изменено: viktor595 - 31.10.2014 17:05:02
 
Цитата
viktor595 пишет: поинмаю что задача решается как то так
мне кажется вы начали с обёртки... сначала, может, подумайте лучше над кодом выполняющим всё что вам надо в Sub... а потом его оберните в UserForm... как вариант... иначе объём вашего вопроса очень смахивает на Работу ...
да и не обязательно весь код писать в UserForm... можно из UF вызвать какой-нибудь Sub ... если так легче будет написать - примеров по экспорту инфо из др файлов много на форуме... Поиск в помощь
Изменено: JeyCi - 31.10.2014 17:46:42
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
надо еще добавить проверку, не открыт ли файл "общий"
Код
    'открываем книги
    shname = Replace(ThisWorkbook.Name, ".xlsm", "") ' имя листа как имя книги без расширения
    Set wbBook2 = ThisWorkbook
    Set wbBook1 = Workbooks.Open(sFile1)
    'цикл по листам не надо, можно быстрее
    On Error Resume Next
            wbBook1.Sheets(shname).Activate ' если такого листа нет - будет ошибка
        If Err <> 0 Then
            With wbBook1.Sheets.Add ' тогда и добавим лист
                .Name = shname
            End With
        End If
    On Error GoTo 0
    wbBook1.Sheets(shname).Range(sCopyAddress).Value = wbBook2.Sheets("за год").Range(sCopyAddress).Value
    'закрываем книги
    wbBook1.Close True 'False
F1 творит чудеса
 
Цитата
Максим Зеленский пишет: надо еще добавить проверку, не открыт ли файл "общий"
не смогла устоять - поколдовала с кодом, любезно предоставленным Максимом   8)   ... - соединила всё воедино... только не вставляла эту проверку... ТС может сам вставит?.. если надо... я в принципе обычно и без vba увижу открыта или нет - не мой стиль сильно много проверять  :)   ... вроде работает (при закрытой "Общие" )

P.S. только по коду диапазон для копирования указала чётко как есть - если будет плавающий - нужны изменения в строке где "???"
P.P.S если замена может быть - то... как-то очистите сначала нужный лист, если он есть... (или вставляться всё будет по верху предыдущего текста (лищь бы размеры совпадали, то и чистить предварительно не надо)

успехов ТС
Изменено: JeyCi - 31.10.2014 19:22:42
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Страницы: 1
Наверх