Добрый день! Помогите разобраться, чувствую себя полным нубом!
Имется одна книга "общий", в которой ведется учет на отдельных листах по годам и общий и книга "2014" текущего года в которой листы месяца и общий за год. Задача-кнопка на userform (при открытии книги появляется) "копировать" при нажатии копирует в книгу-"общий" данные за год-из книги 2014(так называется таблица, с которой копируются данные-каждый год-2014,2015 и т.д.) с листа "за год" в лист "2014"(книги "общий" , если такого нет(в книги "общий" , то вставляет лист с названием 2014 и туда данные
поинмаю что задача решается как то так
Код
нажата кнопка "КОПИРОВАТЬ" в книге "2014" `книги будут так и называться-2014, потом 2015 и т.д.
открыть книгу "обший"
проверить наличие листа с названием как у активной книги `2014
если есть, то скопировать диапазон данных А1:Н20
если нет, то создать такой лист и скопировать туда данные А1:Н20
сохранить книгу "общий" и закрыть её
вернуться к книге "2014"
viktor595 пишет: поинмаю что задача решается как то так
мне кажется вы начали с обёртки... сначала, может, подумайте лучше над кодом выполняющим всё что вам надо в Sub... а потом его оберните в UserForm... как вариант... иначе объём вашего вопроса очень смахивает на Работу ... да и не обязательно весь код писать в UserForm... можно из UF вызвать какой-нибудь Sub ... если так легче будет написать - примеров по экспорту инфо из др файлов много на форуме... Поиск в помощь
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
надо еще добавить проверку, не открыт ли файл "общий"
Код
'открываем книги
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
Максим Зеленский пишет: надо еще добавить проверку, не открыт ли файл "общий"
не смогла устоять - поколдовала с кодом, любезно предоставленным Максимом ... - соединила всё воедино... только не вставляла эту проверку... ТС может сам вставит?.. если надо... я в принципе обычно и без vba увижу открыта или нет - не мой стиль сильно много проверять ... вроде работает (при закрытой "Общие" )
P.S. только по коду диапазон для копирования указала чётко как есть - если будет плавающий - нужны изменения в строке где "???" P.P.S если замена может быть - то... как-то очистите сначала нужный лист, если он есть... (или вставляться всё будет по верху предыдущего текста (лищь бы размеры совпадали, то и чистить предварительно не надо)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)