Новости:

Название темы должно отражать суть задачи.
Темы типа "ПОМОГИТЕ!!!", "Срочно!" и т.п. будут удаляться без объяснения причин

Главное меню

Как скопировать данные из-за крытой книги вместе с формулами и форматами. в ниже

Автор Tow, 28.01.2021, 02:27:55

« назад - далее »

Tow

Помогите в следующем вопросе. Как скопировать данные из-за крытой книги вместе с формулами и форматами. в ниже приведенном коде?

Sub Get_Value_From_Close_Book()
   Dim sShName As String, sAddress As String, vData
   'Отключаем обновление экрана
   Application.ScreenUpdating = False
   Workbooks.Open "C:\Documents and Settings\Книга1.xls" '"
   sAddress = "A1:C100" 'или одна ячейка - "A1"
   'получаем значение
   vData = Sheets("Лист1").Range(sAddress).Value
   ActiveWorkbook.Close False
   'Записываем данные на активный лист книги,
   'с которой запустили макрос
   If IsArray(vData) Then
       [A1].Resize(UBound(vData, 1), UBound(vData, 2)).Value = vData
   Else
       [A1] = vData
   End If
   'если надо копировать ячейки с форматами,
   'то можно использовать стандартные методы копирования вставки
   'objCloseBook.Sheets("Лист1").Range(sAddress).Copy
   '[A1].PasteSpecial xlPasteValues  'вставляем значения
   '[A1].PasteSpecial xlPasteFormats 'вставляем форматы
   'Включаем обновление экрана
   Application.ScreenUpdating = True
End Sub


[admin]Коды оформляйте тегами VBCode. п.п. 4.25 Правил форума[/admin]

Дмитрий Щербаков(The_Prist)

#1
Цитата: Tow от 28.01.2021, 02:27:55вместе с формулами и форматами
а Вы комментарии прямо в коде видите? Вот там прям приведены строки, которые надо использовать:
'если надо копировать ячейки с форматами,
'то можно использовать стандартные методы копирования вставки
objCloseBook.Sheets("Лист1").Range(sAddress).Copy
[A1].PasteSpecial xlPasteValues  'вставляем значения
[A1].PasteSpecial xlPasteFormats 'вставляем форматы

эти строки надо раскомментировать как я показал чуть выше, а вот эти строки можно тогда удалить:
If IsArray(vData) Then
       [A1].Resize(UBound(vData, 1), UBound(vData, 2)).Value = vData
   Else
       [A1] = vData
   End If

И все.
Хотя тут еще надо тогда вот эту строку
ActiveWorkbook.Close False
перенести в конец. Ну и добавить вставку формул. Хотя в этом случае можно вообще иначе все написать.
В общем код должен выглядеть так:
Sub Get_Value_From_Close_Book()  
   Dim sShName As String, sAddress As String
    Dim objCloseBook As Workbook, rRes As Range
    Set rRes = Range("A1") 'ячейка результата
   'Отключаем обновление экрана  
   Application.ScreenUpdating = False  
   Set objCloseBook = Workbooks.Open("C:\Documents and Settings\Книга1.xls")
   sAddress = "A1:C100" 'или одна ячейка - "A1"  
   objCloseBook.Sheets("Лист1").Range(sAddress).Copy rRes
   objCloseBook.Close False
   'Включаем обновление экрана  
   Application.ScreenUpdating = True  
End Sub


P.S. Коды оформляйте тегами VBCode. п.п. 4.25 Правил форума
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...


Яндекс.Метрика Рейтинг@Mail.ru