Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/47: Рейтинг темы: голосов - 47, средняя оценка - 4.79
3 / 3 / 1
Регистрация: 21.11.2012
Сообщений: 31

Программный переход между книгами Exel

21.11.2012, 18:29. Показов 9797. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, пожалуйста, в решении одного вопроса. Есть 2 открытые книги Exel. Нужно скопировать диапазон ячеек одной книги и вставить в нужный лист другой книги (программно). В Книге1 создала командную кнопку, т.е. процедура пишется в Книге1, вставку нужно сделать в книге2. Заранее благодарна.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.11.2012, 18:29
Ответы с готовыми решениями:

Переключение между книгами
Здравствуйте, как можно обойтись без активизации книги. Работаю с тремя книгами , т.к. без Activate не работает. For i = 2 To...

Переключение между книгами
Открыты 2 книги. Одна - источник данных (название всегда разное). Другая - приемник. Название всегда "Книга1". Как переключиться...

Отличия между книгами
Добрый день! Решил прикупить себе Искусство программирования Кнута. Так вот... не могу понять в чем отличия серии и...

7
 Аватар для mc-black
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
21.11.2012, 18:39
В модуль листа с кнопкой свтавить код:
Visual Basic
1
2
3
Private Sub CommandButton1_Click()
    Me.[B2:E5].Copy Workbooks("Книга2.xls").Worksheets("Лист1").[B2].Paste
End Sub
1
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
21.11.2012, 19:08
Пример использования объектных переменных. Может будет удобнее.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub Procedure_1()
 
    Dim bkBook_1 As Excel.Workbook
    Dim bkBook_2 As Excel.Workbook
    
    'Даём имена книгам. Через эти имена можно обращаться к книгам.
    Set bkBook_1 = ActiveWorkbook
    Set bkBook_2 = Workbooks(2)
 
    bkBook_1.Worksheets(1).Range("A1").Copy Destination:=bkBook_2.Worksheets(1).Range("A1")
 
End Sub
1
117 / 31 / 2
Регистрация: 16.11.2012
Сообщений: 65
22.11.2012, 08:27
Лучший ответ Сообщение было отмечено как решение

Решение

Также, после выполнения указанного кода может появиться сообщение нужно ли очищать буфер обмена.
Программно очистить его можно так:

Visual Basic
1
2
3
4
5
6
7
8
9
'Это в начало модуля
Private Declare Function OpenClipboard Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
 
'Это после вашего кода
OpenClipboard Application.hWnd
EmptyClipboard
CloseClipboard
можно перенести данные без использования буфера обмена, просто перебором:

Visual Basic
1
2
3
4
5
6
7
8
9
Workbooks.Open (ThisWorkbook.Path & "\2.xls") ' открываем вторую книгу
 
For x = 1 To 20 ' перебираем ячейки в первой книге и заполняем их значения во вторую
    For y = 1 To 20
    Workbooks("2.xls").Sheets(1).Cells(x, y) = ThisWorkbook.Sheets(1).Cells(x, y)
    Next
Next
 
Workbooks("2.xls").Close True ' закрываем вторую книгу с сохранением
3
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
22.11.2012, 10:45
Цикл тут не нужен
Visual Basic
1
2
Workbooks("2.xls").Sheets(1).Cells(1,1).resize(20,20).value = _
    ThisWorkbook.Sheets(1).range("A1:T20").value
В примере использованы разные способы определения диапазона.
2
3 / 3 / 1
Регистрация: 21.11.2012
Сообщений: 31
22.11.2012, 13:14  [ТС]
Спасибо форумчанам за варианты решения. Воспользовалась советом Скрипта. Есть еще одна тонкость, о которой сразу не догадалась, а именно: содержание копируемого диапазона ячеек представляет собой формулы, но вставить нужно значения. В ручном режиме это действие делается: Специальная вставка - Вставить значения. А у меня вставляются формулы. Привожу неполный текст процедуры.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub CommandButton1_Click()
   ...
    Dim isk As Variant
    'isk-Выбранная в календаре дата
    isk = Left(Range("F1"), 5)
    Dim bkBook_1 As Excel.Workbook
    Dim bkBook_2 As Excel.Workbook
    Set bkBook_1 = ThisWorkbook
    Set bkBook_2 = Workbooks("Анализ работы мобильных терминалов за " & n_mm & ".xls")
    bkBook_2.Worksheets(2).Activate
    ActiveWorkbook.Sheets.Item(2).Select
    For i = 0 To 32
    ' Перебираю ячейки с датами
        s = ActiveWorkbook.Sheets.Item(2).Range("F3").Offset(0, i).Value
        If s = isk Then ' если совпадает, делаю вставку данных в нужный столбец
          bkBook_1.Worksheets(1).Range("D1:D122").Copy Destination:=bkBook_2.Worksheets(2).Range("F4").Offset(0, i)
          Exit For
        End If
    Next i
    bkBook_1.Worksheets(5).Range("A1:H100").ClearContents
   
End Sub
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
22.11.2012, 13:42
Использование копирования для переноса данных:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub Procedure_1()
 
    Worksheets(1).Range("A1").Copy
    
    Worksheets(2).Range("A1").PasteSpecial xlPasteValues
    
    'Отключение режима копирования
    '(в режиме копирования пунктирные границы вокруг копироуемых ячеек).
    Application.CutCopyMode = False
    
End Sub
Примечание: чтобы узнать больше о команде PasteSpecial, в VBA в коде поставьте курсор на PasteSpecial и нажмите клавишу F1. Появится справка по данной команде.


Перенос данных без использования копирования:

Если нужно просто перенести данные, например, без форматирования (без учёта размера шрифта, цвета шрифта и т.д.), то надо вот так данные переносить:
Visual Basic
1
2
3
4
5
Sub Procedure_1()
 
    Worksheets(2).Range("A1").Value = Worksheets(1).Range("A1").Value
 
End Sub
1
3 / 3 / 1
Регистрация: 21.11.2012
Сообщений: 31
22.11.2012, 14:01  [ТС]
Спасибо за помощь! Попробовала вариант Казанского и Скрипта, работает и тот и другой вариант.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.11.2012, 14:01
Помогаю со студенческими работами здесь

Обмен данными между книгами
Добрый день. Есть две книги эксель. Одна рабочая, с которой начинается разработка, другая справочная и расчетная. Необходимо при...

Есть ли разница между книгами Троелсена C# 5.0 и 6.0?
Или вообще желательно прочитать все книги? и что значит "выучить язык"? сколько % языка нужно знать, что бы смело говорить "я знаю...

Связь между разными книгами ексель
Здравствуйте, нужно чтоб в одной книге ексель отображалось все, что вбивается и записывается в другой книге ексель. Ставил такую формулу...

Ошибка обновления связи между книгами
Столкнулся с такой проблемой. Мне нужно сделать связь между книгами1 и 2. В книге1 в ячейках формулы. Когда оба файла открыты...

Поиск и замена значений между двумя книгами
Добрый вечер! Прошу подсказать с реализацией в коде. Есть книга(База) со структурированным расположением информации, и книга(Выгрузка) -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru