Страницы: 1 2 След.
RSS
Копирование форматов
 
Добрый день. Помогите, пожалуйста. Есть некий макрос, который копирует данные из другой книги.  
 
Sub Obnovka()  
     
   Cells(4, 10) = "Íå îáíîâëåí!!!"  
   Cells(4, 10).Font.ColorIndex = 3  
     
     
   Range(Cells(10, 6), Cells(350, 20)).ClearContents ' Äèàïàçîí ÿ÷ååê äëÿ î÷èñòêè  
   ' thisbook - ïåðåìåííàÿ (íàçûâàåì ñàìè), ïîñëå "=" âñòðîåííûå îáúåêòû  
   thisbook = ActiveWindow.Caption  
     
   FileName1 = Cells(2, 4).Value  
   Sheetname1 = Cells(3, 4).Value  
   ' Workbooks.Open FileName - âñòðîåííûå îáúåêòû  
   Workbooks.Open FileName:=FileName1, UpdateLinks:=0  
     
   ' WS - ïåðåìåííàÿ  
   For Each WS In ActiveWorkbook.Worksheets  
       If WS.Name = Sheetname1 Then  
           SheetExists = True  
       End If  
   Next  
         
         
   If SheetExists <> True Then  
       MsgBox "Íåò ëèñòà " & Sheetname1 & " â êíèãå " & FileName1  
       ActiveWorkbook.Close savechanges:=False  
     
       GoTo oblom  
   End If  
         
   Worksheets(Sheetname1).Select  
   thatbook = ActiveWindow.Caption  
       
       
   Range(Cells(14, 2), Cells(10000, 60)).Select  
   Selection.Copy  
   Windows(thisbook).Activate  
   Range("B8").Select  
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _  
       :=False, Transpose:=False  
   Windows(thatbook).Activate  
   Range("B8").Select  
   Selection.Copy  
         
   ActiveWorkbook.Close savechanges:=False  
     
Cells(4, 10) = Date & " " & "â" & " " & Time  
Cells(4, 10).Font.ColorIndex = 5  
 
Range("C10").Select  
     
oblom:  
'ìåòêà äëÿ âûõîäà  
End Sub  
 
Но, копирует он только значения. Подскажите, пожалуйста, где что вставить, чтобы он еще и форматы копировал.  
Заранее благодарна.
 
Если верить макрорекордеру то форматы после значений так    
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _  
       :=False, Transpose:=False  
   Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _  
       SkipBlanks:=False, Transpose:=False  
 
А All  Вам не подходит.
 
Микки, спасибо за ответ! Мне подойдет все, что помимо значений еще и форматы копировать будет ))) А All, случайно из исходного файла формулы не потянет? Если бы Вы мне подсказали куда именно эту штуку вставить, была бы Вам очень признательна.
 
Кажется справилась, спасибо.
 
{quote}{login=Стешка}{date=08.02.2010 12:11}{thema=}{post}Микки, спасибо за ответ! Мне подойдет все, что помимо значений еще и форматы копировать будет ))) А All, случайно из исходного файла формулы не потянет? Если бы Вы мне подсказали куда именно эту штуку вставить, была бы Вам очень признательна.{/post}{/quote}  
В коде после строк    
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _  
:=False, Transpose:=False  
Допишите:  
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _  
SkipBlanks:=False, Transpose:=False  
И все должно помочь    
А алл вытянет формулы.
 
Спасибки, огромное!    
В последнюю попытку я как раз туда и влепила… Толи умнею, толи везет сегодня… )))
 
{quote}{login=Стешка}{date=08.02.2010 12:39}{thema=}{post}Спасибки, огромное!    
В последнюю попытку я как раз туда и влепила… Толи умнею, толи везет сегодня… ))){/post}{/quote}  
Главный специалист по МФСО не может быть глупым по определению, тем паче с двумя высшими одно из котрых иатематическое. Удачи интересная у Вас работка.
 
Стешка, Вы там немного намудрили  
По первому приближению возможно так, но могу ошибаться.  
Игорь67  
 
Option Explicit  
 
Sub Obnovka()  
Dim FileName1 As String, Sheetname1 As String  
Dim SheetExists As Boolean  
 
 
Cells(4, 10) = "Íå îáíîâëåí!!!"  
Cells(4, 10).Font.ColorIndex = 3  
 
 
Range(Cells(10, 6), Cells(350, 20)).ClearContents ' Äèàïàçîí ÿ÷ååê äëÿ î÷èñòêè  
' thisbook - ïåðåìåííàÿ (íàçûâàåì ñàìè), ïîñëå "=" âñòðîåííûå îáúåêòû  
 
'не совсем понятно что хотите  
'thisbook = ActiveWindow.Caption  
'для обращения к заданной книге/активной на текущий момент  
Dim thisbook As Workbook, thisSh As Worksheet  
Dim thatbook As Workbook, WS As Worksheet  
 
Set thisbook = ActiveWorkbook 'теперь можно обращаться к заданной книге по переменной  
Set thisSh = thisbook.ActiveSheet  
 
FileName1 = Cells(2, 4).Value  
Sheetname1 = Cells(3, 4).Value  
' Workbooks.Open FileName - âñòðîåííûå îáúåêòû  
 
 
'открывается новая книга, которая становится активной  
Set thatbook = Workbooks.Open(Filename:=FileName1, UpdateLinks:=0, ReadOnly:=True)  
   
   
' WS - ïåðåìåííàÿ  
'For Each WS In thatbook.Worksheets  
If WS.Name = Sheetname1 Then 'если находим заданный лист  
'операция с листом  
With Sheetname1  
.Range(.Cells(14, 2), .Cells(10000, 60)).Copy 'копируем заданный диапазон  
 
'вставляем данные в назначенный лист заданной книги используя переменную  
thisSh.Range("B8").PasteSpecial Paste:=xlPasteValues  
thisSh.Range("B8").PasteSpecial Paste:=xlPasteFormats  
 
End With  
 
Else:  
MsgBox "Íåò ëèñòà " & Sheetname1 & " â êíèãå " & FileName1  
ActiveWorkbook.Close savechanges:=False  
 
GoTo oblom  
End If  
 
 
 
'Next  
 
ActiveWorkbook.Close savechanges:=False  
 
Cells(4, 10) = Date & " " & "â" & " " & Time  
Cells(4, 10).Font.ColorIndex = 5  
 
Range("C10").Select  
 
oblom:  
'ìåòêà äëÿ âûõîäà  
End Sub
 
{quote}{login=Микки}{date=08.02.2010 12:49}{thema=Re: }{post}{quote}{login=Стешка}{date=08.02.2010 12:39}{thema=}{post}Спасибки, огромное!    
В последнюю попытку я как раз туда и влепила… Толи умнею, толи везет сегодня… ))){/post}{/quote}  
Главный специалист по МФСО не может быть глупым по определению, тем паче с двумя высшими одно из котрых иатематическое. Удачи интересная у Вас работка.{/post}{/quote}  
 
Микки! Спасибо, конечно на добром слове, но это все только звучит красиво, а по сути, мы бухгалтера, только не документы вколачиваем, а корректирующие проводки делаем, причем в Excel-е )))
 
Игорь67! Ну вот, так я и знала, что рано обрадовалась, что умнею.    
«'не совсем понятно что хотите» На сколько я поняла, там сначала диапазон очищается, а потом дата обновления вставляется, чтобы знать, свежие ли данные.  
«'открывается новая книга, которая становится активной» Путь к книге задается другим макросом, чтобы пользователь сам мог выбрать нужный файл и нужный лист в нем. ..    
Согласна, что все криво, но я совсем запуталась. Можно я файлик приложу, может так понятнее будет? Спасибо.
 
Там еще, если один раз данные подтянуть, а потом нужно данные обновить, при этом, если в заданном диапазоне есть объединение ячеек, то работать уже не будет, пока все объединения не снять. (Уже не по теме, но очень хочется, чтобы работало нормально).  Спасибо.
 
Стешка, ни чего не обещаю. Вечером попробую дома глянуть. Только вот когда будет вечер:(  
По крайней мере попробую отписаться смогу что - то сделать или нет. А дальше по загрузке, но пока со временем:(((  
Игорь67
 
Игорь67! Спасибо Вам большое за надежду! Если получиться – Вам будет благодарен отдел из 6 человек. Не получиться – буду продолжать строить пользователей, чтобы ячейки разделяли.    
Спасибо еще раз.
 
Стешка - раз у Вас работает, значит уже нормально:)) Это про выбор файла.  
 
Без примера файла для обработки - сложно судить о работоспособности решения.  
При объединенных ячейках - попробуем очищать в диапазоне ВСЕ через Clear  
Ведь потом мы вставляем форматы:)) По идее - если будут объединенные - после очистки все в исходное, а потом из файла новые данные.  
ЗЫ подключил функцию проверки листа.
 
Igor67! Спасибо огромное! Работать-то оно работает, да только при выполнение определенных условий (таких, как, например, снятие объединения ячеек). А пользователи про эти условия забывают… ну и, естественно, тут же ор начинается «опять все слетело!!!»… А у меня самой не хватает ума, как это обойти. Так что, спасибо Вам наиогромнейшее… Пошла разбираться!!!
 
{quote}{login=Стешка}{date=09.02.2010 09:41}{thema=}{post}  
(таких, как, например, снятие объединения ячеек). А пользователи про эти условия забывают… ну и, естественно, тут же ор начинается «опять все слетело!!!»… А у меня самой не хватает ума, как это обойти. {/post}{/quote}  
Ошибка обычно возникает когда не совпадают диапазоны. Если же убрать объединение ячеек в листе для копирования данных - то по идее вставка с объединенными должна проходить .  
после очистки диапазона для вставки - убираем возможное объединение  
Range(Cells(10, 6), Cells(350, 20)).ClearContents  
Range(Cells(10, 6), Cells(350, 20)).UnMerge
 
Ура! Заработало!!! Сасибо!!!
 
Стеша, а какой вариант заработал? Мне самому интересно.  
Со снятием объединения в диапазоне?  
Range(Cells(10, 6), Cells(350, 20)).UnMerge  
 
Игорь67
 
Игорь67!  Пока заработал последний вариант, я 2 строчки после очистки вставила:  
 
Range(Cells(10, 6), Cells(350, 20)).ClearContents  
Range(Cells(10, 6), Cells(350, 20)).UnMerge  
 
С предыдущим файликом я, пока не до конца разобралась. Он меня пару раз выбил в Debug,  на    
With .Worksheets("Sheetname1") , хотя запрашиваемый лист в файле точно есть.  Я обязательно постараюсь разобраться в чем проблема, только по позже после отчетности. Еще раз спасибо Вам огромное.
 
Стешка, прошу прощения. Ошибся:(( Потестить лень уже было поздно, пошел спать.  
Держите код поправленный. Правильно обращаться - .Sheets(Sheetname1)  
Нажмите ответить с цитированием - и после этого скопируйте код для вставки в Вашу книгу.  
Игорь67  
 
Sub Obnovka()  
   Dim thisbook As Workbook, thisSh As Worksheet  
   Dim thatbook As Workbook, WS As Worksheet  
   Dim Sheetname1 As String  
 
 
   With Application  
       'отлючаем обновление экрана - это убыстрит работу макроса  
       .ScreenUpdating = False  
       'включаем ручной пересчёт формул - это убыстрит работу макроса  
       .Calculation = xlManual  
       'отключаем отображения окон на панели задач на время выполнения макроса  
       .ShowWindowsInTaskbar = False  
       'отключаем отображение сообщений, в том числе и об ошибках  
       .DisplayAlerts = False  
         
         
       Cells(4, 10) = "Не обновлен!!!"  
       Cells(4, 10).Font.ColorIndex = 3  
 
       'так как мы вставляем данные с форматами - лучше полная очистка  
       Range(Cells(10, 6), Cells(350, 20)).Clear    'Contents ' Диапазон ячеек для очистки  
       ' thisbook - переменная (называем сами), после "=" встроенные объекты  
       'thisbook = ActiveWindow.Caption 'не знаю зачем  
 
       Set thisbook = ActiveWorkbook    'теперь можно обращаться к заданной книге по переменной  
       Set thisSh = thisbook.ActiveSheet  
 
 
       FileName1 = Cells(2, 4).Value  
       Sheetname1 = Cells(3, 4).Value  
       ' Workbooks.Open FileName - встроенные объекты  
       'с открываемой книгой  
       With .Workbooks.Open(FileName:=FileName1, UpdateLinks:=0, ReadOnly:=True)  
           'проверяем наличие заданного листа - функция вынесена  
           If WorksheetIsExist(Sheetname1) Then  
               With .Sheets(Sheetname1)  
                   .Range(.Cells(7, 5), .Cells(320, 20)).Copy    'копируем заданный диапазон  
 
                   'вставляем данные в назначенный лист заданной книги используя переменную  
                   thisSh.Range("F10").PasteSpecial Paste:=xlPasteValues  
                   thisSh.Range("F10").PasteSpecial Paste:=xlPasteFormats  
 
               End With  
               .Close savechanges:=False  
 
           Else:  
               MsgBox "Íåò ëèñòà " & Sheetname1 & " â êíèãå " & FileName1  
               .Close savechanges:=False  
 
               GoTo oblom  
           End If  
 
       End With  
 
 
 
       Cells(4, 10) = Date & " " & "в" & " " & Time  
       Cells(4, 10).Font.ColorIndex = 5  
 
       Range("C10").Select  
 
oblom:  
       'метка для выхода  
         
       .DisplayAlerts = True  
       'включаем автоматический пересчёт формул, который отключили в начале макроса  
       .Calculation = xlAutomatic  
       'включаем отображения окон на панели задач, которое отключали в начали макроса  
       .ShowWindowsInTaskbar = True  
       'включаем обновление экрана, который отключили в начале макроса  
       .ScreenUpdating = True  
   End With  
 
 
End Sub
 
Игорь67!    
И Вы еще извиняетесь!!! Да это я должна ниц упасть и благодарить Всевышнего за Вашу помощь!!! Я все вставила, но он теперь меня вот в этом месте выбивает:  
If WorksheetIsExist(Sheetname1)  
Спасибо Вам огромное!
 
Несправедливо: помогает Игорь, а благодарности Всевышнему :-)
 
А Вы функцию WorksheetIsExist скопировали?  
Ведь писал что добавил функцию проверки листа. Вставьте ее в модуль с макросом.  
Да не за благодарности помогаем, но доброе слово оно и собаке приятно:))  
 
'==================  
Private Function WorksheetIsExist(iName$) As Boolean  
'***********************************************'  
'   Дата создания 01/01/2005                    '  
'   Автор Климов Павел Юрьевич                  '  
'   http://www.msoffice.nm.ru                   '  
'***********************************************'  
   On Error Resume Next  
   WorksheetIsExist = IsObject(Worksheets(iName$))  
End Function
 
{quote}{login=Юрий М}{date=09.02.2010 02:51}{thema=}{post}Несправедливо: помогает Игорь, а благодарности Всевышнему :-){/post}{/quote}  
 
А вот и не правда! Игорю я очень благодарна, но поскольку у него кошелька ни в подписи, ни в реквизитах форумчан нет, приходится Всевышнего просить, чтобы он для Игоря что-нибудь хорошее сделал )))
 
{quote}{login=}{date=09.02.2010 02:54}{thema=}{post}А Вы функцию WorksheetIsExist скопировали?  
Ведь писал что добавил функцию проверки листа. Вставьте ее в модуль с макросом.  
Да не за благодарности помогаем, но доброе слово оно и собаке приятно:))  
 
'==================  
Private Function WorksheetIsExist(iName$) As Boolean  
'***********************************************'  
'   Дата создания 01/01/2005                    '  
'   Автор Климов Павел Юрьевич                  '  
'   http://www.msoffice.nm.ru                   '  
'***********************************************'  
   On Error Resume Next  
   WorksheetIsExist = IsObject(Worksheets(iName$))  
End Function{/post}{/quote}  
 
Упс, простите, пожалуйста. Сейчас исправлюсь.
 
Вау!!! Все работает идеально! Тянет что надо, куда надо, и в каком надо формате!  
Игорь67! Вы просто Маг! Спасибо Вам огромное!!!
 
Спасибо Вам огромное!!!  
=================  
Пожалуйста:)  
 
Доработал немного вариант выбора файла. Попробуйте открыть книгу с самым  большим количеством листов. просто не знаю сколько поддерживает Ехс в списке. Теперь имена листов не запоминаются на листе, а сразу создают выпадающий список в ячейке.
 
Igor67, доброе утро! Идея гениальная, спасибо, а то периодически названия листов случайно убивают и приходится файл перевыбирать. Только он меня опять обругал…  
 
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _  
            xlBetween, Formula1:=strList  
 
Что я ему сделала?
 
А попробуйте запустить его не через кнопку, а напрямую из списка макросов (Alt+F8).  
У меня тоже почему то при вызове через Call засбоил:( А на прямую - проходит.  
Если у Вас через диспетчер макросов пройдет - нарисуйте кнопку автофигурой и назначте на нее макрос на прямую:))
 
{quote}{login=Стешка}{date=10.02.2010 09:33}{thema=}{post}  
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _  
            xlBetween, Formula1:=strList  
 
Что я ему сделала?{/post}{/quote}Ничего если я влезу?  
Если strList это именованный диапазон, то нужно так:  
Formula1:="=strList"  
Иначе VBA ищет такую переменную в коде
Bite my shiny metal ass!      
Страницы: 1 2 След.
Читают тему
Наверх