Вырезание, перемещение, копирование и вставка ячеек (диапазонов) в VBA Excel. Методы Cut, Copy и PasteSpecial объекта Range, метод Paste объекта Worksheet.
Метод Range.Cut
Range.Cut – это метод, который вырезает объект Range (диапазон ячеек) в буфер обмена или перемещает его в указанное место на рабочем листе.
Синтаксис
Параметры
Параметры | Описание |
---|---|
Destination | Необязательный параметр. Диапазон ячеек рабочего листа, в который будет вставлен (перемещен) вырезанный объект Range (достаточно указать верхнюю левую ячейку диапазона). Если этот параметр опущен, объект вырезается в буфер обмена. |
Для вставки на рабочий лист диапазона ячеек, вырезанного в буфер обмена методом Range.Cut, следует использовать метод Worksheet.Paste.
Метод Range.Copy
Range.Copy – это метод, который копирует объект Range (диапазон ячеек) в буфер обмена или в указанное место на рабочем листе.
Синтаксис
Параметры
Параметры | Описание |
---|---|
Destination | Необязательный параметр. Диапазон ячеек рабочего листа, в который будет вставлен скопированный объект Range (достаточно указать верхнюю левую ячейку диапазона). Если этот параметр опущен, объект копируется в буфер обмена. |
Метод Worksheet.Paste
Worksheet.Paste – это метод, который вставляет содержимое буфера обмена на рабочий лист.
Синтаксис
Worksheet.Paste (Destination, Link) |
Метод Worksheet.Paste работает как с диапазонами ячеек, вырезанными в буфер обмена методом Range.Cut, так и скопированными в буфер обмена методом Range.Copy.
Параметры
Параметры | Описание |
---|---|
Destination | Необязательный параметр. Диапазон (ячейка), указывающий место вставки содержимого буфера обмена. Если этот параметр не указан, используется текущий выделенный объект. |
Link | Необязательный параметр. Булево значение, которое указывает, устанавливать ли ссылку на источник вставленных данных: True – устанавливать, False – не устанавливать (значение по умолчанию). |
В выражении с методом Worksheet.Paste можно указать только один из параметров: или Destination, или Link.
Для вставки из буфера обмена отдельных компонентов скопированных ячеек (значения, форматы, примечания и т.д.), а также для проведения транспонирования и вычислений, используйте метод Range.PasteSpecial (специальная вставка).
Примеры
Вырезание и вставка диапазона одной строкой (перемещение):
Range(«A1:C3»).Cut Range(«E1») |
Вырезание ячеек в буфер обмена и вставка методом ActiveSheet.Paste:
Range(«A1:C3»).Cut ActiveSheet.Paste Range(«E1») |
Копирование и вставка диапазона одной строкой:
Range(«A18:C20»).Copy Range(«E18») |
Копирование ячеек в буфер обмена и вставка методом ActiveSheet.Paste:
Range(«A18:C20»).Copy ActiveSheet.Paste Range(«E18») |
Копирование одной ячейки и вставка ее данных во все ячейки заданного диапазона:
Range(«A1»).Copy Range(«B1:D10») |
Содержание
- Метод Range.Copy (Excel)
- Синтаксис
- Параметры
- Возвращаемое значение
- Пример
- Поддержка и обратная связь
- Метод Worksheet.Copy (Excel)
- Синтаксис
- Параметры
- Замечания
- Пример
- Поддержка и обратная связь
- Sheets.Copy method (Excel)
- Syntax
- Parameters
- Remarks
- Example
- Support and feedback
- VBA Excel. Копирование данных с одного листа на другой
- Условие задачи по копированию данных
- Решение копированием с листа на лист
- Решение с использованием массивов
- 6 комментариев для “VBA Excel. Копирование данных с одного листа на другой”
- VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)
- Метод Range.Cut
- Синтаксис
- Параметры
- Метод Range.Copy
- Синтаксис
- Параметры
- Метод Worksheet.Paste
- Синтаксис
- Параметры
- Примеры
- 43 комментария для “VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)”
Метод Range.Copy (Excel)
Копирует диапазон в указанный диапазон или в буфер обмена.
Хотите создавать решения, которые расширяют возможности Office на разнообразных платформах? Ознакомьтесь с новой моделью надстроек Office. Надстройки Office занимают меньше места по сравнению с надстройками и решениями VSTO, и вы можете создавать их, используя практически любую технологию веб-программирования, например HTML5, JavaScript, CSS3 и XML.
Синтаксис
выражение.Copy (Destination)
выражение: переменная, представляющая объект Range.
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
Destination | Необязательный | Variant | Указывает новый диапазон, в который будет скопирован заданный диапазон. Если этот аргумент опущен, Microsoft Excel копирует диапазон в буфер обмена. |
Возвращаемое значение
Пример
В следующем примере кода копируются формулы ячеек A1:D4 с листа Sheet1 в ячейки с E5:H8 на листе Sheet2.
В приведенном ниже примере кода проверяется значение столбца D для каждой строки на листе Sheet1. Если значение в столбце D равно «A», вся строка копируется на лист SheetA в следующую пустую строку. Если значение равно «B», строка копируется на лист SheetB.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Метод Worksheet.Copy (Excel)
Копирует лист в другое место в текущей или новой книге.
Синтаксис
expression. Копирование (до, после)
Выражение Переменная, представляющая объект Worksheet .
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
Before | Необязательный | Variant | Лист, перед которым будет размещен скопированный лист. Невозможно указать параметр Before , если указать After. |
After | Необязательный | Variant | Лист, после которого будет размещен скопированный лист. Вы не можете указать After , если укажем значение До. |
Замечания
Если не указать значение «До» или «После», Microsoft Excel создает новую книгу, содержащую скопированный объект Worksheet . Только что созданная книга содержит свойство Application.ActiveWorkbook и содержит один лист. На одном листе сохраняются свойства Name и CodeName исходного листа. Если скопированный лист содержал лист кода листа в проекте VBA, он также переносится в новую книгу.
Выбор массива из нескольких листов можно скопировать в новый пустой объект Workbook аналогичным образом.
Источник и назначение должны находиться в одном экземпляре Excel.Application. В противном случае возникает ошибка среды выполнения 1004: не поддерживается такой интерфейс, если использовался что-то подобное Sheet1.Copy objWb.Sheets(1) , или ошибка среды выполнения 1004: сбой метода копирования класса Worksheet, если использовалось что-то подобное ThisWorkbook.Worksheets(«Sheet1»).Copy objWb.Sheets(1) .
Пример
В этом примере выполняется копирование Sheet1, помещая его после Sheet3.
В этом примере сначала файл Sheet1 копируется в новую пустую книгу, а затем сохраняет и закрывает новую книгу.
В этом примере листы Sheet1, Sheet2 и Sheet4 копируются в новую пустую книгу, а затем сохраняются и закрываются.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Sheets.Copy method (Excel)
Copies the sheet to another location in the workbook.
Syntax
expression.Copy (Before, After)
expression A variable that represents a Sheets object.
Parameters
Name | Required/Optional | Data type | Description |
---|---|---|---|
Before | Optional | Variant | The sheet before which the copied sheet will be placed. You cannot specify Before if you specify After. |
After | Optional | Variant | The sheet after which the copied sheet will be placed. You cannot specify After if you specify Before. |
If you don’t specify either Before or After, Microsoft Excel creates a new workbook that contains the copied sheet.
Example
This example copies Sheet1, placing the copy after Sheet3.
Support and feedback
Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Источник
VBA Excel. Копирование данных с одного листа на другой
Решение задачи по копированию данных с одного листа на другой без использования и с использованием массивов. Вызов из кода VBA Excel других процедур.
Условие задачи по копированию данных
На одном листе расположен список повторяющихся городов с информацией о предприятиях общепита:
Исходная таблица задания №1
Необходимо данные по каждому городу перенести в одну строку на другом листе (таблица обрезана справа):
Часть результирующего списка задания №1
Решение копированием с листа на лист
Это решение значительно проще, чем с использованием массивов, но более медленное. При больших объемах информации обработка может длиться достаточно долго. Решение достигается путем присваивания значений ячеек из таблицы первого листа ячейкам второго листа.
Переменные:
- n1 – количество строк в исходной таблице;
- n2 – номер столбца текущей ячейки исходной таблицы, к которой обращается цикл;
- n3 – номер строки текущей ячейки на втором листе;
- n4 – номер столбца текущей ячейки на втором листе;
- i1 – счетчик цикла For… Next;
- gorod – переменная с наименованием города, предназначенная для контроля за сменой текущего города, который обрабатывается циклом.
Решение с использованием массивов
Циклы в массивах работают очень быстро, но решение с ними может быть сложнее, чем при простом присваивании значений одних ячеек другим. В этом примере для упрощения кода две процедуры записаны отдельно и в нужные моменты вызываются для исполнения.
Подпрограммы Kopirovanie и Vstavka используются в цикле For. Next процедуры Resheniye2 по два раза, поэтому их коды вынесены за пределы процедуры Resheniye2 и вызываются по мере необходимости.
Переменные:
- massiv1 – его элементам присваиваются значения ячеек исходной таблицы;
- massiv2 – одномерный массив, заполняемый данными из переменной txt1;
- massiv3 – двумерный массив, заполняемый данными из одномерного массива massiv2 и используемый для вставки очередной строки на второй лист;
- txt1 – сюда копируются через разделитель значения элементов массива massiv1, предназначенные для заполнения очередной строки на втором листе;
- n1 – количество строк в исходной таблице;
- n2 – количество столбцов в исходной таблице;
- n3 – номер текущей строки на втором листе;
- n4 – количество столбцов текущей строки на втором листе (соответствует количеству элементов массива massiv2);
- i1, i2, i3 – счетчики цикла For… Next;
- gorod – переменная с наименованием города, предназначенная для контроля за сменой текущего города, который обрабатывается циклом.
Переменные, использующиеся более чем в одной процедуре, объявлены как глобальные в разделе Declarations программного модуля.
6 комментариев для “VBA Excel. Копирование данных с одного листа на другой”
Классно! Авторам — уважение! Толково, без соплей, со знанием дела.
Можете подсказать синтаксис такой проблемы: таблица 10 строк, 8 столбцов, если первая ячейка не пустая, скопировать на другой лист этой книги, а лучше — в отдельную книгу всю строку таблицы. Потом то же самое со строкой ниже, и так до последней. Потом пустые строки надо скрыть.
Это сложно?
Заранее спасибо за ответ.
Привет, Илья!
Для диапазона A1:H10:
Здравствуйте, Евгений! Огромное Вам спасибо! Потраченное время и желание помочь дорогого стОит, это большая редкость в наше время, поверьте. Ваш макрос — не совсем то, что мне нужно (например, новую книгу открывать не нужно, она уже есть, нужно просто на неё (и нужный лист) сослаться). Месторасположение ячеек в книгах не совпадает, строки тоже (27-я строка первой книги вставляется в 6-ю второй, т.е., например D27 в E6). И самое главное — вторая книга заполняется с нарастающим итогом. Т.е с первой книги берутся данные, вносятся во вторую, потом первая заполняется по новой, эти данные вносятся во вторую, но уже ниже и т.д.
Но, в любом случае, огромное спасибо, Вы дали направление, куда двигаться, буду думать ):
Добрый день, Евгений!
Существует способ автоматической передачи (копирования) данных из одного файла эксель в другой методом =…
А метод автоматической передачи (копирования) цвета имеется?
Подскажите пожалуйста!
Источник
VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)
Вырезание, перемещение, копирование и вставка ячеек (диапазонов) в VBA Excel. Методы Cut, Copy и PasteSpecial объекта Range, метод Paste объекта Worksheet.
Метод Range.Cut
Синтаксис
Параметры
Параметры | Описание |
---|---|
Destination | Необязательный параметр. Диапазон ячеек рабочего листа, в который будет вставлен (перемещен) вырезанный объект Range (достаточно указать верхнюю левую ячейку диапазона). Если этот параметр опущен, объект вырезается в буфер обмена. |
Для вставки на рабочий лист диапазона ячеек, вырезанного в буфер обмена методом Range.Cut, следует использовать метод Worksheet.Paste.
Метод Range.Copy
Синтаксис
Параметры
Параметры | Описание |
---|---|
Destination | Необязательный параметр. Диапазон ячеек рабочего листа, в который будет вставлен скопированный объект Range (достаточно указать верхнюю левую ячейку диапазона). Если этот параметр опущен, объект копируется в буфер обмена. |
Метод Worksheet.Paste
Синтаксис
Метод Worksheet.Paste работает как с диапазонами ячеек, вырезанными в буфер обмена методом Range.Cut, так и скопированными в буфер обмена методом Range.Copy.
Параметры
Параметры | Описание |
---|---|
Destination | Необязательный параметр. Диапазон (ячейка), указывающий место вставки содержимого буфера обмена. Если этот параметр не указан, используется текущий выделенный объект. |
Link | Необязательный параметр. Булево значение, которое указывает, устанавливать ли ссылку на источник вставленных данных: True – устанавливать, False – не устанавливать (значение по умолчанию). |
В выражении с методом Worksheet.Paste можно указать только один из параметров: или Destination, или Link.
Для вставки из буфера обмена отдельных компонентов скопированных ячеек (значения, форматы, примечания и т.д.), а также для проведения транспонирования и вычислений, используйте метод Range.PasteSpecial (специальная вставка).
Примеры
Вырезание и вставка диапазона одной строкой (перемещение):
Вырезание ячеек в буфер обмена и вставка методом ActiveSheet.Paste:
Копирование и вставка диапазона одной строкой:
Копирование ячеек в буфер обмена и вставка методом ActiveSheet.Paste:
Копирование одной ячейки и вставка ее данных во все ячейки заданного диапазона:
43 комментария для “VBA Excel. Вырезание, копирование и вставка ячеек (диапазонов)”
Странно, что не рассмотрено копирование ячеек, которые Cells.
Например, следующая строка копирует ячейку A1 в B2
а эта делает тоже самое, но демонстрирует,
как можно добавить размер и смещение:
Здравствуйте!
Скажите, как можно копировать на Лист 1, а вставить на Лист 2 диапазон ячеек целиком, либо отсортированный по 1 признаку диапазон(например по какому-то определенному значению, скажем, числу «500» в одном столбце Листа 1)?
Привет, Максим!
Вот пример сортировки таблицы по значению 500 в первом столбце на «Лист6» и копирования диапазона с «Лист6» на «Лист4» :
Спасибо большое, только я, наверно, неправильно описал ситуацию.
Сперва из эталонной таблицы Лист 1 копируем весь список на существующий Лист4.
Затем, пропускаем шапку, и, начиная со строки7, уже на Лист4 ищем строку, у которой в столбце 5 стоит число 500.
Вырезаем эту строку и вставляем на позицию строки 7. т.е первая после шапки.
Ищем следующую строку — вырезаем, потом вставляем на позицию строки 7+1=8 и т.д.
В итоге оставим только те строки, у которых в столбце 5 стоит число «500», остальные удаляются строки.
(пробовал менять местами строки в предыдущем коде, ошибок нет, копирует, переходит на лист 4, но строки на нем не удаляет, циклы пошагово проходят, но ничего не изменяется.)
Источник
I am pretty new to VBA and am trying to automate a process at work where I need to extract select cells from an array of 6 sheets and consolidate them in another sheet. The code I have works, but is kinda «clunky» — I am using the excel copy and paste functions, but can’t seem to find a good solution away from the copy-and-paste function. And when I try to add a paste special function, I get an 1004 error. Would love advice on optimising this!
For each sheet to be copied, cells are marked in the first column with «1», «0» or left blank — if the cells are «1» or «0», I copy the other cells in the row to the consolidated sheet. There are some gaps in between rows, so I opted to use a For-Loop instead of a Do-While statement.
I’ve attached the code as follows:
Sub TEST()
Dim i As Integer 'copying row counter for each sheet to be copied
Dim j As Integer 'pasting row counter in consolidated sheet
Dim cal(1 To 6) As String 'copied sheetname
cal(1) = "Picks"
cal(2) = "Eats"
cal(3) = "Night Out"
cal(4) = "Active"
cal(5) = "Family"
cal(6) = "Arts"
Dim x As Integer
Dim y As Integer 'column for date
Dim z As Integer 'max row to run till
y = 1 'column checked in each sheet where condition for copying is met
z = 300 'number of rows to check in each sheet
j = 1
For x = 1 To 6
For i = 1 To z
If Sheets(cal(x)).Cells(i, y) = "0" Or Sheets(cal(x)).Cells(i, y) = "1" Then
Sheets(cal(x)).Select
Range(Sheets(cal(x)).Cells(i, 2), Sheets(cal(x)).Cells(i, 10)).Select
Selection.Copy
Application.Goto ActiveWorkbook.Sheets(Consolidated).Cells(j, 1)
ActiveSheet.Paste
Else
j = j - 1
End If
j = j + 1
Next i
Next x
End Sub
Again I would love to optimise this code, using another method instead of copy-and-paste. Also I tried:
Application.Goto ActiveWorkbook.Sheets(Consolidated).Cells(j, 1)
ActiveSheet.PasteSpecial Operation:=xlPasteValues
Which resulted in a 1004 error. Would love to know what went wrong.
Макрос копирования данных с разных листов на один лист |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
AcademiC Пользователь Сообщений: 43 |
Уважаемые форумчане, я заранее знаю, что вопрос обозначенный в теме, задавался уже не один десяток раз… и обсуждался уже пару сотен раз… НО, я честно прочитал множество веток… я второй день не отрывая задницу от стула и обнявшись с книжкой Уокенбаха пытаюсь решить эту, для многих, видимо, тривиальную задачу… я сдаюсь, я не понимаю КАК? Логика формул Excel в VBA не работает, ну т.е. работает но не зеркально… если бы можно было решить эту задачу не прибегая к VBA — я бы решил… но, тут нужен VBA, а силы мои кончились… И хотя постановка задачи тривиальна, но все же: Пожалуйста, помогите. P.S. Архив разбит на 2 части. |
AcademiC Пользователь Сообщений: 43 |
Вторая часть файла (архив) |
Hugo Пользователь Сообщений: 23251 |
б) for each sh in arr Файлы не смотрел. |
AcademiC Пользователь Сообщений: 43 |
б) Я правильно понимаю логику? …а sh какой тип определить? |
Hugo Пользователь Сообщений: 23251 |
Вот, вполне человеческая логика Sub tt() Остаются вопрос — а не надо ли «убивать» формулы? |
Hugo Пользователь Сообщений: 23251 |
Извините, не уследил… Sub tt() |
Hugo Пользователь Сообщений: 23251 |
Справедливо, сам сколько раз поправлял With Sheets(«Лист2») |
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
AcademiC, так дело не пойдёт: Вы полагаете, что, если нельзя 500К, то можно пять по 100? Не верю, что для решения Вашего вопроса нельзя создать небольшой файл-пример. |
Hugo Пользователь Сообщений: 23251 |
Т.е. вот так с «ловлей блох» (ещё одну точку добавил): Sub tt() |
Hugo Пользователь Сообщений: 23251 |
Юрий, справедливо. |
AcademiC Пользователь Сообщений: 43 |
Юрий М Прошу прощения, хотел как лучше… Hugo А запороленные листы могут стать проблемой для работы макроса? Специально блокировал листы для изменения, чтобы пользователи не меняли структуру отчета… Спасибо огромное за помощь, остался только один вопрос — не могу понять что поправить в макросе, чтобы он на листе «Лист2» не затирал шапку…? Сейчас данные вставляются не с 3-ей строчки а со второй + форматирование первой строки (заливка) остается, а вот вся внутрянка (формулы) пропадает… Что я сделал опять не так? Sub tt() |
AcademiC Пользователь Сообщений: 43 |
Так, простите… данные с листа и так очищаются — я туплю вставляя блок до коммента «‘заполняем лист данными:»… Извините. |
Hugo Пользователь Сообщений: 23251 |
Да, неприятная мелочь. Просто я тестил на листе с уже скопированными данными, не заметил, что на пустом будет такой эффект… With Sheets(«Лист2») Или ставить проверку на позицию последней заполненной строки, или иначе делать определение этого диапазона… Но зачем? |
AcademiC Пользователь Сообщений: 43 |
Hugo …не выходит цветок каменный… Файл во вложении. Если оставить .[a3] = Now —> затирает часть шапки…при повторном запуске появляется пустая строка… |
Hugo Пользователь Сообщений: 23251 |
Вот так работает: Sub tt() Зачем оффсет меняли? |
AcademiC Пользователь Сообщений: 43 |
Уважаемые форумчане, можете еще раз по коду помочь — я правильно понимаю логику? Sub tt() ‘ вводим переменную «arr», которая явно не определена, т.е. с типом «variant» Application.ScreenUpdating = False ‘ запрещаем обновление экрана во время работы подпрограммы (sub) для ускорения выполненя arr = Split(«Гор Каш Вол Нау») ‘ в справке тьма-тьмущая вариантов «split», я могу только догадываться — это какое-то явное указание листов, которые будут использоваться в данной процедуре? With Sheets(«Лист2») ‘ указание одного объекта — «Лист2» над которым планируется совершать ряд операций? .[A2] = Now ‘ Что-то типа указания ячейки А2 как ActiveCell? .Range(.[AZ3], .Range(«A» & .Rows.Count).End(xlUp)).ClearContents ‘ понимаю, что очищает данные на листе «Лист2», но логики работы не понимаю… почему начинаем очищать не с А3, а с AZ23? Почему метод «.End» с константой «xlUp»… не понимаю логики… мы считаем заполненный ячейки снизу? End With ‘ «sh» — но ведь переменная «sh» неопределена… как это вообще работает? With Sheets(sh) ‘ «Offset(2)» — свойство Range, которое задает смещение на 2 строки вниз? End With |
AcademiC Пользователь Сообщений: 43 |
{quote}{login=Hugo}{date=17.06.2012 11:40}{thema=}{post}Вот так работает |
Hugo Пользователь Сообщений: 23251 |
Split — это разбиваем строку в массив. По умолчанию, если не указано, то по пробелам. Получаем массив имён листов. .Range(.[AZ3], .Range(«A» & .Rows.Count).End(xlUp)).ClearContents — всё правильно поняли. «sh» не определена — да, забыл. Можете написать С Offset всё верно, кроме того, что нужно 1, а не 2. А так логика вроде нормальная, всё просто и обоснованно |
Hugo Пользователь Сообщений: 23251 |
Вернее Now — это не дата, а именно «сейчас», т.е. дата со временем. Но не суть, форматом показывает дату |
AcademiC Пользователь Сообщений: 43 |
{quote}{login=Hugo}{date=18.06.2012 12:21}{thema=}{post}А так логика вроде нормальная, всё просто и обоснованно :){/post}{/quote} …осталось только понять ЧТО и главное СКОЛЬКО надо скурить, чтобы во всем этом разобраться… формулы, даже замороченные, в Excel как-то попроще давались… |
Hugo Пользователь Сообщений: 23251 |
Мне наоборот. |
AcademiC Пользователь Сообщений: 43 |
Hugo, можно final qustion? Немного видоизменил условия сбора информации — макрос находится в другом файле в той же папке, где и файл «Отчет». Методом «тыка» смог обратиться к файлу «Отчет», чтобы макрос собирал данные из него… а как указать, чтобы после сбора данных копирование происходило не в файл «Отчет, а в тот файл, в котором находится макрос (файл с макросом назвал «Сводный.xlsm»? Конкретно: Sub Sammary2() Макрос прерывается с ошибкой на 9 строке («With Sheets(«Сводный»)»), что логично, так как в файле Отчет.xls (из которого и собираем данные по листам) нет такого листа как «Сводный», этот лист находится в файле Сводный.xlsm. |
Hugo Пользователь Сообщений: 23251 |
Вообще-то достаточно указать книгу: With ThisWorkbook.Sheets(«Сводный») Но есть ещё замечания — и по открытию книги (я бы сделал иначе), и по .Rows.Count — теоретически и тут может быть брак. |
Hugo Пользователь Сообщений: 23251 |
Вот вроде так может быть, без проверки: Sub Sammary3() Manager_lists = Split(«Гор Каш Вол Нау») ‘получаем массив названий Application.ScreenUpdating = False With sh_sv ChDir «H:WORKОтчет» ‘это в общем не нужно, но и не мешает With Workbooks.Open(«H:WORKОтчет.xls») ‘открываем файл отчёта Application.ScreenUpdating = True В этом коде нет ориентации на активную книгу/лист, что надёжнее. |
Guest Гость |
#25 18.06.2012 12:53:13 Hugo, спасибо все работает. …буду разбираться в коде и применяемых методах… |